应用Maven-Assembly-Plugin插件构建可执行软件包

3 篇文章 0 订阅
pom.xml
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.mrliuli</groupId>
  <artifactId>I18nResourceGenerator</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>I18nResourceGenerator</name>
  <url>http://maven.apache.org</url>
  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.13</version>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>javax.media</groupId>-->
      <!--<artifactId>jmf</artifactId>-->
      <!--<version>2.1.1e</version>-->
    <!--</dependency>-->

  </dependencies>

  <!--<properties>-->
    <!--<java.home>C:\Program Files\Java\jdk1.7.0_75</java.home>-->
  <!--</properties>-->

  <build>

    <finalName>i18nGenerator</finalName>

    <plugins>

      <!-- 统一UTF-8编码 -->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <version>2.5</version>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!--  Maven生成可执行jar包的方式  -->

      <!-- 方法一: 使用maven-jar-plugin和maven-dependency-plugin插件打包  -->


      <!-- 默认的mvn install生成的jar是不带主类入口的,需要在maven-compile-plugin中设置主类 -->
      <!-- 配置maven-jar-plugin,用于将代码打包成jar文件 -->
      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-jar-plugin</artifactId>-->
        <!--&lt;!&ndash; The configuration of the plugin &ndash;&gt;-->
        <!--<configuration>-->
          <!--&lt;!&ndash; Configuration of the archive &ndash;&gt;-->
          <!--<archive>-->
            <!--&lt;!&ndash; 生成的jar中,默认包含META-INF/maven/net.mrliuli/i18nResourceGenerator/pom.xml和pom.properties,配置false,不包含。 &ndash;&gt;-->
            <!--<addMavenDescriptor>false</addMavenDescriptor>-->

            <!--&lt;!&ndash; Manifest specific configuration &ndash;&gt;-->
            <!--<manifest>-->

              <!--<mainClass>net.mrliuli.App</mainClass>    &lt;!&ndash; 设置主类入口,应用的main class &ndash;&gt;-->
              <!--<addClasspath>true</addClasspath>               &lt;!&ndash; 是否要把第三方jar放到manifest的classpath中 &ndash;&gt;-->
              <!--<classpathPrefix>lib/</classpathPrefix>   &lt;!&ndash; 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ &ndash;&gt;-->

            <!--</manifest>-->
          <!--</archive>-->
        <!--</configuration>-->
      <!--</plugin>-->

      <!-- 拷贝依赖的jar包到lib目录 -->
      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-dependency-plugin</artifactId>-->
        <!--<executions>-->
          <!--<execution>-->
            <!--<id>copy</id>-->
            <!--<phase>package</phase>-->
            <!--<goals>-->
              <!--<goal>copy-dependencies</goal>-->
            <!--</goals>-->
            <!--<configuration>-->
              <!--<outputDirectory>-->
                <!--${project.build.directory}/lib-->
              <!--</outputDirectory>-->
            <!--</configuration>-->
          <!--</execution>-->
        <!--</executions>-->
      <!--</plugin>-->

      <!-- 方法二: 使用maven-assembly-plugin插件打包 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>

        <!-- 至此,可以mvn package assembly:single命令打包,生成可执行jar。加上以下配置,可以直接以mvn package来打包,生成可执行jar -->
        <!-- 不过,如果项目中用到spring Framework,用这种方式打出来的包运行时会出错,使用下面的方法三可以处理。 -->
        <executions>                    <!-- 执行器 mvn assembly:assembly -->
          <execution>
            <id>make-assembly</id>      <!-- 名字任意 -->
            <phase>package</phase>      <!-- 绑定到package生命周期上,即表示在执行package打包时,执行assembly:single,所以可以直接使用mvn package打包。 -->
            <goals>
              <goal>single</goal>       <!-- 只运行一次 -->
            </goals>
            <configuration>
              <appendAssemblyId>false</appendAssemblyId>
              <descriptors>
                <descriptor>${project.basedir}/src/main/resources/assembly.xml</descriptor>     <!-- 指定描述符文件路径 -->
                <!--<descriptor>/src/main/resources/assembly.xml</descriptor>  &lt;!&ndash; 或者这样 &ndash;&gt;-->
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <addMavenDescriptor>false</addMavenDescriptor>    <!-- 生成的jar中,默认包含META-INF/maven/net.mrliuli/i18nResourceGenerator/pom.xml和pom.properties,配置false,不包含。 -->
            <!-- Manifest specific configuration -->
            <manifest>
              <mainClass>net.mrliuli.App</mainClass>       <!-- 设置主类入口,应用的main class -->
              <addClasspath>true</addClasspath>                 <!-- 是否要把第三方jar放到manifest的classpath中 -->
              <classpathPrefix>lib/</classpathPrefix>          <!-- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ -->
            </manifest>
          </archive>
        </configuration>
      </plugin>



      <!-- 生成附属构件:源码包 -->
      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-source-plugin</artifactId>-->
        <!--<version>2.1.2</version>-->
        <!--<executions>-->
          <!--<execution>-->
            <!--<id>attach-sources</id>-->
            <!--<phase>verify</phase>-->
            <!--<goals>-->
              <!--<goal>jar-no-fork</goal>-->
            <!--</goals>-->
          <!--</execution>-->
        <!--</executions>-->
      <!--</plugin>-->

      <!-- 生成附属构件:Javadoc -->
      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-javadoc-plugin</artifactId>-->
        <!--<version>2.7</version>-->
        <!--<executions>-->
          <!--<execution>-->
            <!--<id>attach-javadocs</id>-->
            <!--<goals>-->
              <!--<goal>jar</goal>-->
            <!--</goals>-->
          <!--</execution>-->
        <!--</executions>-->
      <!--</plugin>-->


      <!--  方法三: 使用maven-shade-plugin插件打包,配置完成后,执行mvn package即可打包。在target目录下会生成两个jar包,注意不是original-xxx.jar文件,而是另外一个。和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行  -->

      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-shade-plugin</artifactId>-->
        <!--<version>2.4.1</version>-->
        <!--<executions>-->
          <!--<execution>-->
            <!--<phase>package</phase>-->
            <!--<goals>-->
              <!--<goal>shade</goal>-->
            <!--</goals>-->
            <!--<configuration>-->

              <!--<transformers>-->
                <!--<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
                  <!--<mainClass>net.mrliuli.App</mainClass>-->
                <!--</transformer>-->
              <!--</transformers>-->

              <!--&lt;!&ndash; 如果项目中用到了spring Framework,将依赖打到一个jar包中,运行时会出现读取XML schema文件出错。原因是Spring Framework的多个jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一个jar包会互相覆盖。为了避免互相影响,可以使用AppendingTransformer来对文件内容追加合并: &ndash;&gt;-->
              <!--<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">-->
                <!--<resource>META-INF/spring.handlers</resource>-->
              <!--</transformer>-->
              <!--<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">-->
                <!--<resource>META-INF/spring.schemas</resource>-->
              <!--</transformer>-->

            <!--</configuration>-->
          <!--</execution>-->
        <!--</executions>-->
      <!--</plugin>-->

    </plugins>

  </build>

