Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用maven assembly插件定义执行顺序_Maven_Maven Assembly Plugin - Fatal编程技术网

如何使用maven assembly插件定义执行顺序

如何使用maven assembly插件定义执行顺序,maven,maven-assembly-plugin,Maven,Maven Assembly Plugin,我正在将一个项目从Ant迁移到Maven。我需要交付的最后一个发行版是一个包含可执行jar及其所有依赖项的zip。以下是我的pom的一部分: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId>

我正在将一个项目从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>

org.apache.maven.plugins
maven汇编插件
2.2-β-4
项目分布
假的
带有依赖项的jar
完全合格的名称包括
真的
${project.basedir}/src/main/assembly/dep.xml
带有依赖项的jar
包裹
单一的
距离
装配
单一的
这是程序集文件:

<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>

距离
拉链
/帮助文件
*.*

我运行1.-mvn编译、2.-mvn包和3.-mvn组装:单个

我要处理的问题是

它确实生成了包含所有依赖项的jar,并且确实生成了zip,但没有将jar包含在zip中。我非常需要找到一种方法,让程序集首先生成jar,然后等待它被创建(因为它的大小是5MB),然后创建zip。现在,第一种和第二种方法(来自程序集文件)被注释掉了,但是,我已经使用了这两种方法,它们似乎都不起作用

任何帮助都将不胜感激


Eric

您将预定义的
jar与依赖项
与自定义的
zip
描述符混合在一起。你通常会想要其中一个,而不是两个


看起来您需要一个包含项目工件及其依赖项的zip。为此,您不需要创建带有依赖项的
jar
。但是,如果您确实想要一个包含所有依赖项的可执行jar,那么不清楚您为什么需要再次压缩它。

要使其正常工作,您需要拆分
并将其放入两个插件执行中:

<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>

org.apache.maven.plugins
相反

我需要压缩它,因为最终发行版不仅包括可执行jar,还包括与许可证相关的文档和手册。我最初的想法是使用预定义的jar和依赖项,这非常有效,结果jar使用汇编文件将其添加到zip中。这有意义吗?你知道有什么更有效的方法来实现这一点吗?你说的很有道理。很抱歉第一次没有收到,我是maven的新手。您能否就如何生成包含所有依赖项的工件(可执行jar)提供建议?非常感谢你!很抱歉,它仍然不起作用。我做了您建议的更改,当我使用mvn验证或mvn安装时,不会创建任何内容。当我使用mvn assembly:single时,它会显示以下错误消息:“读取程序集时出错:找不到程序集描述符。”可能是因为这两种配置都在执行中,maven不知道从哪里开始?非常感谢你的帮助!maven应该按照定义的顺序完成插件执行(前提是每次执行的顺序相同)。您是否在或中进行了配置?我已经尝试了maven shade插件,但似乎无法正常工作。它确实生成了jar,但不存在依赖项。如果您可以建议如何使用maven shade插件创建一个具有所有依赖项的可执行jar,那么我可以继续使用assembly插件压缩jar。非常感谢!是的,它们位于以下结构的内部。。我认为现在最好的办法是使用你提到的maven shade插件。。但是我以前没能让它工作。。你能就我在上一次评论中提出的问题提出建议吗。非常感谢你!我认为,
就是问题所在。你能试着把整个
部分放到
.…
中吗?关于maven shade插件。如果jar和依赖项描述符适合您,您可以轻松地使用它。我只是想提一下,万一您有一个更复杂的jar需要构建(例如,一个jar文件,其中包含必须与其他jar中的配置文件合并的配置文件)