2013-09-25 33 views
1

我使用maven程序集描述符创建了一个tar(比如project.tar)。 我需要创建一个包含以前创建的tar(project.tar)以及一个脚本文件的tar(比如final.tar)文件。使用maven程序集打包使用maven程序集创建到另一个tar的一个tar

为此,我尝试使用pom.xml中指定的两个描述符。一个描述符用于project.tar,另一个用于final.tar。

虽然这样做我正面临以下错误。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (default-cli) on project ede: Failed to create assembly: Error creating assembly archive bin: A tar file cannot include itself. -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (default-cli) on project ede: Failed to create assembly: Error creating assembly archive bin: A tar file cannot include itself. " 

我pom.xml文件是

... 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <goals> 
     <goal>single</goal> 
    </goals> 
    <configuration> 
    <descriptors> 
     <descriptor>assembly/src.xml</descriptor> 
     <descriptor>assembly/final.xml</descriptor> 
    </descriptors> 
    <appendAssemblyId>false</appendAssemblyId> 
    </configuration> 
</plugin> 
... 

  • 我使用pom.xml文件作为
  • ... 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.4</version> 
        <executions> 
         <execution> 
          <id>jar-with-dependencies</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <descriptors> 
            <descriptor>assembly/src.xml</descriptor> 
           </descriptors> 
           <appendAssemblyId>false</appendAssemblyId> 
          </configuration> 
         </execution> 
         <execution> 
          <id>bin</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <descriptors> 
            <descriptor>assembly/final.xml</descriptor> 
           </descriptors> 
           <appendAssemblyId>false</appendAssemblyId> 
           <finalName>ede2</finalName> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    
    也试着

    以这种方式,它无法找到描述符文件。

    任何人都可以请指导我如果做错了什么?

    回答

    0

    答案的一部分是使用descriptorRef,如汇编插件examples中所述。

    希望这会给你一些开始。

    1

    我知道这篇文章很旧,但我认为它可能需要一些解释。

    在我看来,你想要做的最好的方法是使用maven-assembly-plugin的两个executions。第一个将生成你的项目焦油和第二个最终焦油。 (请在阅读所有答案之前说出更简单的内容)

    这是我会做的(当然它的工作原理)。

    因为我喜欢在不同的文件夹中的组件(因为我觉得它是那样容易),我在我的POM声明属性与目录路径:

    <properties> 
        <myproperties.assembly.project-tar.dir>${project.build.directory}/assembly-project/</myproperties.assembly.project-tar.dir> 
        <myproperties.assembly.final-tar.dir>${project.build.directory}/assembly-final/</myproperties.assembly.final-tar.dir> 
    </properties> 
    

    然后在maven-assembly-plugin我配置处决(永远不会忘记,如果他们被绑定在同一个阶段执行的顺序是非常重要的,因为他们将在声明的顺序执行):

    <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.5.3</version> 
        <executions> 
         <execution> 
          <id>project-tar</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <appendAssemblyId>false</appendAssemblyId> 
           <outputDirectory>${myproperties.assembly.project-tar.dir}</outputDirectory> 
           <descriptors> 
            <descriptor>src/assembly/project-tar.xml</descriptor> 
           </descriptors> 
          </configuration> 
         </execution> 
         <execution> 
          <id>final-tar</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <outputDirectory>${myproperties.assembly.final-tar.dir}</outputDirectory> 
           <descriptors> 
            <descriptor>src/assembly/final-tar.xml</descriptor> 
           </descriptors> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    

    (你可以看到焦油会在不同文件夹和该项目ect tar不会将程序集标识添加到其名称中,因此它看起来像myproject-1.0.tar)

    现在关于程序集定义。

    对于项目tar.xml,我只是包括它的瓶子,你可以做任何你想要的:

    <assembly 
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
        <id>project</id> 
        <formats> 
         <format>tar</format> 
        </formats> 
        <includeBaseDirectory>false</includeBaseDirectory> 
        <fileSets> 
         <fileSet> 
          <directory>${project.build.directory}</directory> 
          <outputDirectory></outputDirectory> 
          <includes> 
           <include>*.jar</include> 
          </includes> 
         </fileSet> 
        </fileSets> 
    </assembly> 
    

    和最终焦油。XML,我包括项目焦油和我有我的脚本文件夹src/main/scripts在:

    <assembly 
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
        <id>final</id> 
        <formats> 
         <format>tar</format> 
        </formats> 
        <includeBaseDirectory>false</includeBaseDirectory> 
        <fileSets> 
         <fileSet> 
          <directory>${myproperties.assembly.project-tar.dir}</directory> 
          <outputDirectory></outputDirectory> 
          <includes> 
           <include>*.tar</include> 
          </includes> 
         </fileSet> 
         <fileSet> 
          <directory>src/main/scripts</directory> 
          <outputDirectory></outputDirectory> 
          <fileMode>755</fileMode> 
         </fileSet> 
        </fileSets> 
    </assembly> 
    

    还有我们,你有你的两个焦油。


    有一个解决方案更简单的是像你一样的开头:

    <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.5.3</version> 
        <executions> 
         <execution> 
          <id>project-tar</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <descriptors> 
            <descriptor>src/assembly/project-tar.xml</descriptor> 
            <descriptor>src/assembly/final-tar.xml</descriptor> 
           </descriptors> 
          </configuration> 
         </execution> 
        </executions> 
        <configuration> 
         <appendAssemblyId>true</appendAssemblyId> 
        </configuration> 
    </plugin> 
    

    descriptors秩序当然是非常重要的。

    与您最初的解决方案的唯一区别是,我把财产appendAssemblyId设置为true,因为如果不是这样,这两个组件将具有相同的名称,当maven-assembly-plugin将尝试建立最终的组装,将检测到存在一个已经有这个名字的文件,将失败说它不能包括它自己...

    随着我的解决方案在两次执行中,您可以将appendAssemblyId设置为false

    相关问题