zoukankan      html  css  js  c++  java
  • Spring cloud的Maven插件(一):repackage目标

    简介

      Spring Boot Maven Plugin插件提供spring boot在maven中的支持。允许你打包可运行的jar包或war包。

      插件提供了几个maven目标和Spring Boot 应用一起工作。总的有:

      repackage:创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。

      下面我们详细看下repackage这个目标。

    一、简单引用

       用了重新打包应用程序,我们需要在pom.xml文件中加一个简单的引用到Spring Boot Maven Plugin插件中,代码如下:repaceage 最简单的结构

     1 <build>
     2   ...
     3   <plugins>
     4     ...
     5     <plugin>
     6       <groupId>org.springframework.boot</groupId>
     7       <artifactId>spring-boot-maven-plugin</artifactId>
     8       <version>1.5.7.RELEASE</version>
     9       <executions>
    10         <execution>
    11           <goals>
    12             <goal>repackage</goal>
    13           </goals>
    14         </execution>
    15       </executions>
    16     </plugin>
    17     ...
    18   </plugins>
    19   ...
    20 </build>
    repaceage 最简单的结构

    二、剔除不需要的依赖

      这个例子重新打包了一个jar包或war包,这个jar包或war包被构建于maven生命周期的package阶段,包括定义在工程中的任何依赖(包括scope为provided)。如果有一些依赖模块需要被排除掉,可以使用一个exclude的选项。

      默认情况下,repackage和run这两个maven目标会包括定义在工程中的任何依赖。一些依赖被要求从可执行jar包中排除。下面有三种方式可以在包运行时排除依赖模块。

      方式1::排除一个具体的maven 模块,通过唯一的groupId和artifactId组合来实现。(如果有必要,可以加入classifier来唯一确认。)

     1 <project>
     2   ...
     3   <build>
     4     ...
     5     <plugins>
     6       ...
     7       <plugin>
     8         <groupId>org.springframework.boot</groupId>
     9         <artifactId>spring-boot-maven-plugin</artifactId>
    10         <version>1.5.6.RELEASE</version>
    11         <configuration>
    12           <excludes>
    13             <exclude>
    14               <groupId>com.foo</groupId>
    15               <artifactId>bar</artifactId>
    16             </exclude>
    17           </excludes>
    18         </configuration>
    19         ...
    20       </plugin>
    21       ...
    22     </plugins>
    23     ...
    24   </build>
    25   ...
    26 </project>
    排除一个具体的maven模块

      方式2:排除和“指定的artifactId”相符的所有maven模块。

     1 <project>
     2   ...
     3   <build>
     4     ...
     5     <plugins>
     6       ...
     7       <plugin>
     8         <groupId>org.springframework.boot</groupId>
     9         <artifactId>spring-boot-maven-plugin</artifactId>
    10         <version>1.5.6.RELEASE</version>
    11         <configuration>
    12           <excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
    13         </configuration>
    14         ...
    15       </plugin>
    16       ...
    17     </plugins>
    18     ...
    19   </build>
    20   ...
    21 </project>
    排除和指定的artifactId项目的所有maven模块

      方式3:排除属于“指定的groupId”的所有maven模块。

     1 <project>
     2   ...
     3   <build>
     4     ...
     5     <plugins>
     6       ...
     7       <plugin>
     8         <groupId>org.springframework.boot</groupId>
     9         <artifactId>spring-boot-maven-plugin</artifactId>
    10         <version>1.5.6.RELEASE</version>
    11         <configuration>
    12           <excludeGroupIds>com.foo</excludeGroupIds>
    13         </configuration>
    14         ...
    15       </plugin>
    16       ...
    17     </plugins>
    18     ...
    19   </build>
    20   ...
    21 </project>
    排除属于指定的groupId的所有maven模块

    三、重写manifest 

      这个插件还可以重写项目的manifest (可运行jar包的MANIFEST.MF),特别是管理Main-Class和Start-Class启动类。如果默认的配置不能满足需求,我们可以在这里做配置。通过插件的layout属性可以确实地控制Main-Class。

     1 <build>
     2   ...
     3   <plugins>
     4     ...
     5     <plugin>
     6       <groupId>org.springframework.boot</groupId>
     7       <artifactId>spring-boot-maven-plugin</artifactId>
     8       <version>1.5.7.RELEASE</version>
     9       <configuration>
    10         <mainClass>${start-class}</mainClass>
    11         <layout>ZIP</layout>
    12       </configuration>
    13       <executions>
    14         <execution>
    15           <goals>
    16             <goal>repackage</goal>
    17           </goals>
    18         </execution>
    19       </executions>
    20     </plugin>
    21     ...
    22   </plugins>
    23   ...
    24 </build>
    repackage mainClass

      执行打包命令:mvn package spring-boot:repackage。注意:这里不能写成mvn spring-boot:repackage。否则会报Source must refer to an existing file异常。

      layout属性默认根据archive type(jar or war)而定。总的有5中类型:

    • JAR:常规的可执行jar包的布局。
    • WAR:可执行war包的布局。
    • ZIP(和DIR一样):和使用PropertiesLauncher的jar包布局一样。
    • MODULE:包括依赖包(排除scope为provided的依赖包)和项目资源
    • NONE:包括所有的依赖包和项目资源。

    四、利用classifier分离代码包和依赖包

      当自己写项目需要发布出去给别人依赖时,就只需要自己写的代码打包,依赖的包不能打进来。否则最后别人在用你提供的包时,就会出现重复包,导致最后打包时包会非常巨大。

      在这个Spring Boot Maven Plugin这个插件下,我们只需要提供classifier即可实现这个功能。具体如下:

     1 <project>
     2   ...
     3   <build>
     4     ...
     5     <plugins>
     6       ...
     7       <plugin>
     8         <groupId>org.springframework.boot</groupId>
     9         <artifactId>spring-boot-maven-plugin</artifactId>
    10         <version>1.5.7.RELEASE</version>
    11         <executions>
    12           <execution>
    13             <goals>
    14               <goal>repackage</goal>
    15             </goals>
    16             <configuration>
    17               <classifier>exec</classifier>
    18             </configuration>
    19           </execution>
    20         </executions>
    21         ...
    22       </plugin>
    23       ...
    24     </plugins>
    25     ...
    26   </build>
    27   ...
    28 </project>
    repackage classifier

    五、打包时排除resources下的资源文件

     1 <build>
     2   ...
     3     <resources>
     4         <resource>
     5             <directory>src/main/resources</directory>
     6             <excludes>
     7                 <exclude>**/*.properties</exclude>
     8                 <exclude>**/*.xml</exclude>
     9                 <exclude>**/*.yml</exclude>
    10             </excludes>
    11         </resource>
    12     </resources>
    13     <plugins>
    14       ...
    15         <plugin>
    16             <groupId>org.springframework.boot</groupId>
    17             <artifactId>spring-boot-maven-plugin</artifactId>
    18             <executions>
    19                 <execution>
    20                     <goals>
    21                         <goal>repackage</goal>
    22                     </goals>
    23                 </execution>
    24             </executions>
    25         </plugin>
    26       ...
    27     </plugins>
    28   ...
    29 </build>
    排除resources下的资源文件

       

    喜欢请微信扫描下面二维码,关注我公众号--“精修Java”,做一些实战项目中的问题和解决方案分享。 

  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/zhouqinxiong/p/repackage.html
Copyright © 2011-2022 走看看