maven-2 - maven-assembly插件-如何创建嵌套程序集

标签 maven-2

我有一个项目,据此,我试图创建一个分发zip文件,该文件包含(以及其他文件)一个与我的Java项目相关的可执行jar。

所以我有点希望它看起来像这样:

-wiki-search-1.0.0-dist.zip
    -wiki-search.bat
    -wiki-search-help.html
    -wiki-search-1.0.0-jar-with-dependencies.jar
        -jar content...

我使用的是程序集插件和预定义的描述符“jar-with-dependencies”来创建我的可执行jar文件。

我在pom中指定了一个单独的程序集插件条目,引用了一个自定义描述符来尝试构建可分发的zip文件。

所以我的pom部分看起来像这样:
<plugin>
 <artifactId>maven-assembly-plugin</artifactId>
 <configuration>
  <descriptorRefs>
   <descriptorRef>jar-with-dependencies</descriptorRef>
  </descriptorRefs>
  <archive>
   <manifest>
    <mainClass>quicksearch.QuickSearchApp</mainClass>
   </manifest>
  </archive>
 </configuration>
 <executions>
  <execution>
   <id>make-assembly</id>
   <phase>package</phase>
   <goals>
    <goal>attached</goal>
   </goals>
  </execution>
 </executions>
</plugin>
<plugin>
 <artifactId>maven-assembly-plugin</artifactId>
 <configuration>
  <descriptors>
   <descriptor>src/main/assembly/dist.xml</descriptor>
  </descriptors>
 </configuration>
 <executions>
  <execution>
   <id>make-assembly</id>
   <phase>package</phase>
   <goals>
    <goal>attached</goal>
   </goals>
  </execution>
 </executions>
</plugin>

我的自定义描述符如下所示:
<assembly>
  <id>dist</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <includes>
        <include>${project.basedir}/target/wiki-search-0.0.1-SNAPSHOT-jar-with-dependencies.jar</include>
      </includes>
      <outputDirectory>.</outputDirectory> 
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/src/main/etc</directory>
      <includes>
        <include>*</include>
      </includes>
     <outputDirectory></outputDirectory> 
    </fileSet>
  </fileSets>
</assembly>

一切正常。具有依赖关系的jar正在构建。我的dist zip文件正在构建中。但是dist zip文件不包含jar-with-dependencies文件。

最佳答案

使用您现有的配置,程序集插件的两个单独的配置将被合并,并且这些配置也将被合并。

为了实现您的目标,您应该定义具有多个嵌套执行的单个程序集插件配置,然后为其中的每个执行定义配置。然后,程序集插件将按顺序执行每个程序集,因此jar-with-dependencies jar将可用于包含在dist jar中。还要注意,不建议使用attached目标,而建议使用single目标。

还要注意,程序集中的路径是相对于根的,并且要包含特定文件,应使用<files>元素而不是<filesets>元素。您还可以在部件中指定属性,以使其更改时不那么脆弱。

下面重新排列的配置和组装应完成的工作:

程序集描述符:

<assembly>
  <id>dist</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <files>
    <file>
      <source>
        target/${project.artifactId}-${project.version}-jar-with-dependencies.jar
      </source>
      <outputDirectory>/</outputDirectory>
    </file>
  </files>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}/src/main/resources</directory>
      <includes>
        <include>*</include>
      </includes>
     <outputDirectory>/</outputDirectory> 
    </fileSet>
  </fileSets>
</assembly>

程序集插件:
<plugin>
 <artifactId>maven-assembly-plugin</artifactId>
 <executions>
  <execution>
   <id>jar-with-dependencies</id>
   <phase>package</phase>
   <goals>
    <goal>single</goal>
   </goals>
   <configuration>
    <descriptorRefs>
     <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
     <manifest>
      <mainClass>quicksearch.QuickSearchApp</mainClass>
     </manifest>
    </archive>
   </configuration>
  </execution>
  <execution>
   <id>dist</id>
   <phase>package</phase>
   <goals>
    <goal>single</goal>
   </goals>
   <configuration>
    <descriptors>
     <descriptor>src/main/assembly/dist.xml</descriptor>
    </descriptors>
   </configuration>
  </execution>
 </executions>
</plugin>

关于maven-2 - maven-assembly插件-如何创建嵌套程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522778/

相关文章:

maven-2 - 当引用相同工件的冲突版本时,如何使 Maven 失败?

maven - 在 Maven 项目中包含非 Java 源代码

java - 如何跳过多 Maven 模块中的生命周期阶段

java - 有没有办法将长时间运行的(例如压力测试)分开,这样它们就不会在 Maven 2 中默认运行?

java - 在哪里放置 Maven 参数化 junit 输入 xml 文件

maven-2 - Maven 嵌入式 Glassfish 插件 - 如何设置临时目录?

css - mvn tomcat :run does not pick up css files

maven-2 - maven 和提升使用 Scala 2.8 : lift-mapper missing?

java - 何时使用 maven 依赖管理和依赖

java - jetty-maven-plugin 不适用于 Maven 3