当前位置:   article > 正文

Maven assembly多模块多环境(dev|test|prod)定制化打包SpringBoot项目详解_maven 定制化打包

maven 定制化打包

目录

单模块场景

项目全景图 

pom.xml

 resources配置 

maven-jar-plugin配置

maven-assembly-plugin配置

profiles配置

assembly.xml

打包

多模块场景 


声明:实验环境idea2022+SpringBoot 2.1.3。

单模块场景

        这种方式适用于SpringBoot项目中仅有一个模块的场景。

需求:

1、启停可执行jar包的shell脚本单独打包到某个目录下,例如bin目录;

2、项目resources下的配置从jar包分离出来,单独打包到某个目录下,例如config目录;

3、项目的所有依赖jar包单独打到某个目录下,例如lib目录。

打包完成后,可直接执行bin目录下的启停shell脚本运行程序。

项目全景图 

         项目整体结构如图:

pom.xml

        build结构如图:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-jar-plugin</artifactId>
  6. <configuration>
  7. <archive>
  8. <manifest>
  9. <mainClass>马赛克DevopsBrainYmlAutomationApplication
  10. </mainClass>
  11. <addClasspath>true</addClasspath>
  12. <classpathPrefix>lib</classpathPrefix>
  13. </manifest>
  14. </archive>
  15. <!-- 排除resources下配置文件 -->
  16. <excludes>
  17. <exclude>*.*</exclude>
  18. </excludes>
  19. </configuration>
  20. </plugin>
  21. <plugin>
  22. <groupId>org.apache.maven.plugins</groupId>
  23. <artifactId>maven-assembly-plugin</artifactId>
  24. <executions>
  25. <execution>
  26. <phase>package</phase>
  27. <goals>
  28. <goal>single</goal>
  29. </goals>
  30. </execution>
  31. </executions>
  32. <configuration>
  33. <descriptors>
  34. <descriptor>assembly/assembly.xml</descriptor>
  35. </descriptors>
  36. <outputDirectory>target</outputDirectory>
  37. </configuration>
  38. </plugin>
  39. </plugins>
  40. </build>
  41. <profiles>
  42. <profile>
  43. <id>dev</id>
  44. <properties>
  45. <package.environment>dev</package.environment>
  46. </properties>
  47. <!--默认选择-->
  48. <activation>
  49. <activeByDefault>true</activeByDefault>
  50. </activation>
  51. </profile>
  52. <profile>
  53. <id>test</id>
  54. <properties>
  55. <package.environment>test</package.environment>
  56. </properties>
  57. </profile>
  58. <profile>
  59. <id>prod</id>
  60. <properties>
  61. <package.environment>prod</package.environment>
  62. </properties>
  63. </profile>
  64. </profiles>

maven-jar-plugin配置

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <configuration>
  5. <archive>
  6. <manifest>
  7. <mainClass>马斯克拉ainYmlAutomationApplication
  8. </mainClass>
  9. <addClasspath>true</addClasspath>
  10. <classpathPrefix>lib</classpathPrefix>
  11. </manifest>
  12. </archive>
  13. </configuration>
  14. </plugin>

它配置了jar包启动的主类(程序入口),以及外部依赖的classpath目录。

maven-assembly-plugin配置

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-assembly-plugin</artifactId>
  4. <executions>
  5. <execution>
  6. <phase>package</phase>
  7. <goals>
  8. <goal>single</goal>
  9. </goals>
  10. </execution>
  11. </executions>
  12. <configuration>
  13. <descriptors>
  14. <descriptor>assembly/assembly.xml</descriptor>
  15. </descriptors>
  16. <outputDirectory>target</outputDirectory>
  17. </configuration>
  18. </plugin>

它主要指定assembly.xml文件完成定制化配置,包括shell脚本、配置文件等。

profiles配置

        指定打包环境,比如开发环境、测试环境、演示环境和生产环境。配置好后,idea maven打包中会出现配置的环境,打包的时候,选择一个环境即可。如图:

