#japicmp#
japicmp is a tool/maven plugin that compares two versions of a jar archive for binary compatibility.
The website is located at https://siom79.github.io/japicmp.
##Features##
- Comparison of two jar archives without the need to add all of their dependencies to the classpath.
- Differences are printed on the command line in a simple diff format.
- Differences can optionally be printed as XML or HTML file.
- Per default private and package protected classes and class members are not compared. If necessary, the access modifier of the classes and class members to be compared can be set to public, protected, package or private.
- Per default all classes are tracked. If necessary, certain packages, classes, methods or fields can be excluded or explicitly included.
- All changes between all classes/methods/fields are compared. If necessary, output can be limited to changes that are binary incompatible (as described in the Java Language Specification).
- All changes between annotations are compared, hence japicmp can be used to track annotation-based APIs like JAXB, JPA, JAX-RS, etc.
- A maven plugin is available that allows you to compare the current artifact version with some older version from the repository.
- The option
--semantic-versioning
tells you which part of the version you have to increment in order to follow semantic versioning. - If a class is serializable, changes are evaluated regarding the Java Object Serialization Specification.
- Per default synthetic classes and class members (e.g. bridge methods) are hidden. They can be listed by using the option
--include-synthetic
.
##Downloads##
You can download the latest version from the release page or directly from the maven central repository.
#Development#
##Reports##
Use the maven site plugin (mvn site
) to generate the following reports:
- findbugs
- checkstyle
- japicmp
- cobertura test coverage
##Release##
This is the release procedure:
- Increment version in README.md
- Run release build (substitute passphrase with your GPG password):
mvn release:clean release:prepare -DautoVersionSubmodules=true -Dgpg.passphrase=passphrase
mvn release:perform -Dgpg.passphrase=passphrase
- Login to Sonatype's Nexus repository
- Download released artifact from staging repository.
- Close and release staging repository if sanity checks are successful.
##Contributions##
Pull requests are welcome, but please follow these rules:
- The basic editor settings (indentation, newline, etc.) are described in the
.editorconfig
file (see EditorConfig). - Provide a unit test for every change.
- Name classes/methods/fields expressively.
- Fork the repo and create a pull request (see GitHub Flow).
##Website##
The website is generated by using the maven-site-plugin:
mvn site:site
mvn site:stage
cp -r target/staging $SIOM79_GITHUB_IO_REPO