我有一个项目,其中有两个使用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 发生冲突,因此,您会很高兴在类路径中同时拥有这两者。

10-01 00:55