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

时间:2009-10-05 22:40:25

标签: maven-2

我有一个项目,我正在尝试创建一个分发zip文件,其中包含(在其他文件中)一个可执行jar,其中包含我的java项目的依赖项。

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

-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-with-dependencies。我的dist zip文件正在构建中。但是dist zip文件不包含jar-with-dependencies文件。

2 个答案:

答案 0 :(得分:47)

使用现有配置,将合并程序集插件的两个单独配置,并且还将合并配置。

要实现您的目标,您应该定义具有多个嵌套执行的单个程序集 - 插件配置,然后为其中的每个执行定义配置。然后,程序集插件将按顺序执行每个程序集,因此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>

答案 1 :(得分:0)

您有两种不同的程序集插件配置,并且您希望它们按顺序运行(jar之前的zip),但我认为Maven不会暗示如何解决这个问题。我的猜测是在JAR文件之前生成了zip文件。

即使不是这种情况,我建议你为每个工件创建一个模块。将JAR程序集移动到自己的模块中,并使现在的Zip-only模块依赖它。这样,Maven的依赖顺序解决方案可以按顺序启动并构建它们。