如何使用maven-assembly-plugin定义执行顺序

use*_*449 4 maven maven-assembly-plugin

我正在努力将项目从Ant迁移到Maven.我需要提供的最终发行版是一个包含可执行jar的zip,其中包含所有依赖性.这是我的pom的一部分:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-4</version>
                <configuration>
                    <finalName>ProjectDistribution</finalName>
                    <appendAssemblyId>false</appendAssemblyId>              
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>                            
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>fullQualifiedNameToMainClass</mainClass>
                            <addClasspath>true</addClasspath>                               
                        </manifest>
                    </archive>
                    <descriptors>
                        <descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
                    </descriptors>                      
                </configuration>
                <executions>
                    <execution>
                        <id>jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>dist</id>
                        <phase>assembly</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>                        
                </executions>                                       
            </plugin>
Run Code Online (Sandbox Code Playgroud)

这是汇编文件:

<assembly>
<id>dist</id>
<formats>
    <format>zip</format>
</formats> 
<!-- 1st approach-->
<!--files>
    <file>
        <source>
            /target/ProjectDistribution.jar
        </source>
        <outputDirectory>/</outputDirectory>
    </file>
</files-->
<fileSets>
            <!-- 2nd approach-->        
    <!--fileSet>
        <directory>/target</directory>
        <outputDirectory></outputDirectory>
        <includes>      
            <include>*.jar</include>
        </includes>
    </fileSet-->
    <fileSet>
        <directory>/HelpFiles</directory>
        <outputDirectory></outputDirectory>
        <includes>
            <include>*.*</include>
        </includes>
    </fileSet>
</fileSets>
Run Code Online (Sandbox Code Playgroud)

我运行1.- mvn compile,2.- mvn package和3.- mvn assembly:single

我正在处理的问题是

它确实生成了包含所有依赖项的jar,它确实生成了zip,但它不包含zip中的jar.我非常需要弄清楚一种方法,让程序集首先生成jar并等到它被创建(因为它的大小是5 MB),然后创建zip.现在第1和第2个方法 - 来自汇编文件 - 被注释掉了,但是,我已经使用了两个,但它们似乎都没有用.

任何帮助将不胜感激!

埃里克

Ste*_*stl 8

要实现这一点,您需要拆分<configuration>并将其放入两个插件执行中:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-4</version>
      <executions>
        <execution>
          <id>jar-with-dependencies</id>
          <phase>verify</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <finalName>ProjectDistribution</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
              <manifest>
                <mainClass>fullQualifiedNameToMainClass</mainClass>
                <addClasspath>true</addClasspath>
              </manifest>
            </archive>
          </configuration>
        </execution>
        <execution>
          <id>dist</id>
          <phase>verify</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

第一次执行将创建jar文件.第二次执行将获取该JAR文件并将其与其他文件一起放入ZIP文件中.使用此配置,您只需执行mvn verifymvn install创建程序集即可.

还有两件事需要考虑:

  • 您应该使用验证阶段来构建程序集,因为jar-with-dependencies描述符包含项目工件本身.在打包阶段,项目工件将无法进行打包
  • jar-with-dependencies描述符具有非常有限的功能来创建具有所有依赖项的JAR文件.你应该使用maven-shade-plugin代替.