2013-09-25 34 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

    相關問題