我有一个项目,有两个单独的模块使用sqlline和另一个依赖于jline的库(比如OtherLib)。但是在不同的版本上。
外部库
模块 1 使用 Sqlline 依赖于 jline 2.10
模块 2 使用 OtherLib 依赖于 jline 0.9.94
而且这两个版本是不兼容的。因此,我设置了类路径,以便模块 1 将首先在 $HOME/lib/module1 文件夹中搜索,模块 2 首先在 $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 下载我可以使用的依赖项(用于模块 2)
<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
中。
由于您的新工件有自己的groupId:artifactId
组合,因此不会与其他jline:jline:jar:0.9.94
工件发生冲突,因此您会很高兴在类路径中同时拥有两者。
我在这里找到了使用 maven-dependency-plugin 的答案
在绒球中.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>copy-model</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>jline</groupId>
<artifactId>jline</artifactId>
<version>2.10</version>
<type>jar</type>
</artifactItem>
<artifactItems>
<outputDirectory>../../resources/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugins>
<build>
在组装中.xml
<fileSet>
<directory>../../resources/lib</directory>
<outputDirectory>${HOME}/lib/module1</outputDirectory>
<directoryMode>755</directoryMode>
<fileMode>644</fileMode>
<includes>
<include>jline-*</include>
</includes>
</fileSet>
jline-0.9.94
与任何其他依赖项一样包含在dependencySet
中。我希望这有所帮助。:)