经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Maven » 查看文章
springboot实现maven多模块和打包部署
来源:jb51  时间:2022/4/7 12:49:39  对本文有异议

开发工具 :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这种方式,等到后期打包的时候他会一直提示你,你引入的依赖不存在!代码如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <!--指定项目的spring boot的版本-->
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.1.3.RELEASE</version>
  10. <relativePath/> <!-- lookup parent from repository -->
  11. </parent>
  12. <!--版本号-->
  13. <groupId>com.mr</groupId>
  14. <artifactId>father</artifactId>
  15. <version>0.0.1-SNAPSHOT</version>
  16. <packaging>pom</packaging> <!--父类为pom-->
  17. <name>father</name>
  18. <description>Demo project for Spring Boot</description>
  19. <!--java 版本-->
  20. <properties>
  21. <java.version>1.8</java.version>
  22. </properties>
  23. <!--管理模块-->
  24. <modules>
  25. <module>entity</module>
  26. <module>dao</module>
  27. <module>service</module>
  28. <module>web</module>
  29. </modules>
  30. <!--指定项目中的公有依赖-->
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter</artifactId>
  35. </dependency>
  36.  
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-starter-test</artifactId>
  40. <scope>test</scope>
  41. </dependency>
  42. </dependencies>
  43.  
  44. <!--指定使用maven 打包-->
  45. <build>
  46. <plugins>
  47. <plugin>
  48. <groupId>org.apache.maven.plugins</groupId>
  49. <artifactId>maven-compiler-plugin</artifactId>
  50. <version>3.1</version>
  51. <configuration>
  52. <source>${java.version}</source>
  53. <target>${java.version}</target>
  54. </configuration>
  55. </plugin>
  56. <plugin>
  57. <groupId>org.apache.maven.plugins</groupId>
  58. <artifactId>maven-surefire-plugin</artifactId>
  59. <version>2.19.1</version>
  60. <configuration>
  61. <skipTests>true</skipTests> <!--默认关掉单元测试 -->
  62. </configuration>
  63. </plugin>
  64. </plugins>
  65. </build>
  66.  
  67. </project>
  68.  

这里有个坑需要注意,dao、service、entity这三个模块的pom.xml文件中不需要build 内容,直接干掉

entity 的 pom.xml 内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.mr</groupId>
  12. <artifactId>entity</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>entity</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter</artifactId>
  25. </dependency>
  26.  
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. </dependencies>
  33.  
  34. </project>
  35.  

dao 的 pom.xml 内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.mr</groupId>
  12. <artifactId>dao</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>dao</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.mybatis.spring.boot</groupId>
  24. <artifactId>mybatis-spring-boot-starter</artifactId>
  25. <version>2.0.0</version>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>mysql</groupId>
  30. <artifactId>mysql-connector-java</artifactId>
  31. <scope>runtime</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-test</artifactId>
  36. <scope>test</scope>
  37. </dependency>
  38. <!--引入entity-->
  39. <dependency>
  40. <groupId>com.mr</groupId>
  41. <artifactId>entity</artifactId>
  42. <version>0.0.1-SNAPSHOT</version>
  43. </dependency>
  44. </dependencies>
  45.  
  46.  
  47. </project>
  48.  

service 模块的 pom.xml 内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.mr</groupId>
  12. <artifactId>service</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>service</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter</artifactId>
  25. </dependency>
  26.  
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32.  
  33. <!--引入dao-->
  34. <dependency>
  35. <groupId>com.mr</groupId>
  36. <artifactId>dao</artifactId>
  37. <version>0.0.1-SNAPSHOT</version>
  38.  
  39. </dependency>
  40. <!--引入entity-->
  41. <dependency>
  42. <groupId>com.mr</groupId>
  43. <artifactId>entity</artifactId>
  44. <version>0.0.1-SNAPSHOT</version>
  45. </dependency>
  46. </dependencies>
  47.  
  48.  
  49. </project>
  50.  

web模块的 pom.xml 内容

注意build部分,因为web模块作为程序的入口启动,所以它需要打包,并且要指定Main Class

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.mr</groupId>
  12. <artifactId>web</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>web</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.mybatis.spring.boot</groupId>
  28. <artifactId>mybatis-spring-boot-starter</artifactId>
  29. <version>2.0.0</version>
  30. </dependency>
  31.  
  32. <dependency>
  33. <groupId>mysql</groupId>
  34. <artifactId>mysql-connector-java</artifactId>
  35. <scope>runtime</scope>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-starter-test</artifactId>
  40. <scope>test</scope>
  41. </dependency>
  42. <!--引入dao-->
  43. <dependency>
  44. <groupId>com.mr</groupId>
  45. <artifactId>dao</artifactId>
  46. <version>0.0.1-SNAPSHOT</version>
  47.  
  48. </dependency>
  49. <!--引入entity-->
  50. <dependency>
  51. <groupId>com.mr</groupId>
  52. <artifactId>entity</artifactId>
  53. <version>0.0.1-SNAPSHOT</version>
  54. </dependency>
  55.  
  56. <!--引入service-->
  57. <dependency>
  58. <groupId>com.mr</groupId>
  59. <artifactId>service</artifactId>
  60. <version>0.0.1-SNAPSHOT</version>
  61. </dependency>
  62.  
  63. </dependencies>
  64.  
  65.  
  66. <build>
  67. <plugins>
  68. <plugin>
  69. <groupId>org.springframework.boot</groupId>
  70. <artifactId>spring-boot-maven-plugin</artifactId>
  71. <configuration>
  72. <!-- 指定该Main Class为全局的唯一入口 -->
  73. <mainClass>com.mr.WebApplication</mainClass>
  74. <layout>ZIP</layout>
  75. </configuration>
  76. <executions>
  77. <execution>
  78. <goals>
  79. <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
  80. </goals>
  81. </execution>
  82. </executions>
  83. </plugin>
  84. </plugins>
  85. </build>
  86.  
  87. </project>
  88.  

