springboot实现maven多模块和打包部署
目录
- 创建多模块项目
- 依赖关系
开发工具 :idea
工程结构:
父工程father
子模块 dao (用于持久化数据跟数据库交互)
子模块 entity (实体类)
子模块 service (处理业务逻辑)
子模块 web (页面交互接收、传递数据,唯一有启动类的模块)
关系: web依赖 service、dao、entity
service依赖 dao、entity
dao依赖 entity
entity谁都不依赖,独立的
创建多模块项目
new ------file-------project
联网状态下 选择 default 直接下一步
项目结构如下
接下来,把src整个删掉,父工程不需要,因为父工程你就当它只有一个外壳就完了
接下来创建子模块 工程上右键 → new → Module 选择Spring Initaializr 下一步
重复上面操作 创建service 现在创建好了 entity 和 service
dao模块和web模块可以根据实际需求选择引入mysql,mybatis,web这些
删除每个子模块中没用的文件,.mvn、.gitignore、daoiml、mvnw、mvnw.cmd文件只留下pom.xml
删除除了web模块以外其它模块中的Applicatin启动项,和resources目录下的application.properties配置文件
以上动作操作完成以后如果你发现你的子模块变成了文件夹,没关系,找到Maven Projects刷新一下就好了
最终的项目结果如下
依赖关系
打开父pom.xml修改打包方式jar为pom,注意:build内容也需要做替换,因为默认的spring-boot-maven-plugin这种方式,等到后期打包的时候他会一直提示你,你引入的依赖不存在!代码如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--指定项目的spring boot的版本--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!--版本号--> <groupId>com.mr</groupId> <artifactId>father</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!--父类为pom--> <name>father</name> <description>Demo project for Spring Boot</description> <!--java 版本--> <properties> <java.version>1.8</java.version> </properties> <!--管理模块--> <modules> <module>entity</module> <module>dao</module> <module>service</module> <module>web</module> </modules> <!--指定项目中的公有依赖--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!--指定使用maven 打包--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <skipTests>true</skipTests> <!--默认关掉单元测试 --> </configuration> </plugin> </plugins> </build> </project>
这里有个坑需要注意,dao、service、entity这三个模块的pom.xml文件中不需要build 内容,直接干掉
entity 的 pom.xml 内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> <name>entity</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
dao 的 pom.xml 内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dao</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
service 模块的 pom.xml 内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入dao--> <dependency> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
web模块的 pom.xml 内容
注意build部分,因为web模块作为程序的入口启动,所以它需要打包,并且要指定Main Class
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>web</artifactId> <version>0.0.1-SNAPSHOT</version> <name>web</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入dao--> <dependency> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入service--> <dependency> <groupId>com.mr</groupId> <artifactId>service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定该Main Class为全局的唯一入口 --> <mainClass>com.mr.WebApplication</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
到此为止所有的依赖全部完成!接下来就是测试!做了一个简单的查询
在web的项目里application.properties配置文件里 添加以下配置
# mybatis 配置 #使用mybatis配置文件,需要指定该文件的文件路径 #指定mapper.xml文件的路径,如果mapper.xml与接口在一起则不需要该配置 mybatis.mapper-locations=classpath:mapper/*Mapper.xml #扫描pojo包中的实体类并起别名 mybatis.type-aliases-package=com.mr #日志级别改为debug可以显示sql语句,logging.level后为存放mapper接口的包 logging.level.com.mr.mapper=debug # 开启驼峰命名法 mybatis.configuration.map-underscore-to-camel-case: true mybatis.configuration.map-underscore-to-camel-case=true #配置数据源 #德鲁伊 连接池 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.username=ws spring.datasource.password=1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 必须加?号后内容 北京时间东八区 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/redis?serverTimezone=GMT%2B8
在web项目里 pom.xml 中添加以下坐标
<!--连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--引入freemarker--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
entity 模块里 在com.mr包下 创建实体类
public class User { private Integer userId; private String userName; private String userPass; @DateTimeFormat(pattern ="yyyy-MM-dd HH-mm-ss") private Date userDate; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPass() { return userPass; } public void setUserPass(String userPass) { this.userPass = userPass; } public Date getUserDate() { return userDate; } public void setUserDate(Date userDate) { this.userDate = userDate; } @Override public String toString() { return "User{" + "userId=" + userId + ", userName='" + userName + '\'' + ", userPass='" + userPass + '\'' + ", userDate=" + userDate + '}'; } public User() { super(); } @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(Object obj) { return super.equals(obj); } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override protected void finalize() throws Throwable { super.finalize(); } }
在dao模块下 com.mr 包下 创建接口
@Mapper //保证被扫描到 public interface UserDao { List<User> queryUser(); }
然后创建 mapper.xml 文件 与web.xml 配置文件路径一致 按下图操作
@Mapper //保证被扫描到 public interface UserDao { List<User> queryUser(); }
在service 模块 com.mr包下创建 UserService 接口 并创建对应的实现类 UserServiceImpl
@Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public List<User> queryService() { return userDao.queryUser(); } }
在 web 模块下 com.mr包下创建对应的 UserController 代码如下
@Controller public class UserController { @Autowired private UserService userService; @RequestMapping("queryUser") public String queryUser(ModelMap map){ List<User> list= userService.queryService(); map.put("list",list); return "list"; } }
这里需要建立list.ftl 页面在web 模块下的resource-----templates创建
<#list list as user> ${user.userId} ${user.userName} ${(user.userDate?string("yyyy-MM-dd HH-mm-ss"))!"没有设置时间"} <#--!后如果为空的话 需要显示的内容--> </#list>
具体的freemarker 使用-----https://www.jb51.net/article/236936.htm
在web 模块的 WebApplication 启动项目
访问queryUser 效果如下: 这里展示的是数据库数据
打包可执行jar
因为所有的pom.xml有已经配置好了,只需要动手运行 package打包动作就行了,第一次打包不需要clean,记住以后每次打包之前clean一下,关于为什么打jar包,不打war包这个问题,还有其它会遇到的问题,最后说明
双击运行package,看到BUILD SUCCESS 就证明打包成功了 前提是你的每一个模块下的pom.xml要配置好,谁需要打包,谁不需要打包,谁依赖谁,父工程是否声明了子模块,子模块是否声明了父工程是谁,这些是重点!否则 会焦头烂额
接下来去找你工程目录,web文件夹下的target文件夹,刚才打包好的jar文件,就放在这里了
使用 java -jar web-0.0.1-SNAPSHOT.jar 命令来测试运行打包的可执行jar文件
执行成功 !!!!!
到此这篇关于springboot实现maven多模块和打包部署的文章就介绍到这了,更多相关maven多模块和打包部署内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!