Maven项目取决于同一工件的两个版本
我有一个项目有两个单独的模块,使用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
打包时间内将其复制到包中?
我知道,对于从源目录复制,可以使用以下代码。
../resources/lib ${HOME}/lib/module1 755 644 *.jar
也是为了让maven下载我可以使用的依赖项(对于Module2)
false ${HOME}/lib 755 644 jline:jline:jar:0.9.94
如何确保jline:jline:jar:2.10
首先下载到../resources/lib文件夹?
如果你完全确定,你正在做什么,你可以使用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
没有冲突jline:jline:jar:0.9.94
工件,所以你很乐意在类路径中同时使用它们。
我在这里找到了一个使用maven-dependency-plugin的答案
在pom.xml中
org.apache.maven.plugins maven-dependency-plugin 2.1 copy-model package copy jline jline 2.10 jar ../../resources/lib
并在assembly.xml中
../../resources/lib ${HOME}/lib/module1 755 644 jline-*
jline-0.9.94
作为任何其他依赖项包含在dependencySet中。 我希望这有帮助。 🙂