Maven打包

待我称王封你为后i 2023-02-20 02:40 96阅读 0赞

Maven打包

Springboot项目的打包

使用maven自带的打包插件

以springboot 2.2.2版本为例

父项目pom——————-父项目只提供版本控制 不需要 打包脚本 bulid

  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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.xxx.airport</groupId>
  5. <artifactId>sddi-security-father</artifactId>
  6. <packaging>pom</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <modules>
  9. <module>sddi-security-data</module>
  10. </modules>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>2.2.2.RELEASE</version>
  15. </parent>
  16. <!-- 统一管理jar包版本 -->
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <maven.compiler.source>1.8</maven.compiler.source>
  20. <maven.compiler.target>1.8</maven.compiler.target>
  21. <junit.version>4.12</junit.version>
  22. <log4j.version>1.2.17</log4j.version>
  23. <lombok.version>1.16.18</lombok.version>
  24. <mysql.version>8.0.18</mysql.version>
  25. <druid.version>1.1.16</druid.version>
  26. <druid.spring.boot.starter.version>1.1.10</druid.spring.boot.starter.version>
  27. <spring.boot.version>2.2.2.RELEASE</spring.boot.version>
  28. <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
  29. <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
  30. <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  31. <mybatis-spring-boot-starter.version>2.1.1</mybatis-spring-boot-starter.version>
  32. <hutool-all.version>5.1.0</hutool-all.version>
  33. </properties>
  34. <!-- 子模块继承之后,提供作用:锁定版本 + 子module不用谢groupId和version -->
  35. <dependencyManagement>
  36. <dependencies>
  37. <!--spring boot 2.2.2-->
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-dependencies</artifactId>
  41. <version>2.2.2.RELEASE</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. <!--spring cloud Hoxton.SR1-->
  46. <dependency>
  47. <groupId>org.springframework.cloud</groupId>
  48. <artifactId>spring-cloud-dependencies</artifactId>
  49. <version>Hoxton.SR1</version>
  50. <type>pom</type>
  51. <scope>import</scope>
  52. </dependency>
  53. <!--Spring cloud alibaba 2.1.0.RELEASE-->
  54. <dependency>
  55. <groupId>com.alibaba.cloud</groupId>
  56. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  57. <version>2.1.0.RELEASE</version>
  58. <type>pom</type>
  59. <scope>import</scope>
  60. </dependency>
  61. <dependency>
  62. <groupId>mysql</groupId>
  63. <artifactId>mysql-connector-java</artifactId>
  64. <version>${mysql.version}</version>
  65. </dependency>
  66. <dependency>
  67. <groupId>com.alibaba</groupId>
  68. <artifactId>druid</artifactId>
  69. <version>${druid.version}</version>
  70. </dependency>
  71. <dependency>
  72. <groupId>com.alibaba</groupId>
  73. <artifactId>druid-spring-boot-starter</artifactId>
  74. <version>${druid.spring.boot.starter.version}</version>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.mybatis.spring.boot</groupId>
  78. <artifactId>mybatis-spring-boot-starter</artifactId>
  79. <version>${mybatis-spring-boot-starter.version}</version>
  80. </dependency>
  81. <dependency>
  82. <groupId>org.projectlombok</groupId>
  83. <artifactId>lombok</artifactId>
  84. <version>${lombok.version}</version>
  85. </dependency>
  86. </dependencies>
  87. </dependencyManagement>
  88. </project>

启动项目pom

增加打包的插件 并添加启动类 并把依赖的jar打进去