</project>
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/3.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/3.0.0 http://maven.apache.org/xsd/assembly-3.0.0.xsd">

    <id>assembly</id>

    <formats>
        <format>zip</format>                                    <!-- 设置打包的格式 -->
    </formats>

    <!-- 要打包的文件 -->
    <fileSets>

        <fileSet>
            <directory>${project.basedir}/src/main/resources/</directory>
            <outputDirectory>/resources</outputDirectory>
            <excludes>
                <exclude>assembly.xml</exclude>
            </excludes>
        </fileSet>

        <!-- target目录下的jar包 -->
        <fileSet>
            <directory>${project.build.directory}/</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>

        <!-- 本机JRE -->
        <fileSet>
            <directory>${java.home}</directory>
            <outputDirectory>/jre</outputDirectory>
        </fileSet>

        <fileSet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README.*</include>
                <include>LICENCE.*</include>
                <include>run.*</include>
            </includes>
        </fileSet>

    </fileSets>



    <!-- 依赖的第三方包打包到lib目录下 -->
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <useProjectArtifact>false</useProjectArtifact>      <!-- 当前项目构件是否包含在这个依赖集合里 -->
            <scope>runtime</scope>                              <!-- 将scope为runtime的依赖包打包到lib目录下。 -->
        </dependencySet>
    </dependencySets>


</assembly>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值