【发布时间】:2015-01-24 16:37:54
【问题描述】:
我有一个项目,其中包含两个使用 sqlline 的单独模块和另一个依赖于 jline 的库(比如 OtherLib)。但是在不同的版本上。
外部库
Module1 使用 Sqlline 依赖于 jline 2.10
Module2 使用 OtherLib 依赖于 jline 0.9.94
而且这两个版本不兼容。 因此,我设置了类路径,以便 Module1 首先在 $HOME/lib/module1 文件夹中搜索,Module2 首先在 $HOME/lib 文件夹中搜索。
有没有办法指定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文件夹?
【问题讨论】:
-
两个不同的主要版本是否使用相同的完全限定类名?如果是这样,那么即使使用巧妙的类加载,您也会遇到麻烦。
-
@chrylis 幸运的是,两个版本之间发生了巨大的变化。所以到目前为止没有发现任何冲突。实际上,当我将 jar 手动添加到
../resources/lib时,这工作正常,但手动执行此操作对于该项目是不可接受的。 -
如果我理解得很好,你的问题是在运行时,而不是编译时,对吧?你有一个多模块项目,两个模块之间没有依赖关系?模块是 jar-with-dependencies 项目吗?