While Revapi is designed to be extensible and in theory should support API checks in other languages than Java (not just programming languages but anything that can be decomposed to a tree structure) the only extension in existence today is the Java API checker.
The main distinguishing features of the Java API checker include:
large number of API checks
categorized by their influence on source, binary and "semantic" compatibility
support for computing the API "surface" by tracking usages of types across the checked library and also its dependencies (ability to report type "leakage" from deps)
powerful filtering of elements to check and reclassification of found problems
ability to filter by annotation presence
Maven plugin automatically includes dependencies in the check
ability to judge the severity of changes based on semver rules (see here)
automatic updates of pom.xml or release.properties versions according to semver rules (see here)
pluggable reporting (standard output, maven site generation, FreeMarker templates, JSON, …)
This is a maven project, so to build you simply:
Revapi can be invoked in a couple of ways. It can be used as a standalone program, as a maven plugin or it can also be embedded in your application and used as a library.
Download the standalone distribution zip and
unzip revapi-XXX-standalone.zip cd revapi-XXX-standalone ./revapi.sh
Read the usage info and go.
<build> <plugins> <plugin> <groupId>org.revapi</groupId> <artifactId>revapi-maven-plugin</artifactId> <version>...</version> <dependencies> <dependency> <groupId>org.revapi</groupId> <artifactId>revapi-java</artifactId> <version>...</version> </dependency> <dependency> <groupId>com.acme</groupId> <artifactId>my-extension</artifactId> <version>...</version> </dependency> ... </dependencies> <configuration> ... </configuration> <executions> <execution> <id>api-check</id> <goals><goal>check</goal></goals> ... </execution> ... </executions> </plugin> ... </plugins> ... </build>
There is an external Gradle plugin available for Revapi, https://github.com/palantir/gradle-revapi.
Revapi revapi = Revapi.builder().withAllExtensionsFromThreadContextClassLoader().build(); AnalysisContext analysisContext = AnalysisContext.builder() .withOldAPI(API.of(...)) .withNewAPI(API.of(...)) .withConfigurationFromJSON("json").build(); revapi.analyze(analysisContext);
See the site for more info.
Getting in touch
- Mailing list