web-dev-qa-db-ja.com

Mavenアセンブリプラグインモジュールセットのソース命令にファイルが含まれておらず、含まれているモジュールと一致していません

マルチモジュールのMavenプロジェクトがあり、Assemblyプラグインのモジュールセットソース部分を機能させようとしています。

モジュール "module_parent"、 "module_a"、および "module_Assembly"があります。

module_aおよびmodule_Assemblymodule_parentの子です。

module_Assemblymodule_aにpom依存関係を宣言しています。

module_assmeblyにはAssemblyプラグインがあり、Assembly.xmlは次のようになります。

<?xml version="1.0"?>
<Assembly>
  <id>bin</id>
  <formats>
    <format>Zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>com.mystuff:module_a</include>
      </includes>
      <sources>
        <fileSets>
          <fileSet>
            <outputDirectory>/</outputDirectory>
            <excludes>
              <exclude>**/target/**</exclude>
            </excludes>
            <directory>/</directory>
          </fileSet>
        </fileSets>
      </sources>
    </moduleSet>
  </moduleSets>
</Assembly> <!-- -->

module_aのmodule_Assemblyに明示的な依存関係があります。module_Assemblyのpomの依存関係は次のようになります:

<dependencies>
    <dependency>
        <groupId>com.mystuff</groupId>
        <artifactId>module_a</artifactId>
        <version>1.0</version>
        <type>pom</type>
    </dependency>
</dependencies>

デバッグをオンにした状態でmvnパッケージから取得するエラーは次のとおりです。

[DEBUG] All known ContainerDescritporHandler components: [metaInf-services, plexus, metaInf-spring, file-aggregator]
[DEBUG] No dependency sets specified.
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'com.mystuff:module_a'

[DEBUG] Cannot find ArtifactResolver with hint: project-cache-aware
org.codehaus.plexus.component.repository.exception.ComponentLookupException: Java.util.NoSuchElementException
      role: org.Apache.maven.artifact.resolver.ArtifactResolver
  roleHint: project-cache-aware
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.Java:257)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.Java:233)
        at
  <snip>
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: Java.util.NoSuchElementException
        at Java.util.Collections$EmptyIterator.next(Collections.Java:3006)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.Java:253)
        ... 43 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
<snip>
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-Assembly-plugin:2.2:single (make-Assembly) on project apm-server-distribution: Failed to create Assembly: Error creating Assembly archive bin: You must set at least one file. -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-Assembly-plugin:2.2:single (make-Assembly) on project apm-server-distribution: Failed to create Assembly: Error creating Assembly archive bin: You must set at least one file.

主な問題はこの警告行だと思います。

[WARNING] The following patterns were never triggered in this artifact inclusion filter:
    o  'com.mystuff:module_a'

これを修正するにはどうすればよいですか?

16
marathon

Module_Assemblyにモジュールへの子参照がない場合、モジュールとしてカウントされません。ここでの内容は子供のみを参照していることに注意してください: http://maven.Apache.org/plugins/maven-Assembly-plugin/advanced-module-set-topics.html

これを行う場合は、moduleSetではなくdependencySetを使用する必要があります。

PS-賞金をありがとう!

15
John Ament

次の構成を使用して機能しました。

  <includeSubModules>false</includeSubModules>
  <useAllReactorProjects>true</useAllReactorProjects>
2
Nava Polak Onik

同様の問題があるため、アセンブリプラグインをデバッグしていましたが、問題は<useAllReactorProjects>true</useAllReactorProjects>だと思います。その上に、タグ<includeSubModules>もあります。これはおそらくあなたが望むものです。

<Assembly>
  <id>bin</id>
  <formats>
    <format>Zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>false</useAllReactorProjects><!-- Or just don't remove this line -->
      <includeSubModules>true>
...
    </moduleSet>
  </moduleSets>
</Assembly
2
AdrianRM

module_amodule_Assemblyのサブモジュールではないため、試行しているものは機能しません。

ここにあなたができることのいくつかのアイデアがあります:

  • 関連するファイルをjarに含め(おそらくソースプラグインが役立ちます)、dependencySetを使用します。
  • module_Assemblyが親で、module_parentおよびmodule_aがサブモジュールになるように、モジュール構造を変更します。当然のことながら、依存関係の構造はそのままです。
  • 他のプロジェクトを指す相対パスを使用して、アセンブリでfileSetを使用するだけです(醜いです!)
1
Alex Krauss