需要帮助理解打击maven程序集文件。我们有很多maven项目,这会将所有依赖项复制到xc / plugins文件夹中。但我添加了一个依赖,它没有得到打包。后来我发现我必须在依赖项下添加它而不是在dependencySet下。即使我需要在父pom下添加它,然后它才会被添加。如果将它添加到子pom文件下,则不会打包。在此基础上需要帮助。
如何选择所有依赖关系jar。
<moduleSets>
<moduleSet>
<binaries>
<outputDirectory>xc/plugins</outputDirectory>
<outputFileNameMapping>
${module.groupId}.${module.artifactId}-${module.version}${dashClassifier?}.${module.extension}
</outputFileNameMapping>
<unpack>false</unpack>
<includeDependencies>false</includeDependencies>
</binaries>
<excludes>
<exclude>org.opendaylight.controller:sal.networkconfiguration</exclude>
<exclude>org.opendaylight.controller:sal.networkconfiguration.implementation</exclude>
</excludes>
</moduleSet>
</moduleSets>
<dependencySets>
<dependencySet>
<outputDirectory>xc/plugins</outputDirectory>
<excludes>
<exclude>org.slf4j:slf4j-api</exclude>
<exclude>ch.qos.logback:logback-core</exclude>
<exclude>ch.qos.logback:logback-classic</exclude>
<exclude>com.sun.jersey:jersey-core</exclude>
<exclude>com.sun.jersey:jersey-json</exclude>
</excludes>
<outputFileNameMapping>
${artifact.groupId}.${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
</outputFileNameMapping>
<unpack>false</unpack>
<scope>runtime</scope>
<useTransitiveDependencies>false</useTransitiveDependencies>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
答案 0 :(得分:1)
汇编插件通常是Maven高级用户学习掌握的最后一件事。它有它的怪癖,但(一如既往)一旦你理解了它的实际作用,更重要的是它是如何工作的,你会发现它更容易使用。
让我们假设你有一个像这样的多模块构建:
pom.xml (root pom that lists the modules mod1, mod2, mod3 and assembly)
|
+-- mod1
| |
| +-- pom.xml
|
+-- mod2
| |
| +-- pom.xml
|
+-- mod3
| |
| +-- pom.xml
|
+-- assembly
|
+-- pom.xml
+-- assembly-file.xml (the assembly descriptor)
<moduleSets>
中列出的任何内容均适用于mod1
,mod2
,mod3
和 assembly
。
您已在<includeDependencies>false</includeDependencies>
下指定了<binaries>
,因此此配置不会包含任何依赖项,
仅由mod1
,mod2
,mod3
和 assembly
生成的工件。
大多数情况下,我倾向于为<packaging>pom</packaging>
模块指定assembly
。这样做的原因是程序集通常不包含任何代码,它只是一个程序集,所以我不想从中包含任何内容。
在另一个角落,<dependencySets>
(不是<binaries>
下的那个)仅适用于assembly
POM 的依赖关系,没有别的。因此,除非您指定mod1
,mod2
和mod3
作为程序集POM的依赖项(这完全没问题,如果它是您想要的),这个<dependencySets>
不会做太多事;否则,它按预期工作。
如果要配置整个多模块构建的依赖关系集,<binaries>
部分包含自己的<dependencySets>
。但在您的特定情况下,您已声明<includeDependencies>false</includeDependencies>
,因此声明<dependencySets>
下的<binaries>
会变得矛盾。
最后,<fileSets>
和<files>
适用于assembly
POM,因此,除非该项目中有任何文件(例如src/main/resources
下),否则您将获胜。使用它。如果您需要对来自mod1
,mod2
或mod3
的文件进行特定的包含,请使用<unpackOptions>
或<binaries>
下的<dependencySets>
在你想做什么。