Инструкции Maven assembly plugin moduleset sources не включают файлы и не соответствуют включенным модулям
у меня есть многомодульный проект maven, и я пытаюсь заставить часть источников moduleset плагина сборки работать.
у меня есть модули "module_parent","module_a" и "module_assembly".
module_a и module_assembly дети module_parent.
module_assembly имеет объявленную зависимость pom от module_a.
module_assmebly имеет плагин сборки, со сборкой.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_assembly для module_a. Зависимость в POM module_assembly'S выглядит так:
<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'
как исправить это?
4 ответов
Если module_assembly не имеет дочерней ссылки на ваш модуль, он не считается модулем. Примечание. содержание здесь относится только к детям: http://maven.apache.org/plugins/maven-assembly-plugin/advanced-module-set-topics.html
Если вы хотите сделать это, вам нужно использовать dependencySet, а не moduleSet.
PS-Спасибо за щедрость!
Он работал для меня, используя следующую конфигурацию:
<includeSubModules>false</includeSubModules>
<useAllReactorProjects>true</useAllReactorProjects>
Я просто отлаживал плагин сборки, потому что у меня есть аналогичная проблема, и я думаю, что проблема в <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
то, что вы пытаетесь не работает, так как module_a не является подмодулем module_assembly.
вот некоторые идеи о том, что вы можете сделать:
- включить соответствующие файлы в банку (возможно, исходный плагин помогает) и использовать dependencySet.
- измените структуру модуля, так что module_assembly родитель, а module_parent и module_a несколько подмодулей. Из курс, структура зависимости остается прежней.
- просто используйте набор файлов в сборке с относительными путями, которые указывают на другой проект (уродливый!)