web-dev-qa-db-ja.com

Mavenアセンブリ-アセンブリの読み取りエラー

私はパーソナライズされた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.xmlsrc/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

エラーが表示されません。誰かが解決策を持っていますか?

22
Laurent

ここには2つの問題があります。まず、独自の記述子を使用する場合は、カスタマイズした記述子ファイルへのパスを指定する必要があります(ちなみに、記述子を置くこと以外の任意の場所を使用できます) _src/main/resources_はおそらく最良の選択ではありません。記述子をアプリケーションにパッケージ化したくない場合は、標準の場所である_src/main/Assembly_を使用します thisページ )。

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

または、configurationexecution要素の外に移動します(構成をグローバルにするため):

_<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>
_
23
Pascal Thivent

アセンブリは/assemblies/${ref}.xmlをクラスパスで開こうとしていますこれをチェックしてください

http://maven.Apache.org/plugins/maven-Assembly-plugin/xref/org/Apache/maven/plugin/Assembly/io/DefaultAssemblyReader.html

4
user241037