我有一个项目有两个单独的模块,它们使用sqlline和另一个依赖于jline的库(比如OtherLib)。但是在不同的版本上。
Module1使用Sqlline依赖于 jline 2.10
Module2使用OtherLib取决于 jline 0.9.94
这两个版本不兼容。 因此,我设置了类路径,以便Module1首先在 $ HOME / lib / module1 文件夹中搜索,然后在 $ HOME / lib 文件夹中搜索Module2。
有没有办法指定maven首先将工件下载到源目录(例如 ../ resources / lib ),然后在assembly.xml
的打包时间内将其复制到包中?
我知道从源目录复制时可以使用以下代码。
<fileSets>
<fileSet>
<directory>../resources/lib</directory>
<outputDirectory>${HOME}/lib/module1</outputDirectory>
<directoryMode>755</directoryMode>
<fileMode>644</fileMode>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
还要让maven下载我可以使用的依赖项(对于Module2)
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>${HOME}/lib</outputDirectory>
<directoryMode>755</directoryMode>
<fileMode>644</fileMode>
<includes>
<include>jline:jline:jar:0.9.94</include>
</includes>
</dependencySet>
<dependencySets>
如何确保首先将jline:jline:jar:2.10
下载到 ../ resources / lib 文件夹?
答案 0 :(得分:8)
如果您非常确定自己正在做什么,可以使用maven-shade-plugin
之类的内容重新打包其中一个版本。但请绝对肯定,你正在做什么。
使用maven-shade-plugin
,您可以创建一个新的Maven模块,例如jline:jline_2_10:jar:1.0
并使用jline:jline:jar:2.10
作为依赖项。然后,maven-shade-plugin
会将其打包到您的jline_2_10-1.0.jar
。
由于您的新工件有自己的groupId:artifactId
组合,因此不会与其他jline:jline:jar:0.9.94
工件发生冲突,因此您很乐意在类路径中同时拥有这两者。
答案 1 :(得分:3)
我使用 maven-dependency-plugin 找到答案here
在 pom.xml
中<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>copy-model</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>jline</groupId>
<artifactId>jline</artifactId>
<version>2.10</version>
<type>jar</type>
</artifactItem>
<artifactItems>
<outputDirectory>../../resources/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugins>
<build>
在 assembly.xml
中 <fileSet>
<directory>../../resources/lib</directory>
<outputDirectory>${HOME}/lib/module1</outputDirectory>
<directoryMode>755</directoryMode>
<fileMode>644</fileMode>
<includes>
<include>jline-*</include>
</includes>
</fileSet>
jline-0.9.94
与任何其他依赖项一样包含在dependencySet
中。
我希望这有帮助。 :)