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_Maven Plugin_Dependency Management_Maven Dependency - Fatal编程技术网

Java 如何检查maven依赖项兼容性

Java 如何检查maven依赖项兼容性,java,maven,maven-plugin,dependency-management,maven-dependency,Java,Maven,Maven Plugin,Dependency Management,Maven Dependency,我试图弄清楚是否有可能检查maven依赖项在项目的配置中是否仍然兼容 以下是我的测试设置: 有3个项目Child-A,Child-B,Child-C Child-A有两个版本,它们彼此不兼容。 版本0.0.1-SNAPSHOT有一个方法 public void myMethod(String oneParameter) 版本0.0.2-SNAPSHOT将此方法更改为 public void myMethod(String oneParameter, String secondParameter

我试图弄清楚是否有可能检查maven依赖项在项目的配置中是否仍然兼容

以下是我的测试设置:

有3个项目
Child-A
Child-B
Child-C

Child-A
有两个版本,它们彼此不兼容。 版本
0.0.1-SNAPSHOT
有一个方法

public void myMethod(String oneParameter)
版本
0.0.2-SNAPSHOT
将此方法更改为

public void myMethod(String oneParameter, String secondParameter)
Child-B
依赖于版本
0.0.1-SNAPSHOT
中的
Child-a
,并使用一个参数调用该方法

public class ChildB {
    public void callChild(String myParam) {
        final ChildA test = new ChildA();
        String methodParam = String.format("%s is calling %s with Parameter %s ", this.getClass().getName(),
                test.getClass().getName(), myParam);
        test.myMethod(methodParam);
    }
}
Child-C
现在依赖于Child-B和Child-a版本
0.0.2-SNAPSHOT

Child-C
以这种方式调用
Child-B

public static void main(String[] args) {
    ChildB inner = new ChildB();
    inner.callChild(" Parameter from main method! ");
}
对于编译器来说,这很好,但是在运行时
Child-B
会遇到问题,因为
Child-A
0.0.2-SNAPSHOT
版本中存在,因此仅具有一个参数的方法不再存在

我正试图以这样的方式配置我的maven设置,即当构建
Child-C
时,它将检查其依赖项的签名/兼容性,以及它的有效pom设置

我认为maven animal sniffer插件可能是一个解决方案,但没有找到检查内部依赖关系的部分


有人知道如何检查这些行为吗?

问题不在于Maven。即使两个版本在运行时都存在,JVM也只会加载一个版本,因此由于缺少一个或另一个方法,您将获得运行时异常


最好的解决方案是将单参数方法添加到版本0.0.2中,并在所有POM中指定该版本。如果这不起作用,您将需要修改代码,以便只调用双参数方法。

您可以使用maven enforcer来实现依赖项收敛

通过这种方式,您可以确保没有同一个库的多个版本作为依赖项,并消除类加载问题的可能性


如果您提到的方法的签名发生了更改,您应该能够在编译时看到错误。

没有人知道如何继续进行此挑战。谢谢您的回答。我的项目中有多个依赖项,其中一些依赖项与工件有依赖项,但版本不同。因此,我想检查兼容性,看看我的依赖项是否会遇到问题。。。(在运行时!)。
<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.0.1</version>
        <executions>
            <execution>
                <id>enforce</id>
                <configuration>
                    <rules>
                        <DependencyConvergence/>
                    </rules>
                </configuration>
                <goals>
                    <goal>enforce</goal>
                </goals>
                <phase>validate</phase>
            </execution>
        </executions>
    </plugin>
</plugins>
  Dependency convergence error for org.codehaus.jackson:jackson-jaxrs:1.7.1 paths to dependency are:
+-com.nodeable:server:1.0-SNAPSHOT
  +-org.mule.modules:mule-module-jersey:3.2.1
    +-com.sun.jersey:jersey-json:1.6
      +-org.codehaus.jackson:jackson-jaxrs:1.7.1
and
+-com.nodeable:server:1.0-SNAPSHOT
  +-org.mule.modules:mule-module-jersey:3.2.1
    +-org.codehaus.jackson:jackson-jaxrs:1.8.0