Maven 项目依赖于同一工件的两个版本



我有一个项目,有两个单独的模块使用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中。我希望这有所帮助。:)

最新更新