有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java意外的Maven依赖项中介行为

我遇到了一个非常奇怪的maven依赖中介行为。我正在使用

$ mvn -version
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T04:57:37-07:00)
Maven home: /usr/local/Cellar/maven/3.3.3/libexec
Java version: 1.8.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre 

mypom的依赖项部分如下所示:

<dependencies>
    <dependency>
        <groupId>com.company.app</groupId>
        <artifactId>foo</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.company.app</groupId>
        <artifactId>bar</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

当我运行mvn clean compile时,它会失败,并出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project my-module: Compilation failure: Compilation failure:
[ERROR] /Users/morpheus/my-project/my-module/src/main/java/com/company/app/Main.java:[23,32] cannot find symbol
[ERROR] symbol:   method builder(java.lang.String)
[ERROR] location: class org.apache.commons.cli.Option

发生此错误的原因是maven使用的是commons-cli的旧版本(我已经明确要求它使用的旧版本是1.3.1)。我将依赖项的顺序更改为:

<dependencies>
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.company.app</groupId>
        <artifactId>foo</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.company.app</groupId>
        <artifactId>bar</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
</dependencies>

现在错误消失了!这公然违反了maven的声明。这不是maven中的bug吗


共 (0) 个答案