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中。 我希望这有帮助。 🙂