当前位置: 首页 > 面试题库 >

Maven项目取决于同一工件的两个版本

韩靖琪
2023-03-14
问题内容

我有一个项目,其中有两个使用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 文件夹?


问题答案:

我在这里使用 maven-dependency-plugin* 找到了答案 *

pom.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>

并在 assembly.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与任何其他依赖项一样包含在中。我希望这有帮助。:)



 类似资料:
  • 我正在使用maven 3.1.1,我有以下问题 我有一个主项目(pom.xml),它将被编译为WAR文件。它有两个模块。 模块1有以下内容(请注意工件的版本) 模块2有以下内容(请注意工件的版本) 因此,我的项目依赖于同一个库的两个版本。问题是库版本2与版本1不向后兼容。所以,我不能只包括版本2。 我正在考虑修改模块1以使用库版本2,但这需要大量时间。因此,我正在寻找一种方法来包含库的两个版本。

  • 有什么方法可以使用两个不同的配置文件在settings.xml文件执行两个不同的构建在不同的服务器上?例如:在我的settings.xml文件中,我有两个配置文件: 现在,我想要一个项目的“test1”配置文件和另一个项目的“test2”,我希望我的pom.xml构建属性从settings.xml配置文件的属性中获取。 如果我将两个概要文件都保存在“activeProfiles”中,那么我的两个项

  • 问题内容: 我有一个Java Web项目,我们部署在两个不同客户的服务器上,其中99%的代码是相同的,现在我有两个ApplicationBuilder,该类包含为每个客户定制的类。 每当我要部署新版本时,我都必须手动注释一行,使用maven进行构建,取消注释该行,注释另一行,然后再次构建。 我想避免所有这些,最好的事情可能只是造成两次不同的战争。 有什么好方法吗?我不使用(也不喜欢)依赖注入框架,

  • 我使用低于IDE使用的系统环境JAVA_HOME(1.8)启动NetBeans IDE12.0(14)。Maven执行的IDE输出窗口似乎显示项目是用JDK14的JAVA_HOME运行的,以这种方式运行项目文件。 但是exec-maven-plugin在 这似乎表明Maven在IDE中运行在1.8下,忽略了IDE自己的重写设置JAVA_HOME 14。它使用JAVA_HOME中设置的JDK,因为如

  • 我有一个具有以下结构的maven项目 即Project有它的pom.xml(作为pom的包)并有模块。每个模块都有一个节中,可以将其设置为“project”的工件(在根pom.xml中定义),也可以将其设置为任何其他project2/project3/projectn工件。 现在,由于这个原因,我看看如果Project1的根pom.xml设置为0.0.1-snapshot,并且如果我想创建一个版本

  • 问题内容: 我有一个Java项目正在使用两个导入的具有相同类()的jar 。导入类时,有没有一种方法可以明确说明要使用哪个jar?使用: 似乎按照构建路径顺序的顺序使用该类,但是由于某种原因,似乎并非如此 在运行时。我正在Eclipse中构建项目。 问题答案: 您不能仅在Java源代码中执行所要求的操作。Java不是为此而设计的。 这是一种糟糕的情况,只有使用自定义类加载器才能可靠地处理它们,每个