到此为止所有的依赖全部完成!接下来就是测试!做了一个简单的查询
在web的项目里application.properties配置文件里 添加以下配置

  1. # mybatis 配置
  2. #使用mybatis配置文件,需要指定该文件的文件路径
  3. #指定mapper.xml文件的路径,如果mapper.xml与接口在一起则不需要该配置
  4.  
  5. mybatis.mapper-locations=classpath:mapper/*Mapper.xml
  6. #扫描pojo包中的实体类并起别名
  7. mybatis.type-aliases-package=com.mr
  8. #日志级别改为debug可以显示sql语句,logging.level后为存放mapper接口的包
  9. logging.level.com.mr.mapper=debug
  10. # 开启驼峰命名法 mybatis.configuration.map-underscore-to-camel-case: true
  11. mybatis.configuration.map-underscore-to-camel-case=true
  12.  
  13. #配置数据源
  14. #德鲁伊 连接池
  15. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  16. spring.datasource.username=ws
  17. spring.datasource.password=1
  18. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  19. # 必须加?号后内容 北京时间东八区
  20. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/redis?serverTimezone=GMT%2B8

在web项目里 pom.xml 中添加以下坐标

  1. <!--连接池-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.10</version>
  6. </dependency>
  7.  
  8. <!--引入freemarker-->
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-freemarker</artifactId>
  12. </dependency>

entity 模块里 在com.mr包下 创建实体类

  1. public class User {
  2. private Integer userId;
  3. private String userName;
  4. private String userPass;
  5. @DateTimeFormat(pattern ="yyyy-MM-dd HH-mm-ss")
  6. private Date userDate;
  7.  
  8. public Integer getUserId() {
  9. return userId;
  10. }
  11.  
  12. public void setUserId(Integer userId) {
  13. this.userId = userId;
  14. }
  15.  
  16. public String getUserName() {
  17. return userName;
  18. }
  19.  
  20. public void setUserName(String userName) {
  21. this.userName = userName;
  22. }
  23.  
  24. public String getUserPass() {
  25. return userPass;
  26. }
  27.  
  28. public void setUserPass(String userPass) {
  29. this.userPass = userPass;
  30. }
  31.  
  32. public Date getUserDate() {
  33. return userDate;
  34. }
  35.  
  36. public void setUserDate(Date userDate) {
  37. this.userDate = userDate;
  38. }
  39.  
  40. @Override
  41. public String toString() {
  42. return "User{" +
  43. "userId=" + userId +
  44. ", userName='" + userName + '\'' +
  45. ", userPass='" + userPass + '\'' +
  46. ", userDate=" + userDate +
  47. '}';
  48. }
  49.  
  50. public User() {
  51. super();
  52. }
  53.  
  54. @Override
  55. public int hashCode() {
  56. return super.hashCode();
  57. }
  58.  
  59. @Override
  60. public boolean equals(Object obj) {
  61. return super.equals(obj);
  62. }
  63.  
  64. @Override
  65. protected Object clone() throws CloneNotSupportedException {
  66. return super.clone();
  67. }
  68.  
  69. @Override
  70. protected void finalize() throws Throwable {
  71. super.finalize();
  72. }
  73. }

在dao模块下 com.mr 包下 创建接口

  1. @Mapper //保证被扫描到
  2. public interface UserDao {
  3. List<User> queryUser();
  4. }
  5.  

然后创建 mapper.xml 文件 与web.xml 配置文件路径一致 按下图操作

在这里插入图片描述

  1. @Mapper //保证被扫描到
  2. public interface UserDao {
  3. List<User> queryUser();
  4. }
  5.  

在service 模块 com.mr包下创建 UserService 接口 并创建对应的实现类 UserServiceImpl

在这里插入图片描述

  1. @Service("userService")
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserDao userDao;
  5.  
  6. @Override
  7. public List<User> queryService() {
  8. return userDao.queryUser();
  9. }
  10. }

在 web 模块下 com.mr包下创建对应的 UserController 代码如下

  1. @Controller
  2. public class UserController {
  3.  
  4. @Autowired
  5. private UserService userService;
  6.  
  7. @RequestMapping("queryUser")
  8. public String queryUser(ModelMap map){
  9. List<User> list= userService.queryService();
  10. map.put("list",list);
  11. return "list";
  12. }
  13. }
  14.  

这里需要建立list.ftl 页面在web 模块下的resource-----templates创建

在这里插入图片描述

  1. <#list list as user>
  2. ${user.userId}
  3. ${user.userName}
  4. ${(user.userDate?string("yyyy-MM-dd HH-mm-ss"))!"没有设置时间"} <#--!后如果为空的话 需要显示的内容-->
  5.  
  6. </#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多模块和打包部署内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号