1

Mavenアセンブリ記述子を使用してtar(たとえばproject.tar)を作成しました。以前に作成した tar (project.tar) と 1 つのスクリプト ファイルを含む tar (たとえば final.tar) ファイルをもう 1 つ作成する必要があります。

これを行うには、pom.xml で指定された 2 つの記述子を使用しようとしています。1 つの記述子は project.tar 用で、2 つ目は 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>
...

  1. また、 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>

この方法では、記述子ファイルを見つけることができません。

何か間違ったことをしている場合は、誰か私を案内してもらえますか?

4

2 に答える 2

2

この投稿が非常に古いことは承知していますが、説明が必要かもしれません。

私の意見では、あなたがやりたいことの最善の方法は、 の 2 つを使用することexecutionsですmaven-assembly-plugin。1 つ目はプロジェクトの tar を生成し、2 つ目は最終的な tar を生成します。(もっと簡単なものがあると言う前に、すべての答えを読んでください)

これが私がすることです(もちろん動作します)。

アセンブリを別のフォルダーに配置したいので (その方が簡単だと思うため)、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>

(tar は別のフォルダーにあり、プロジェクト tar の名前にはアセンブリ ID が追加されていないため、myproject-1.0.tar のようになります)

アセンブリの定義について。

project-tar.xml については、jar を含めるだけで、好きなことを行うことができます。

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

また、final-tar.xml には、プロジェクトの tar とフォルダーにあるスクリプトを含めます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>

これで、2 つのタールができました。


最初に行ったように、より単純な解決策があります。

<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順番は非常に重要です。

最初のソリューションとの唯一の違いは、プロパティを true に設定しておくappendAssemblyIdことです。そうでない場合、2 つのアセンブリは同じ名前になりmaven-assembly-plugin、最終的なアセンブリをビルドしようとすると、既に存在するファイルがあることが検出されます。この名前は、それ自体を含めることができないと言って失敗します...

私のソリューションを 2 回実行すると、 を に設定できappendAssemblyIdますfalse

于 2015-04-22T11:37:19.230 に答える
0

答えの一部は、アセンブリ プラグインの例で説明されているように、descriptorRef を使用することです。

うまくいけば、それが何かを始めるきっかけになります。

于 2014-01-09T23:00:44.140 に答える