【问题标题】:Maven assembly - Error reading assembliesMaven 程序集 - 读取程序集时出错
【发布时间】:2011-01-28 15:43:05
【问题描述】:

我已经定义了一个个性化的 jar-with-dependencies 程序集描述符。但是,当我使用 mvn assembly:assembly 执行它时,我得到:

...
[INFO] META-INF/ already added, skipping
[INFO] META-INF/MANIFEST.MF already added, skipping
[INFO] javax/ already added, skipping
[INFO] META-INF/ already added, skipping
[INFO] META-INF/MANIFEST.MF already added, skipping
[INFO] META-INF/maven/ already added, skipping
[INFO] [assembly:assembly {execution: default-cli}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error reading assemblies: No assembly descriptors found.

我的 jar-with-dependencies.xml 位于 src/main/resources/assemblies/

我的程序集描述符如下:

<?xml version='1.0' encoding='UTF-8'?>
<assembly>
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>

    <dependencySets>
        <dependencySet>
            <scope>runtime</scope>
            <unpack>true</unpack>
            <unpackOptions>
                <excludes>
                    <exclude>**/LICENSE*</exclude>
                    <exclude>**/README*</exclude>
                </excludes>
            </unpackOptions>
        </dependencySet>
    </dependencySets>

    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>src/main/resources/META-INF/services</directory>
            <outputDirectory>META-INF/services</outputDirectory>
        </fileSet>
    </fileSets>

</assembly>

而我的项目 pom.xml 是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <executions>
        <execution>
            <id>jar-with-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>jar-with-dependencies.xml</descriptor>
                </descriptors>
                <archive>
                    <manifest>
                        <mainClass>org.my.app.HowTo</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

执行 mvn assembly:assembly 时,解包依赖项,解包完成后出现上一个错误。

此外,如果我执行 mvn -e assembly:assembly 表示没有找到描述符,但是它会尝试解压缩依赖项并创建一个具有依赖项的 JAR,但它不包含 META-INF/services/*在描述符中指定:

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error reading assemblies: No assembly descriptors found.

[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error reading assemblies: No assembly descriptors found.
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error reading assemblies: No assembly descriptors found.
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:356)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    ... 17 more
Caused by: org.apache.maven.plugin.assembly.io.AssemblyReadException: No assembly descriptors found.
    at org.apache.maven.plugin.assembly.io.DefaultAssemblyReader.readAssemblies(DefaultAssemblyReader.java:206)
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:352)
    ... 19 more

我没有看到我的错误。有人有解决方案吗?

【问题讨论】:

标签: plugins maven-2 assemblies maven-descriptor


【解决方案1】:

这里有两个问题。首先,当使用您自己的描述符时,您必须指定路径您的自定义描述符文件(顺便说一下,您可以使用任何位置,但将描述符放在src/main/resources 中可能不是最佳选择,您真的不希望将描述符打包在您的应用程序中,我会使用标准位置,即src/main/assembly,如this page 中所述)。

<descriptors>
  <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
</descriptors>

其次,您的 configuration 元素当前位于 execution 块内,因此特定于 this 执行。换句话说,如果您在命令行上运行assembly:assembly,它将不适用。因此,如果您想使用自定义描述符调用 assembly:assembly,请使用:

mvn assembly:assembly -Ddescriptor=path/to/descriptor.xml

或者将configuration 移到execution 元素之外(使配置全局化):

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
          <descriptors>
            <descriptor>path/to/descriptor.xml</descriptor>
          </descriptors>
          ...
        </configuration>
      </plugin>
     </plugins>
     ...
   </build>
   ...
</project>

【讨论】:

  • 我已经编辑了路径并将 jar-with-dependencies.xml 移动到 src/main/assembly/ 中,就像你提到的那样,但我总是遇到同样的错误。这是非常惊人的。
  • 我不确定是路径错误。如果我指示错误的路径,则在通过以下消息解压依赖项之前停止执行:错误定位程序集描述符文件...(没有这样的文件或目录)而在我的情况下,路径正确,我得到:读取程序集时出错:否找到程序集描述符。
  • 我也有同样的问题。组装插件似乎有问题,或者对用户非常不友好。
  • 很奇怪。它实际上在运行“mvn package”时有效,但是在执行“mvn assembly:single”时我遇到了和所有人一样的失败
  • 实际上,您指向的页面中提到的标准位置是:src/assembly(“程序集描述符”),而不是 src/main/assembly。我想这是因为你也可以为开发/测试环境打包。不过可能与遇到的错误无关。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多