Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Maven 生成不会因较小的版本更改而中断_Maven - Fatal编程技术网

Maven 生成不会因较小的版本更改而中断

Maven 生成不会因较小的版本更改而中断,maven,Maven,我正在测试Maven插件: com.github.siom79.japicmp ,但它只声明:“如果设置为true,插件将分析新旧存档的版本,并根据这些版本决定是否允许进行二进制兼容或不兼容的更改。此选项要求版本为Major.Minor.Patch(例如1.2.3或1.2.3-SNAPSHOT)。” japicmp后来链接到,其中指出:“当您以向后兼容的方式添加功能时是次要版本”-因此,接口的新方法显然是API中断 如果我删除接口而不是添加方法,构建就会失败(正如它应该的那样) 我找到了这个用

我正在测试Maven插件:


com.github.siom79.japicmp
,但它只声明:“如果设置为true,插件将分析新旧存档的版本,并根据这些版本决定是否允许进行二进制兼容或不兼容的更改。此选项要求版本为Major.Minor.Patch(例如1.2.3或1.2.3-SNAPSHOT)。”

japicmp后来链接到,其中指出:“当您以向后兼容的方式添加功能时是次要版本”-因此,接口的新方法显然是API中断

如果我删除接口而不是添加方法,构建就会失败(正如它应该的那样)

我找到了这个用例的测试::所以问题似乎是设置,而不是工具本身


我做了什么?我忽略了什么

向接口添加方法实际上是二进制兼容的,因为使用库的应用程序不知道新方法,因此不会调用它。JVM不会在运行时检查类是否实现了接口中定义的所有方法,而这仅由编译器完成

向接口添加方法只是源不可映射。这意味着,如果针对更改的接口重新编译源代码,那么编译将失败,因为实现接口的类现在必须实现新方法

        <plugin>
            <groupId>com.github.siom79.japicmp</groupId>
            <artifactId>japicmp-maven-plugin</artifactId>
            <version>0.9.3</version>
            <configuration>
                <oldVersion>
                    <dependency>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${lastBaseVersion}</version>
                        <type>jar</type>
                    </dependency>
                </oldVersion>
                <newVersion>
                    <file>
                        <path>${project.build.directory}/${project.artifactId}-${project.version}.${project.packaging}</path>
                    </file>
                </newVersion>
                <parameter>
                    <onlyModified>true</onlyModified>
                    <breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
                </parameter>
                <skip></skip>
            </configuration>
            <executions>
                <execution>
                    <phase>verify</phase>
                    <goals>
                        <goal>cmp</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>