我有一个Maven多模块项目。在一个模块中,我们使用maven-assembly-plugin插件创建一个ZIP。配置:
<baseDirectory>/</baseDirectory>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<excludes>
<exclude>
com.sample.blabla:test-core-client
</exclude>
</excludes>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
pom配置:
<execution>
<id>make-service-client-with-dependencies-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>${service-client-with-dependencies.zip.filename}</finalName>
<appendAssemblyId>true</appendAssemblyId>
<outputDirectory>${project.build.directory}/zip</outputDirectory>
<descriptors>
<descriptor>src/main/assembly/test-service-client-with-dependencies.xml</descriptor>
</descriptors>
</configuration>
</execution>
不幸的是,创建的ZIP包含更多jar-s,我们希望...例如:37 X maven-XXX JAR,很多弹簧罐,旅行车罐......等等。
但我们不想包含这些罐子,只是运行时必需的罐子。我们怎么做呢?
答案 0 :(得分:2)
Maven程序集插件仅包含 根据您的配置位于runtime
范围内的jar。您可以运行mvn dependency:tree
并将输出与zip的内容进行比较。
您可以尝试将属性useTransitiveDependencies
设置为false
。这将排除zip中的所有传递依赖项。但这会产生令人不快的副作用。
答案 1 :(得分:0)
您使用描述符test-service-client-with-dependencies.xml
,其中包含结果中的所有内容和厨房接收器。
请改用jar-with-dependencies
。这将包括入口运行时依赖性(本地和瞬态)。
如果仍然太多,那么您可以通过将它们声明为<scope>provided</scope>
(如果其他人稍后将它们添加到类路径中)来省略依赖关系,<scope>test</scope>
(如果只需要依赖关系)运行测试)或<optional>true</optional>
如果这是一个可选的依赖项。