Maven汇编:错误输入中有多个文件

时间:2017-01-18 16:14:21

标签: maven maven-assembly-plugin

我有一个构建Ear的Maven项目。然后我们需要将那个耳朵打包成一个包含一些其他文件(shell脚本等)的zip文件。

我的项目如下:

  • foo-parent
    • foo-jar
    • foo-sar
    • foo-ear

罐子,耳朵和耳朵都在建造。耳朵包含罐子和来自其他子模块的sar。现在,我所要做的就是用一些其他文件打包耳塞并将其压缩。

最初,我将程序集放在foo-parent中,但在构建jar,sar和ear之前遇到foo-parent正在运行程序包阶段的问题。读了一下,我被告知将程序集放在其中一个子模块中,所以我选择了foo-ear

我现在收到错误:

Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single
(foo-services-zip) on project foo-ear: Failed to create assembly: 
Error creating assembly archive foo-services-dist: There is more
than one file in input.

我不确定There is more than one file in input的含义。

我的foo-ear POM看起来像这样:

<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.vegicorp.foo</groupId>
        <artifactId>foo-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>..</relativePath>
    </parent>
    <artifactId>foo-ear</artifactId>
    <packaging>ear</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.10.1</version>
                [...]
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>build-foo-zip</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/assembly/foo-zip.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
    [...]
    </dependencies>
</project>

我的src/assembly/foo-zip.xml文件如下所示:

<assembly>
    <id>foo-zip</id>
    <formats>
        <format>gzip</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/dist-files</directory>
            <outputDirectory></outputDirectory>
        </fileSet>
    </fileSets>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
            <includes>
                <include>com.vegicorp.foo:foo-ear</include>
            </includes>
            <binaries>
                 <includeDependencies>false</includeDependencies>
                <outputDirectory>data/ear-dir</outputDirectory>
                <unpack>true</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>
</assembly>

是的,我知道我可以只使用<file>或其他<fileSet>,但需要在gzip文件中解压缩耳朵,因此我需要使用<moduleSets>。我不确定<binary><moduleSets>如何运作,我相信我的错误在该配置中的某处。

1 个答案:

答案 0 :(得分:1)

发现问题。程序集文件的格式为gzip。这实际上是一种无效格式,但程序集仍然采用它。如果装配中有多个文件,则装配将失败。我将格式更改为zip,一切正常 - 包括我认为是问题的模块内容。

这可能是Assembly插件中的一个错误。我将不得不进行调查。