assembly.xml

  1. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  4. <id>${package.environment}</id>
  5. <formats>
  6. <format>dir</format>
  7. <format>zip</format>
  8. </formats>
  9. <includeBaseDirectory>false</includeBaseDirectory>
  10. <dependencySets>
  11. <!-- 依赖jar包 -->
  12. <dependencySet>
  13. <outputDirectory>/lib</outputDirectory>
  14. <excludes>
  15. <exclude>${project.groupId}:${project.artifactId}</exclude>
  16. </excludes>
  17. </dependencySet>
  18. <!-- jar包 -->
  19. <dependencySet>
  20. <outputDirectory>/</outputDirectory>
  21. <includes>
  22. <include>${project.groupId}:${project.artifactId}</include>
  23. </includes>
  24. </dependencySet>
  25. </dependencySets>
  26. <fileSets>
  27. <!-- 配置文件打包 -->
  28. <fileSet>
  29. <directory>src/main/resources</directory>
  30. <filtered>true</filtered>
  31. <includes>
  32. <include>application.yml</include>
  33. <include>application-${package.environment}.yml</include>
  34. </includes>
  35. <outputDirectory>/config</outputDirectory>
  36. </fileSet>
  37. <!-- shell脚本打包 -->
  38. <fileSet>
  39. <directory>bin/${package.environment}</directory>
  40. <filtered>true</filtered>
  41. <includes>
  42. <include>*.*</include>
  43. </includes>
  44. <outputDirectory>/bin</outputDirectory>
  45. <fileMode>0755</fileMode>
  46. </fileSet>
  47. </fileSets>
  48. </assembly>

(1)id:

assembly的唯一性标识,它会追加到打包后的目录或者zip压缩文件尾部,例如:

 (2)format:

打包后的格式,dir表示打包后是一个目录,zip表示打包后是一个zip压缩文件。如图:

includeBaseDirectory:

是否包含基目录,如果配置为true,会在最后打包的目录下生成一个基目录,如图: 

dependencySet

jar依赖配置。assembly.xml中配置了两个dependencySet,第一个dependencySet将所有依赖打包到lib下,除了本项目的jar包。第二个denpendencySet是将项目jar包打包到根目录/下,这里根目录是相对于打包后的目录而言的,如图:

 fileSets:

文件复制打包,例如shell脚本文件,配置文件等。directory指定输入目录(需要复制的文件所在目录),outputDirectory指定输出目录(复制后的文件所在目录)。如图:

打包

        配置完成后,现在我们开始打包看下效果。首先选择环境,例如选择开发环境(dev),如图:

 打包结果:

多模块场景 

需求:

除了单模块场景的需求外,新增一个多模块的需求:

(1)将每个模块项目自身的jar包打成一个jar包。例如项目结构如图:

 api模块依赖其他子模块(bean、dao、service),当然外部依赖还是打包到lib目录下。

这里需要在api的pom.xml中配置上面单模块的相关配置,还需要新增一个plugin配置:

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <version>2.1.3.RELEASE</version>
  5. <configuration>
  6. <mainClass>马赛克.DevopsBrainManagerApplication</mainClass>
  7. <includes>
  8. <include>
  9. <groupId>马赛克</groupId>
  10. <artifactId>马赛克-service</artifactId>
  11. </include>
  12. <include>
  13. <groupId>马赛克</groupId>
  14. <artifactId>马赛克-dao</artifactId>
  15. </include>
  16. <include>
  17. <groupId>马赛克</groupId>
  18. <artifactId>马赛克-bean</artifactId>
  19. </include>
  20. </includes>
  21. </configuration>
  22. <executions>
  23. <execution>
  24. <goals>
  25. <goal>repackage</goal>
  26. </goals>
  27. </execution>
  28. </executions>
  29. </plugin>

其中includes部分就是将bean、dao、service模块项目自身的jar包打到api模块项目jar中。打包后的效果如图:

下面给出pom.xml和assembly.xml整体配置:

