【问题标题】:Maven installing multiple versions of the same dependencyMaven安装相同依赖项的多个版本
【发布时间】:2020-01-03 17:23:51
【问题描述】:

Maven 插件(maven-compiler-plugin:3.8.1 和 maven-surefire-plugin:3.0.0-M3)在运行 mvn clean package 时似乎正在下载相同依赖项(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>

【问题讨论】:

  • 你可以从maven中排除依赖,看看这篇文章。 stackoverflow.com/questions/9119055/…
  • 您能否使用version 标签指定您想要的确切版本?
  • @JonathanDavidArndt 我正在这样做,但插件正在下载大约 10 个其他版本
  • 对...这可能很棘手。特别是如果你有一个父 POM 或其他类似的东西......
  • 我不会再担心这个了......即使 Maven 插件有漏洞,我也不会真正打扰,因为 Maven 只是一个构建工具。

标签: java maven


【解决方案1】:

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

如果您有父 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>

【讨论】:

  • 即使在插件中为依赖项指定了版本后,它似乎仍然将旧版本下载到我的机器上并忽略了我给它的版本...
  • 更正:它忽略了它,因为我指定的版本已经下载。它将下载我指定的版本以及插件之前下载的版本
  • 你可能需要运行mvn dependency:tree(或类似的)来查找这些依赖项的所有加载位置。如果你有一个父 POM,那会很棘手,你需要仔细梳理它。
  • 我跑了mvn dependency:resolve-plugins,可以看到这里的树。这是否适用于嵌套依赖项,因为 plexus-utils 似乎是插件依赖项中另一个依赖项的一部分?
  • 我之所以问这个问题是因为即使只为一个插件指定了版本,我也会在日志中得到[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) --- Downloading: https://repo.spring.io/libs-release/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.pom
【解决方案2】:

对我来说,我刚刚在下面指定了 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 日志,它实际上正在运行其他插件,例如

  1. maven-surefire-plugin

  2. maven 安装插件

  3. maven-compiler-plugin

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

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

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多