当前位置: 首页 > 知识库问答 >
问题:

Maven安装同一依赖项的多个版本

宦兴朝
2023-03-14

Maven插件(maven-compiler-plugin: 3.8.1和maven-surefire-plugin: 3.0.0-M3)在运行mvn清洁包时似乎正在下载同一依赖项(plexus-utils)的多个版本,即使我在依赖项中指定了plexus-utils的最新版本。这不会导致任何错误,但3.0.16之前的任何版本的plexus-utils都容易受到命令注入的影响。有没有办法阻止这种情况发生?

编辑:根据下面的建议,我尝试包含排除,但我认为这仅适用于依赖项而不是插件。

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.codehaus.plexus</groupId>
                        <artifactId>plexus-utils</artifactId>
                    </exclusion>
                </exclusions>
            </plugin>

共有2个答案

黎玺
2023-03-14

对我来说,我刚刚在下面指定了maven构建插件,

spring-boot-maven-plugin

我强迫我的版本

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>commons-codec</groupId>
                        <artifactId>commons-codec</artifactId>
                        <version>1.14</version>
                    </dependency>
                </dependencies>
            </plugin>

但它仍然显示了“plexus utils”和“commons codec”的较旧库版本。

然后查看jenkins日志,它实际上运行了其他插件,如

>

maven安装插件

maven编译器插件

所以我需要添加这些插件,并在每个插件中强制我的依赖关系。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.plexus</groupId>
                        <artifactId>plexus-utils</artifactId>
                        <version>3.3.0</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-codec</groupId>
                        <artifactId>commons-codec</artifactId>
                        <version>1.14</version>
                    </dependency>
                </dependencies>
            </plugin>
申屠昌胤
2023-03-14

虽然您不能排除插件的依赖项(就像您可以排除其他依赖项一样),但您可以指定将用于特定插件的确切版本。

如果您有父POM或任何其他链接的POM,您可能需要将其添加到使用它的每个插件或依赖项:

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

  • 比如 我修改了先安装的E:\Electron模板\node_modules\electron\install.js 然后在另一个项目安装electron@25.2.0 查看E:\Project\Electron\xxx\node_modules\electron\install.js 发现内容还是原始内容 修改的原因是网络环境问题 请问如何只保留一份呢? 我还安装了全局的electron@25.2

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

  • 短版: 如何配置AEM/CQ5内容包的maven POM以便包嵌入相同OSGI包的不同版本? 我正在为AEM(CQ5)构建一个内容包。该内容包嵌入了项目所需的直接和间接osgi依赖项。 我有一个bundle(我们称之为BundleX)的问题,因为在特定版本的Google Guava上有一个未解决的包导入,所以在内容包部署后仍然未激活。Guava是我嵌入到项目中的osgi依赖项的一部分。问题是不同的

  • 我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相

  • 我正在将一个组件打包到jar文件中,并试图将其安装到另一个系统中进行开发。我正在使用maven安装该文件,如下所示(摘自https://maven.apache.org/plugins/maven-install-plugin/examples/custom-pom-installation.html): Maven报告jar已成功安装: 我看到jar和pom文件都放在/home/user/中。m