assembly.xml

  1. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  4. <id>${package.environment}</id>
  5. <formats>
  6. <format>dir</format>
  7. <format>zip</format>
  8. </formats>
  9. <includeBaseDirectory>false</includeBaseDirectory>
  10. <dependencySets>
  11. <!-- 依赖jar包 -->
  12. <dependencySet>
  13. <outputDirectory>/lib</outputDirectory>
  14. <excludes>
  15. <exclude>${project.groupId}:*</exclude>
  16. </excludes>
  17. </dependencySet>
  18. <!-- jar包 -->
  19. <dependencySet>
  20. <outputDirectory>/</outputDirectory>
  21. <includes>
  22. <include>${project.groupId}:${project.artifactId}</include>
  23. </includes>
  24. </dependencySet>
  25. </dependencySets>
  26. <fileSets>
  27. <!-- 配置文件打包 -->
  28. <fileSet>
  29. <directory>src/main/resources</directory>
  30. <filtered>true</filtered>
  31. <includes>
  32. <include>application.yml</include>
  33. <include>logback-spring.xml</include>
  34. <include>whiteList.properties</include>
  35. <include>application-${package.environment}.yml</include>
  36. </includes>
  37. <outputDirectory>/config</outputDirectory>
  38. </fileSet>
  39. <!-- shell脚本打包 -->
  40. <fileSet>
  41. <directory>bin/${package.environment}</directory>
  42. <filtered>true</filtered>
  43. <includes>
  44. <include>*.*</include>
  45. </includes>
  46. <outputDirectory>/bin</outputDirectory>
  47. <fileMode>0755</fileMode>
  48. </fileSet>
  49. </fileSets>
  50. </assembly>

pom.xml

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-jar-plugin</artifactId>
  6. <configuration>
  7. <archive>
  8. <manifest>
  9. <addClasspath>true</addClasspath>
  10. <classpathPrefix>lib</classpathPrefix>
  11. </manifest>
  12. </archive>
  13. <!-- 排除resources下配置文件 -->
  14. <excludes>
  15. <exclude>*.*</exclude>
  16. </excludes>
  17. </configuration>
  18. </plugin>
  19. <plugin>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-maven-plugin</artifactId>
  22. <version>2.1.3.RELEASE</version>
  23. <configuration>
  24. <mainClass>马赛克nManagerApplication</mainClass>
  25. <includes>
  26. <include>
  27. <groupId>马赛克</groupId>
  28. <artifactId>马赛克-service</artifactId>
  29. </include>
  30. <include>
  31. <groupId>马赛克</groupId>
  32. <artifactId>马赛克-dao</artifactId>
  33. </include>
  34. <include>
  35. <groupId>马赛克</groupId>
  36. <artifactId>马赛克-bean</artifactId>
  37. </include>
  38. </includes>
  39. </configuration>
  40. <executions>
  41. <execution>
  42. <goals>
  43. <goal>repackage</goal>
  44. </goals>
  45. </execution>
  46. </executions>
  47. </plugin>
  48. <!-- 使用assembly.xml定制化打包 -->
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-assembly-plugin</artifactId>
  52. <executions>
  53. <execution>
  54. <id>make-assembly</id>
  55. <phase>package</phase>
  56. <goals>
  57. <goal>single</goal>
  58. </goals>
  59. </execution>
  60. </executions>
  61. <configuration>
  62. <descriptors>
  63. <descriptor>assembly/assembly.xml</descriptor>
  64. </descriptors>
  65. <outputDirectory>target</outputDirectory>
  66. </configuration>
  67. </plugin>
  68. </plugins>
  69. </build>
  70. <!-- 各种环境配置 默认开发环境 -->
  71. <profiles>
  72. <!-- 开发环境 -->
  73. <profile>
  74. <id>dev</id>
  75. <properties>
  76. <package.environment>dev</package.environment>
  77. </properties>
  78. <!--默认选择-->
  79. <activation>
  80. <activeByDefault>true</activeByDefault>
  81. </activation>
  82. </profile>
  83. <!-- 测试环境 -->
  84. <profile>
  85. <id>test</id>
  86. <properties>
  87. <package.environment>test</package.environment>
  88. </properties>
  89. </profile>
  90. <!-- 演示环境 -->
  91. <profile>
  92. <id>demo</id>
  93. <properties>
  94. <package.environment>demo</package.environment>
  95. </properties>
  96. </profile>
  97. <!-- 生产环境 -->
  98. <profile>
  99. <id>prod</id>
  100. <properties>
  101. <package.environment>prod</package.environment>
  102. </properties>
  103. </profile>
  104. </profiles>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/286314?site
推荐阅读
相关标签
  

闽ICP备14008679号