Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven安装同一依赖项的多个版本_Java_Maven - Fatal编程技术网

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

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都容易受到命令注入的攻击。有没有办法阻止这种事情发生 编辑:根据下面的建议,我尝试包含一个排除项,但我认为这只支持依赖项,而不支持插件

在运行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的日志,它实际上运行了其他插件,比如

  • maven surefire插件

  • 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>
    
    
    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的日志,它实际上运行了其他插件,比如

  • maven surefire插件

  • 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>
    
    
    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,这将很棘手,您需要仔细梳理它