Revapi is an API analysis and change tracking tool written in Java. Its focus is mainly on Java language itself but it has been specifically designed to not be limited to just Java. API is much more than just java classes - also various configuration files, schemas, etc. can contribute to it and users can become reliant on them.
Java Other
Switch branches/tags
v0.2.2 v0.2.1 v0.2.0 v0.1.1 v0.1.0 revapi-standalone-0.8.1 revapi-standalone-0.8.0 revapi-standalone-0.7.0 revapi-standalone-0.6.3 revapi-standalone-0.6.2 revapi-standalone-0.6.1 revapi-standalone-0.6.0 revapi-standalone-0.5.1 revapi-standalone-0.5.0 revapi-standalone-0.4.2 revapi-standalone-0.4.1 revapi-standalone-0.4.0 revapi-standalone-0.3.6 revapi-standalone-0.3.5 revapi-standalone-0.3.4 revapi-standalone-0.3.3 revapi-standalone-0.3.2 revapi-standalone-0.3.1 revapi-standalone-0.3.0 revapi-site-shared-3 revapi-site-shared-2 revapi-site-shared-1 revapi-site-base-1 revapi-reporting-text-0.4.1 revapi-reporting-text-0.4.0 revapi-reporting-text-0.3.4 revapi-reporting-text-0.3.3 revapi-reporting-text-0.3.2 revapi-reporting-text-0.3.1 revapi-reporting-text-0.3.0 revapi-reporter-text-0.9.2 revapi-reporter-text-0.9.1 revapi-reporter-text-0.9.0 revapi-reporter-text-0.8.1 revapi-reporter-text-0.8.0 revapi-reporter-text-0.7.0 revapi-reporter-text-0.6.1 revapi-reporter-text-0.6.0 revapi-reporter-text-0.5.0 revapi-parent-10 revapi-parent-9 revapi-parent-8 revapi-parent-7 revapi-parent-6 revapi-parent-5 revapi-parent-4 revapi-parent-3 revapi-parent-2 revapi-parent-1 revapi-maven-utils-0.9.0 revapi-maven-utils-0.8.3 revapi-maven-utils-0.8.1 revapi-maven-utils-0.8.0 revapi-maven-utils-0.7.0 revapi-maven-utils-0.6.0 revapi-maven-utils-0.5.0 revapi-maven-utils-0.4.0 revapi-maven-utils-0.3.2 revapi-maven-utils-0.3.1 revapi-maven-utils-0.3.0 revapi-maven-plugin-0.10.4 revapi-maven-plugin-0.10.3 revapi-maven-plugin-0.10.2 revapi-maven-plugin-0.10.1 revapi-maven-plugin-0.10.0 revapi-maven-plugin-0.9.5 revapi-maven-plugin-0.9.3 revapi-maven-plugin-0.9.2 revapi-maven-plugin-0.9.1 revapi-maven-plugin-0.9.0 revapi-maven-plugin-0.8.2 revapi-maven-plugin-0.8.1 revapi-maven-plugin-0.8.0 revapi-maven-plugin-0.7.0 revapi-maven-plugin-0.6.0 revapi-maven-plugin-0.5.1 revapi-maven-plugin-0.5.0 revapi-maven-plugin-0.4.5 revapi-maven-plugin-0.4.4 revapi-maven-plugin-0.4.3 revapi-maven-plugin-0.4.2 revapi-maven-plugin-0.4.1 revapi-maven-plugin-0.4.0 revapi-maven-plugin-0.3.11 revapi-maven-plugin-0.3.10 revapi-maven-plugin-0.3.9 revapi-maven-plugin-0.3.8 revapi-maven-plugin-0.3.7 revapi-maven-plugin-0.3.6 revapi-maven-plugin-0.3.5 revapi-maven-plugin-0.3.4 revapi-maven-plugin-0.3.3 revapi-maven-plugin-0.3.2 revapi-maven-plugin-0.3.1 revapi-maven-plugin-0.3.0
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
etc Save the codestyle in the repository. Nov 8, 2017
revapi-ant-task [maven-release-plugin] prepare for next development iteration Jun 24, 2018
revapi-basic-features [maven-release-plugin] prepare for next development iteration Jun 24, 2018
revapi-build-support [maven-release-plugin] prepare for next development iteration Jan 18, 2018
revapi-build Clean up the deps. Maven plugin should now compile fine on Maven 3.3.9 Aug 7, 2018
revapi-java-spi Make checkstyle happy again. Aug 7, 2018
revapi-java [maven-release-plugin] prepare for next development iteration Jun 24, 2018
revapi-maven-plugin Clean up the deps. Maven plugin should now compile fine on Maven 3.3.9 Aug 7, 2018
revapi-maven-utils [maven-release-plugin] prepare for next development iteration May 16, 2018
revapi-parent Clean up the deps. Maven plugin should now compile fine on Maven 3.3.9 Aug 7, 2018
revapi-reporter-text [maven-release-plugin] prepare for next development iteration Jun 24, 2018
revapi-site-shared Use latest parent snapshot in revapi-site-shared to avoid build Jan 19, 2018
revapi-site License stuff Jun 27, 2018
revapi-standalone [maven-release-plugin] prepare for next development iteration Jun 24, 2018
revapi [maven-release-plugin] prepare for next development iteration Jun 24, 2018
.gitignore Ignore .vscode files. Sep 18, 2017
.travis.yml Update travis to run the build on both java8 and java9. Apr 28, 2018
LICENSE Initial import. Generics are not supported, no API checks in place. Nov 11, 2014
README.adoc Add twitter link to the readme and site. Nov 2, 2017
pom.xml Clean up the deps. Maven plugin should now compile fine on Maven 3.3.9 Aug 7, 2018

README.adoc

Revapi

Build Status Code Coverage Gitter Chat

Revapi is a tool for API analysis and change tracking.

INFO: Revapi requires Java8 update 40 (1.8.0_40) or later to run. Older versions may produce wrong results.

Summary

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 "semantical" 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)

  • support for Java8 constructs (default methods in particular)

  • powerful filtering stuff to check and reclassification of found problems

  • ability to filter by annotation presence

  • Maven plugin automatically includes depenendcies in the check

Other features:

  • 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, JUnit report generator (TBD))

Building

This is a maven project, so to build you simply:

mvn install

Usage

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.

Standalone

Download the standalone distribution zip and

unzip revapi-XXX-standalone.zip
cd revapi-XXX-standalone
./revapi.sh

Read the usage info and go.

Maven

<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>

Embedding

Revapi revapi = Revapi.builder().withAllExtensionsFromThreadContextClassLoader().build();

AnalysisContext analysisContext = AnalysisContext.builder()
    .withOldAPI(API.of(...))
    .withNewAPI(API.of(...))
    .withConfigurationFromJSON("json").build();

revapi.analyze(analysisContext);

Extending Revapi

See the site for more info.