我有一个项目,其中有两个使用sqlline的单独模块和另一个依赖jline的库(例如OtherLib)。但是在不同版本上。
外部图书馆
Module1使用Sqlline取决于 jline 2.10
Module2使用OtherLib取决于 jline 0.9.94
并且这两个版本不兼容。
因此,我已经设置了类路径,以便Module1首先在$ HOME/lib/module1文件夹中搜索,而Module2首先在$ HOME/lib文件夹中搜索。
有没有一种方法可以指定maven首先将 Artifact 下载到源目录(例如../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文件夹? 最佳答案
如果您完全确定自己在做什么,则可以使用 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
中。
由于您的新 Artifact 具有自己的groupId:artifactId
组合,因此不会与其他jline:jline:jar:0.9.94
Artifact 发生冲突,因此,您会很高兴在类路径中同时拥有这两者。