这个脚本 build 最终只生成一个jar 会把依赖的jar包都打进去

  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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <parent>
  4. <artifactId>sddi-custom-acs</artifactId>
  5. <groupId>com.xxx.airport</groupId>
  6. <version>1.0-SNAPSHOT</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>data-to-sddi</artifactId>
  10. <packaging>jar</packaging>
  11. <dependencies>
  12. <!--数据依赖接入模块-->
  13. <dependency>
  14. <groupId>com.xxx.airport</groupId>
  15. <artifactId>87-platform-plugin</artifactId>
  16. <version>${project.version}</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>com.xxx.airport</groupId>
  20. <artifactId>custom-common</artifactId>
  21. <version>${project.version}</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <!--监控-->
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-actuator</artifactId>
  31. </dependency>
  32. <!--jpa-->
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-data-jpa</artifactId>
  36. </dependency>
  37. <!--jdbc-->
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-jdbc</artifactId>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.postgresql</groupId>
  44. <artifactId>postgresql</artifactId>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.projectlombok</groupId>
  48. <artifactId>lombok</artifactId>
  49. <optional>true</optional>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-tx</artifactId>
  54. </dependency>
  55. </dependencies>
  56. <!-- Package as an executable jar -->
  57. <build>
  58. <resources>
  59. <resource>
  60. <directory>src/main/java</directory>
  61. <includes>
  62. <include>**/*.xml</include>
  63. </includes>
  64. </resource>
  65. <resource>
  66. <directory>src/main/resources</directory>
  67. <includes>
  68. <include>**.*</include>
  69. <include>**/*.*</include><!-- i18n能读取到 -->
  70. <include>**/*/*.*</include>
  71. </includes>
  72. </resource>
  73. </resources>
  74. <plugins>
  75. <plugin>
  76. <groupId>org.springframework.boot</groupId>
  77. <artifactId>spring-boot-maven-plugin</artifactId>
  78. <configuration>
  79. <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
  80. <!-- 指定该Main Class为全局的唯一入口 -->
  81. <mainClass>com.xxx.airport.SddiCustomAcsWebApplication</mainClass>
  82. <layout>ZIP</layout>
  83. </configuration>
  84. <executions>
  85. <execution>
  86. <goals>
  87. <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
  88. </goals>
  89. </execution>
  90. </executions>
  91. </plugin>
  92. </plugins>
  93. </build>
  94. </project>

如果 启动项目A 依赖自己写的jar B B也在父项目中 这个时候要对B的pom也加上打包的build 否则 A启动加载的时候会提示B中的bean无法加载

  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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <parent>
  4. <artifactId>sddi-custom-acs</artifactId>
  5. <groupId>com.xxx.airport</groupId>
  6. <version>1.0-SNAPSHOT</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>87-platform-plugin</artifactId>
  10. <dependencies>
  11. <dependency>
  12. <groupId>com.xxx.airport</groupId>
  13. <artifactId>custom-common</artifactId>
  14. <version>${project.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.xxx.airport</groupId>
  18. <artifactId>data-from-plugin</artifactId>
  19. <version>${project.version}</version>
  20. </dependency>
  21. <!--protobuf-java-->
  22. <dependency>
  23. <groupId>com.google.protobuf</groupId>
  24. <artifactId>protobuf-java</artifactId>
  25. <version>2.3.0</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.projectlombok</groupId>
  29. <artifactId>lombok</artifactId>
  30. <optional>true</optional>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.apache.geronimo.specs</groupId>
  34. <artifactId>geronimo-jms_1.1_spec</artifactId>
  35. <version>1.1.1</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.apache.activemq</groupId>
  39. <artifactId>activemq-client</artifactId>
  40. <version>5.15.11</version>
  41. </dependency>
  42. </dependencies>
  43. <!-- Package as an executable jar -->
  44. <build>
  45. <resources>
  46. <resource>
  47. <directory>src/main/java</directory>
  48. <includes>
  49. <include>**/*.xml</include>
  50. </includes>
  51. </resource>
  52. <resource>
  53. <directory>src/main/resources</directory>
  54. <includes>
  55. <include>**.*</include>
  56. <include>**/*.*</include><!-- i18n能读取到 -->
  57. <include>**/*/*.*</include>
  58. </includes>
  59. </resource>
  60. </resources>
  61. </build>
  62. </project>

注意点

如果没有测试的文件可以把 test的文件夹删掉 原因是什么不清楚 但是有了 test的文件夹 在进行install的时候会报错

修改成果物无的名称 在启动项目的pom中增加 finalName

  1. <build>
  2. <finalName>Myapp</finalName>
  3. </build>

maven-assembly-plugin插件打包

maven-jar-plugin,默认的打包插件,用来打普通的project JAR包

  • maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包;
  • maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等

实际使用的多的是assembly的插件

上面使用默认的插件 打出来的jar 合在一个jar里面 如果想替换其中的某一个jar就得重新打包很不方便,assembly打包出来的就是一个个的jar 而且目录结构可以按照自己定义的来 比较方便

下面介绍使用

  1. 需要指定一个Assembly描述符文件。该文件指定了打包格式,包含的文件/过滤的文件等信息,可以同时指定多个描述符文件,打包成不同的格式。

  2. 在Maven工程的pom.xml文件里配置maven-assembly-plugin插件,引入Assembly描述符文件。

    <?xml version=”1.0” encoding=”UTF-8”?>



    build



    zip


    false


    ${project.basedir}/src/main/resources
    \config

    application.properties
    startupConfig.xml
    banner.txt
    logback.xml
    cas-client.properties
    department.properties
    alarmtype.properties

    0755
    0644



    ${project.basedir}/src/assembly/temp
    \temp
    0755


    ${project.basedir}/src/assembly/logs
    \logs
    0755


    ${project.basedir}/src/bin
    \bin

    */

    0755
    0755


    ${project.build.directory}
    \lib

    ${project.artifactId}-${project.version}.jar

    0755





    false
    lib
    runtime
    0755


配置文件pom中的文件

  1. <build>
  2. <plugin>
  3. <groupId>org.apache.maven.plugins</groupId>
  4. <artifactId>maven-assembly-plugin</artifactId>
  5. <configuration>
  6. <finalName>rpid-web</finalName>
  7. <appendAssemblyId>false</appendAssemblyId>
  8. <outputDirectory>../../output/</outputDirectory>
  9. <archive>
  10. <manifest>
  11. <mainClass>com.hikvision.metro.RpidWebApplicatin</mainClass>
  12. </manifest>
  13. </archive>
  14. <descriptors>
  15. <descriptor>src/assembly/assembly.xml</descriptor>
  16. </descriptors>
  17. </configuration>
  18. <executions>
  19. <execution>
  20. <id>make-assembly</id><!--名字任意 -->
  21. <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
  22. <goals>
  23. <goal>single</goal><!-- 该打包任务只运行一次 -->
  24. </goals>
  25. </execution>
  26. </executions>
  27. </plugin>
  28. </plugins>
  29. </build>

最终会打包出来一个zip的包
在这里插入图片描述

最终会打包出来一个zip的包

[外链图片转存中…(img-G0m5dEHr-1592806446944)]

这个时候可以使用jsvc的方式去启动 对应的jar 后面有时间 再把jsvc的方式写出来

发表评论

表情:
评论列表 (有 0 条评论,96人围观)

还没有评论,来说两句吧...

相关阅读

    相关 maven 打包

            工作中会时常遇到maven打包,并将打好的二方包提供给其他同事使用。maven打包的原理本质上是修改项目中相关pom的version,然后执行maven打包命令

    相关 maven 打包异常

    问题描述:修改 .java 文件后,重新 clean install,对 target 目录中的 war 包里的 class 文件反编译,内容仍然是修改前的。而 target/

    相关 maven打包

    在SpringBoot工程中,通过jar包的方式启动项目很方便,一个项目可以灵活改变配置启动 比如: `java -jar demo.jar --server.port