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