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

Maven程序集:添加相同工件的不同版本

贲高寒
2023-03-14
问题内容

我使用maven程序集插件创建应用程序存档。包含在我pom中的所有依赖关系没有任何问题。

现在,我需要包括同一工件的两个或多个版本。

如果放在我的pom中

<dependencies>
        [...]
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.1.0</version>
        </dependency>
</dependencies>

从源头上,Dependenvcy解析器删除了旧版本,并且存档中仅打包了1.1.0。

我尝试通过使用程序集xml描述符文件包括jar。而且我没有找到任何解决方案。

一种可能的解决方案是将所有需要的model.jar手动放入一个文件夹中,并告诉程序集将其复制到存档中。但是我正在寻找一种更可配置的解决方案。

任何想法 ?


问题答案:

我通过使用maven-dependency-plugin复制解决的pom依赖关系和其他jar找到了解决方案。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
    <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
            <overWriteReleases>false</overWriteReleases>
            <overWriteSnapshots>false</overWriteSnapshots>
            <overWriteIfNewer>true</overWriteIfNewer>
            <includeScope>runtime</includeScope>
        </configuration>
    </execution>
    <execution>
        <id>copy-model</id>
        <phase>package</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>my.test.pkg</groupId>
                    <artifactId>my-model</artifactId>
                    <classifier>server</classifier>
                    <version>1.0.3</version>
                    <type>jar</type>
                </artifactItem>
                <artifactItem>
                    <groupId>my.test.pkg</groupId>
                    <artifactId>my-model</artifactId>
                    <classifier>server</classifier>
                    <version>1.1.0</version>
                    <type>jar</type>
                </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
        </configuration>
    </execution>
</executions>

现在,我只需要在我的程序集xml中添加以下行

    <fileSet>
        <directory>${project.build.directory}/lib</directory>
        <outputDirectory>/lib</outputDirectory>
        <filtered>false</filtered>
        <includes>
            <include>*.jar</include>
        </includes>
        <fileMode>0600</fileMode>
    </fileSet>


 类似资料:
  • 我遇到了以下两个依赖项的问题: org.apache.felix"org.apache.felix.utils" 和 通用域名格式。github。rotty3000»phidias»0.3.2 它们都对组织有可传递的依赖关系。奥斯基。核心,felix依赖于版本4.1.0,phidias依赖于版本5.0.0 我们需要5.0.0版本才能正确编译代码 如果我把我的依赖项作为: Maven自动获取版本4.

  • 为什么在添加相同的数字时输出不同? 输出为: 如果我交换值 我得到的输出为:<代码>15.7000000000001 如何获得相同的输出?

  • 我有一个工件,应该为几个目标平台构建: Linux x86 不幸的是,由于缺乏交叉编译器,不可能一次性创建工件的所有版本。 换句话说,目标是在存储库中有这样的内容 artifact-1.0.0-linux.zip artifact-1.0.0-windows.zip artifact-1.0.0-arm11.zip artifact-1.0.1-linux.zip artifact-1.0.1-w

  • 问题内容: 我有一个使用测试范围的库L v1.0.0的项目A。项目A还依赖于项目B(具有范围编译),而B则可传递地依赖于库L v1.0.0(具有范围编译)。 为什么项目A的库L的最终范围是“测试”?它在运行时导致我NotClassDefFoundError。似乎库L上项目A的依赖项定义覆盖了L上的传递性依赖项。 怎么了 我的项目A仅将L用于单元测试,因此我定义了“测试”范围的依赖项。但是,最后,我

  • 问题内容: 我有一个项目,其中有两个使用sqlline的单独模块和另一个依赖jline的库(例如OtherLib)。但是在不同版本上。 Module1使用Sqlline取决于 jline 2.10 Module2使用OtherLib取决于 jline 0.9.94 并且这两个版本不兼容。因此,我设置了类路径,以便Module1首先在 $ HOME / lib / module1 文件夹中搜索,而M

  • 问题内容: 我刚刚遇到了一个案例,即我的Maven项目有两个直接依赖项,其中有两个不同版本的特定传递性依赖项。 在我的特殊情况下,我直接依赖以下内容: 和 这两个依赖项都对com.sun.jersey:jersey- core具有(较深)的传递性依赖关系,但是每个都有不同的版本。Maven并没有失败,甚至没有警告(或者,如果没有,我从来没有看到过!)正在发生这样的事情……因此,直到调试了球衣版本时