我有maven项目。我使用maven-assembly-plugin创建包含所有模块依赖项的zip文件。 需要创建具有以下结构的zip:
/my-libs
/other-libs
对于my-libs
,需要打包my-lib
依赖关系及其所有传递依赖关系中的依赖关系。
要other-libs
需要打包当前Maven模块中的所有 other 依赖项。
基本上我需要有条件地选择目标文件夹:
if (dependency in transitive-dependencies(my-lib))
copy to /my-libs
else
copy to /other-libs
是否可以使用maven-assembly-plugin
?有其他替代的maven插件吗?
答案 0 :(得分:1)
您需要在程序集XML文件中定义两个dependencySet
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
...
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<useTransitiveFiltering>false</useTransitiveFiltering>
<includes>
<include>com.example:dependency1:jar</include>
<include>com.example:dependency2:jar</include>
...
</includes>
<outputDirectory>/my-libs</outputDirectory>
</dependencySet>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<useTransitiveFiltering>false</useTransitiveFiltering>
<includes>
<include>com.example:other1:jar</include>
<include>com.example:other2:jar</include>
...
</includes>
<outputDirectory>/other-libs</outputDirectory>
</dependencySet>
</dependencySets>
...
</assembly>
文档:
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html
答案 1 :(得分:0)
您可以尝试maven dependency plugin。
执行1-复制pom中提到的所有依赖项。
执行2-复制所有依赖项以及传递性依赖项。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-project-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/project-dependency</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
<execution>
<id>copy-project-dependencies-all</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/project-dependency-all</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
答案 2 :(得分:0)
我给你的印象是你开错了路。您说只有某些程序在类路径上需要other-libs
,而其他程序则不需要。因此,这些似乎不是项目的“真正”依赖项,最多是可选的依赖项。
我建议使用my-lib
项目创建具有所有依赖项的my-lib
的程序集zip。可以在不需要otherlibs
的所有情况下使用。
另一方面,您可以从原始项目中创建第二个zip,其中包含所有库。这样,您就可以出于两个不同的目的使用两个不同的zip,但是无需在zip中创建目录结构。
答案 3 :(得分:0)
您可以将依赖项分为两个模块:
- ModuleX
pom.xml (contain my-libs)
- ModuleY
pom.xml (contain my-libs + other-libs)
然后使用maven-dependency-plugin
将可传递依赖项复制到相应的文件夹中。
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.parent.basedir}/build/other-lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
现在,每个模块构建将只包含您需要的jar,没有重复的INSIDE
。 (我认为我们可以忽略两个my-libs
BETWEEN
的重复,因为无论如何您都不会在同一平台上同时使用两者)