Java Maven安装同一依赖项的多个版本
在运行mvn clean package时,Maven插件(Maven编译器插件:3.8.1和Maven surefire插件:3.0.0-M3)似乎正在下载同一依赖项的多个版本(plexus utils),即使我在依赖项中指定了plexus utils的最新版本。这不会导致任何错误,但3.0.16之前的任何版本的plexus UTIL都容易受到命令注入的攻击。有没有办法阻止这种事情发生 编辑:根据下面的建议,我尝试包含一个排除项,但我认为这只支持依赖项,而不支持插件Java Maven安装同一依赖项的多个版本,java,maven,Java,Maven,在运行mvn clean package时,Maven插件(Maven编译器插件:3.8.1和Maven surefire插件:3.0.0-M3)似乎正在下载同一依赖项的多个版本(plexus utils),即使我在依赖项中指定了plexus utils的最新版本。这不会导致任何错误,但3.0.16之前的任何版本的plexus UTIL都容易受到命令注入的攻击。有没有办法阻止这种事情发生 编辑:根据下面的建议,我尝试包含一个排除项,但我认为这只支持依赖项,而不支持插件
<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>
org.apache.maven.plugins
maven编译器插件
3.8.1
org.codehaus.plexus
尾丛
虽然不能排除插件的依赖项(与其他依赖项一样),但可以指定将用于特定插件的确切版本
如果您有父POM或任何其他链接的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>
org.apache.maven.plugins
maven编译器插件
3.8.1
org.codehaus.plexus
尾丛
3.0.16
虽然不能排除插件的依赖项(与其他依赖项一样),但可以指定将用于特定插件的确切版本
如果您有父POM或任何其他链接的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>
org.apache.maven.plugins
maven编译器插件
3.8.1
org.codehaus.plexus
尾丛
3.0.16
我刚刚在下面指定了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>
org.springframework.boot
springbootmaven插件
真的
通用编解码器
通用编解码器
1.14
但它仍然显示了“plexus utils”和“commons codec”的较旧库版本
然后看看jenkins的日志,它实际上运行了其他插件,比如
<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>
org.apache.maven.plugins
maven编译器插件
org.codehaus.plexus
尾丛
3.3.0
通用编解码器
通用编解码器
1.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>
org.springframework.boot
springbootmaven插件
真的
通用编解码器
通用编解码器
1.14
但它仍然显示了“plexus utils”和“commons codec”的较旧库版本
然后看看jenkins的日志,它实际上运行了其他插件,比如
<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>
org.apache.maven.plugins
maven编译器插件
org.codehaus.plexus
尾丛
3.3.0
通用编解码器
通用编解码器
1.14
你可以从maven中排除依赖项,看看这篇文章。你能使用version
标签指定你想要的确切版本吗?@JonathanDavidArndt我正在这样做,但是插件正在下载大约10个其他版本,对吧。。。这可能很棘手。特别是如果你有一个家长POM,或其他类似的东西…我会停止担心这个。。。即使Maven插件有漏洞,我也不会太在意,因为Maven只是一个构建工具。你能使用version
标签指定你想要的确切版本吗?@JonathanDavidArndt我正在这样做,但是插件正在下载大约10个其他版本,对吧。。。这可能很棘手。特别是如果你有一个家长POM,或其他类似的东西…我会停止担心这个。。。即使Maven插件有漏洞,我也不会太在意,因为Maven只是一个构建工具,它似乎仍然将旧版本下载到我的机器上,并忽略我给它的版本…更正:它忽略了它,因为我指定的版本已经下载。它将下载我指定的版本以及插件以前下载的版本。您可能需要运行mvn dependency:tree
(或类似)来查找这些依赖项的所有加载位置。如果您有一个父POM,这将很棘手,您需要仔细梳理它