Class ReportMojo

java.lang.Object
org.apache.maven.plugin.AbstractMojo
org.apache.maven.reporting.AbstractMavenReport
org.revapi.maven.ReportMojo
All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo, org.apache.maven.reporting.MavenMultiPageReport, org.apache.maven.reporting.MavenReport
Direct Known Subclasses:
ReportAggregateMojo, ReportForkMojo

@Mojo(name="report", defaultPhase=SITE, requiresDependencyCollection=COMPILE_PLUS_RUNTIME) public class ReportMojo extends org.apache.maven.reporting.AbstractMavenReport
Since:
0.1
Author:
Lukas Krejci
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected boolean
    If true (the default) revapi will always download the information about the latest version from the remote repositories (instead of using locally cached info).
    protected org.codehaus.plexus.configuration.PlexusConfiguration
    The JSON or XML configuration of various analysis options.
    protected Object[]
    The list of files containing the configuration of various analysis options.
    protected boolean
    Whether to include the dependencies in the API checks.
    protected String
    A comma-separated list of extensions (fully-qualified class names thereof) that are not taken into account during API analysis.
    protected boolean
    If set to true, the Maven properties will be expanded in the configuration before it is supplied to Revapi.
    protected boolean
    Set to false if you want to tolerate files referenced in the analysisConfigurationFiles missing on the filesystem and therefore not contributing to the analysis configuration.
    protected boolean
    If true, the build will fail if one of the old or new artifacts fails to be resolved.
    protected boolean
    If true, the build will fail if some of the dependencies of the old or new artifacts fail to be resolved.
    protected boolean
    Set this to false if you want to use the goal to generate other kind of output than the default report for the Maven-generated site.
    protected String[]
    The coordinates of the new artifacts.
    protected PromotedDependency[]
    A list of dependencies of the new artifact(s) that should be considered part of the new API.
    protected String
    The new version of the artifact.
    protected String[]
    The coordinates of the old artifacts.
    protected PromotedDependency[]
    A list of dependencies of the old artifact(s) that should be considered part of the old API.
    protected String
    If you don't want to compare a different artifact than the one being built, specifying the just the old version is simpler way of specifying the old artifact.
    protected String
     
    protected org.codehaus.plexus.configuration.PlexusConfiguration
    The JSON or XML configuration of the extensions pipeline.
    protected PromotedDependency[]
    A list of dependencies of both the old and new artifact(s) that should be considered part of the old/new API.
    protected String
    The minimum criticality of the differences that should be included in the report.
    protected FailSeverity
    Deprecated.
    use reportCriticality instead
    protected org.eclipse.aether.RepositorySystem
     
    protected org.eclipse.aether.RepositorySystemSession
     
    protected boolean
    When establishing the API classes, Revapi by default also looks through the provided dependencies.
    protected boolean
    In addition to resolveProvidedDependencies this property further controls how provided dependencies are resolved.
    protected boolean
    Whether to skip the mojo execution.
    protected String
    If set, this property demands a format of the version string when the oldVersion or newVersion parameters are set to RELEASE or LATEST special version strings.

    Fields inherited from class org.apache.maven.reporting.AbstractMavenReport

    locale, mojoExecution, outputFormat, outputTimestamp, project, reactorProjects, remoteProjectRepositories, repoSession, siteDirectory, siteRenderer, siteTool

    Fields inherited from interface org.apache.maven.reporting.MavenReport

    CATEGORY_PROJECT_INFORMATION, CATEGORY_PROJECT_REPORTS, ROLE

    Fields inherited from interface org.apache.maven.plugin.Mojo

    ROLE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
     
    protected void
    endReport(org.apache.maven.doxia.sink.Sink sink)
     
    protected void
     
    protected ResourceBundle
    getBundle(Locale locale)
     
     
    getName(Locale locale)
     
    protected String
     
     
    protected org.apache.maven.project.MavenProject
     
    protected String
    niceList(Iterable<? extends org.revapi.Archive> archives)
     
    protected Analyzer
     
    protected void
    reportBody(ReportTimeReporter reporterWithResults, org.revapi.API oldAPI, org.revapi.API newAPI, org.apache.maven.doxia.sink.Sink sink, ResourceBundle messages)
     
    protected void
    startReport(org.apache.maven.doxia.sink.Sink sink, ResourceBundle messages)
     

    Methods inherited from class org.apache.maven.reporting.AbstractMavenReport

    closeReport, execute, generate, generate, getCategoryName, getInputEncoding, getLocale, getOutputEncoding, getReportOutputDirectory, getSink, getSinkFactory, getSiteRenderer, isExternalReport, setReportOutputDirectory

    Methods inherited from class org.apache.maven.plugin.AbstractMojo

    getLog, getPluginContext, setLog, setPluginContext

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.apache.maven.reporting.MavenReport

    getOutputPath
  • Field Details

    • pipelineConfiguration

      @Parameter(property="", defaultValue="") protected org.codehaus.plexus.configuration.PlexusConfiguration pipelineConfiguration
      The JSON or XML configuration of the extensions pipeline. This enables the users easily specify which extensions should be included/excluded in the Revapi analysis pipeline and also to define transformation blocks - a way of grouping transforms together to enable more fine grained control over how differences are transformed.
      Since:
      0.11.0
    • analysisConfiguration

      @Parameter(property="", defaultValue="") protected org.codehaus.plexus.configuration.PlexusConfiguration analysisConfiguration
      The JSON or XML configuration of various analysis options. The available options depend on what analyzers are present on the plugin classpath through the <dependencies>. Consult configuration documentation for more details.

      These settings take precedence over the configuration loaded from analysisConfigurationFiles.

    • analysisConfigurationFiles

      @Parameter(property="revapi.analysisConfigurationFiles", defaultValue="") protected Object[] analysisConfigurationFiles
      The list of files containing the configuration of various analysis options. The available options depend on what analyzers are present on the plugins classpath through the <dependencies>.

      The analysisConfiguration can override the settings present in the files.

      The list is either a list of strings or has the following form:

       
          <analysisConfigurationFiles>
              <configurationFile>
                  <path>path/to/the/file/relative/to/project/base/dir</path>
                  <resource>path/to/the/file/in/one/of/the/dependencies</resource>
                  <roots>
                      <root>configuration/root1</root>
                      <root>configuration/root2</root>
                      ...
                  </roots>
              </configurationFile>
              ...
          </analysisConfigurationFiles>
       
       
      where
      • path is the path on the filesystem,
      • resource is the path to the resource file in one of the artifacts the plugin depends on
      • roots is optional and specifies the subtrees of the JSON/XML config that should be used for configuration. If not specified, the whole file is taken into account.
      Either path or resource has to be specified but not both. The configuration/root1 and configuration/root2 are paths to the roots of the configuration inside that JSON/XML config file. This might be used in cases where multiple configurations are stored within a single file and you want to use a particular one.

      An example of this might be a config file which contains API changes to be ignored in all past versions of a library. The classes to be ignored are specified in a configuration that is specific for each version:

       
           {
               "0.1.0" : [
                   {
                       "extension": "revapi.ignore",
                       "configuration": [
                           {
                               "code" : "java.method.addedToInterface",
                               "new" : "method void com.example.MyInterface::newMethod()",
                               "justification" : "This interface is not supposed to be implemented by clients."
                           },
                           ...
                       ]
                   }
               ],
               "0.2.0" : [
                   ...
               ]
           }
       
       
    • failOnMissingConfigurationFiles

      @Parameter(property="revapi.failOnMissingConfigurationFiles", defaultValue="true") protected boolean failOnMissingConfigurationFiles
      Set to false if you want to tolerate files referenced in the analysisConfigurationFiles missing on the filesystem and therefore not contributing to the analysis configuration.

      The default is true, which means that a missing analysis configuration file will fail the build.

    • promotedDependencies

      @Parameter(property="", defaultValue="") protected PromotedDependency[] promotedDependencies
      A list of dependencies of both the old and new artifact(s) that should be considered part of the old/new API. This is a convenience property if you just need to specify a set of dependencies to promote into the API and that set can be specified in a way common to both old and new APIs. If you need to specify different sets for the old and new, use oldPromotedDependencies or newPromotedDependencies respectively. If oldPromotedDependencies or newPromotedDependencies are specified, they override whatever is specified using this property.

      The individual properties of the dependency (e.g. groupId, artifactId, version, type or classifier) are matched exactly. If you enclose the value in forward slashes, they are matched as regular expressions instead.

      E.g. <groupId>com.acme</groupId> will only match dependencies with that exact groupId, while <groupId>/com\.acme(\..*)?/</groupId> will match "com.acme" groupId or any "sub-groupId" thereof (e.g. "com.acme.utils", etc.) using a regular expression.

      Since:
      0.13.6
    • oldArtifacts

      @Parameter(property="revapi.oldArtifacts", defaultValue="") protected String[] oldArtifacts
      The coordinates of the old artifacts. Defaults to single artifact with the latest released version of the current project.

      If the this property is null, the oldVersion property is checked for a value of the old version of the artifact being built.

      See Also:
    • oldVersion

      @Parameter(property="revapi.oldVersion", defaultValue="RELEASE") protected String oldVersion
      If you don't want to compare a different artifact than the one being built, specifying the just the old version is simpler way of specifying the old artifact.

      The default value is "RELEASE" meaning that the old version is the last released version of the artifact being built.

    • oldPromotedDependencies

      @Parameter(property="", defaultValue="") protected PromotedDependency[] oldPromotedDependencies
      A list of dependencies of the old artifact(s) that should be considered part of the old API.
      Since:
      0.13.6
      See Also:
    • newArtifacts

      @Parameter(property="revapi.newArtifacts", defaultValue="") protected String[] newArtifacts
      The coordinates of the new artifacts. These are the full GAVs of the artifacts, which means that you can compare different artifacts than the one being built. If you merely want to specify the artifact being built, use newVersion property instead.
    • newVersion

      @Parameter(property="revapi.newVersion", defaultValue="${project.version}") protected String newVersion
      The new version of the artifact. Defaults to "${project.version}".
    • newPromotedDependencies

      @Parameter(property="", defaultValue="") protected PromotedDependency[] newPromotedDependencies
      A list of dependencies of the new artifact(s) that should be considered part of the new API.
      Since:
      0.13.6
      See Also:
    • reportSeverity

      @Deprecated @Parameter(property="revapi.reportSeverity", defaultValue="potentiallyBreaking") protected FailSeverity reportSeverity
      Deprecated.
      use reportCriticality instead
      Problems with this or higher severity will be included in the report. Possible values: equivalent, nonBreaking, potentiallyBreaking, breaking.
    • reportCriticality

      @Parameter(property="revapi.minimumCriticality") protected String reportCriticality
      The minimum criticality of the differences that should be included in the report. This has to be one of the criticalities configured in the pipeline configuration (if the pipeline configuration doesn't define any, the following are the default ones: allowed, documented, highlight, error). If not defined, the value is derived from reportSeverity using the severity-to-criticality mapping (which is again configured in the pipeline configuration. If not defined in the pipeline configuration explicitly, the default mapping is the following: EQUIVALENT = allowed, NON_BREAKING = documented, POTENTIALLY_BREAKING = error, BREAKING = error.
    • skip

      @Parameter(property="revapi.skip", defaultValue="false") protected boolean skip
      Whether to skip the mojo execution.
    • outputDirectory

      @Parameter(property="revapi.outputDirectory", defaultValue="${project.reporting.outputDirectory}", required=true, readonly=true) protected String outputDirectory
    • checkDependencies

      @Parameter(property="revapi.checkDependencies", defaultValue="true") protected boolean checkDependencies
      Whether to include the dependencies in the API checks. This is the default thing to do because your API might be exposing classes from the dependencies and thus classes from your dependencies could become part of your API.

      However, setting this to false might be useful in situations where you have checked your dependencies in another module and don't want do that again. In that case, you might want to configure Revapi to ignore missing classes because it might find the classes from your dependencies as used in your API and would complain that it could not find it. See the docs.

    • resolveProvidedDependencies

      @Parameter(property="revapi.resolveProvidedDependencies", defaultValue="true") protected boolean resolveProvidedDependencies
      When establishing the API classes, Revapi by default also looks through the provided dependencies. The reason for this is that even though such dependencies do not appear in the transitive dependency set established by maven, they need to be present both on the compilation and runtime classpath of the module. Therefore, the classes in the module are free to expose classes from a provided dependency as API elements.

      In rare circumstances this is not a desired behavior though. It is undesired if for example the classes from the provided dependency are used only for establishing desired build order or when they are used in some non-standard scenarios during the build and actually not needed at runtime.

      Note that this property only influences the resolution of provided dependencies of the main artifacts, not the transitively reachable provided dependencies. For those, use the resolveTransitiveProvidedDependencies parameter.

    • resolveTransitiveProvidedDependencies

      @Parameter(property="revapi.resolveTransitiveProvidedDependencies", defaultValue="false") protected boolean resolveTransitiveProvidedDependencies
      In addition to resolveProvidedDependencies this property further controls how provided dependencies are resolved. Using this property you can control how the indirect, transitively reachable, provided dependencies are treated. The default is to not consider them, which is almost always the right thing to do. It might be necessary to set this property to true in the rare circumstances where the API of the main artifacts includes types from such transitively included provided dependencies. Such occurrence will manifest itself by Revapi considering such types as missing (which is by default reported as a potentially breaking change). When you then resolve the transitive provided dependencies (by setting this parameter to true), Revapi will be able to find such types and do a proper analysis of them.
    • versionFormat

      @Parameter(property="revapi.versionFormat", defaultValue="") protected String versionFormat
      If set, this property demands a format of the version string when the oldVersion or newVersion parameters are set to RELEASE or LATEST special version strings.

      Because Maven will report the newest non-snapshot version as the latest release, we might end up comparing a .Beta or other pre-release versions with the new version. This might not be what you want and setting the versionFormat will make sure that a newest version conforming to the version format is used instead of the one resolved by Maven by default.

      This parameter is a regular expression pattern that the version string needs to match in order to be considered a RELEASE.

    • repositorySystem

      @Component protected org.eclipse.aether.RepositorySystem repositorySystem
    • repositorySystemSession

      @Parameter(defaultValue="${repositorySystemSession}", readonly=true) protected org.eclipse.aether.RepositorySystemSession repositorySystemSession
    • alwaysCheckForReleaseVersion

      @Parameter(property="revapi.alwaysCheckForReleaseVersion", defaultValue="true") protected boolean alwaysCheckForReleaseVersion
      If true (the default) revapi will always download the information about the latest version from the remote repositories (instead of using locally cached info). This will respect the offline settings.
    • failOnUnresolvedArtifacts

      @Parameter(property="revapi.failOnUnresolvedArtifacts", defaultValue="false") protected boolean failOnUnresolvedArtifacts
      If true, the build will fail if one of the old or new artifacts fails to be resolved. Defaults to false.
    • failOnUnresolvedDependencies

      @Parameter(property="revapi.failOnUnresolvedDependencies", defaultValue="false") protected boolean failOnUnresolvedDependencies
      If true, the build will fail if some of the dependencies of the old or new artifacts fail to be resolved. Defaults to false.
    • generateSiteReport

      @Parameter(property="revapi.generateSiteReport", defaultValue="true") protected boolean generateSiteReport
      Set this to false if you want to use the goal to generate other kind of output than the default report for the Maven-generated site. You can generate such output by using different reporting extensions (like revapi-reporter-text).
    • disallowedExtensions

      @Parameter(property="revapi.disallowedExtensions", defaultValue="") protected String disallowedExtensions
      A comma-separated list of extensions (fully-qualified class names thereof) that are not taken into account during API analysis. By default, all extensions that are found on the classpath are used.

      You can modify this set if you use another extensions that change the found differences in a way that the determined new version would not correspond to what it should be.

    • expandProperties

      @Parameter(property="revapi.expandProperties", defaultValue="false") protected boolean expandProperties
      If set to true, the Maven properties will be expanded in the configuration before it is supplied to Revapi. I.e. any ${var} appearing in the configuration values will be replaced with the value of the var property as known to Maven. If the property is not defined, the expansion doesn't take place.
      Since:
      0.11.6
  • Constructor Details

    • ReportMojo

      public ReportMojo()
  • Method Details

    • getOutputDirectory

      protected String getOutputDirectory()
      Overrides:
      getOutputDirectory in class org.apache.maven.reporting.AbstractMavenReport
    • getProject

      protected org.apache.maven.project.MavenProject getProject()
      Overrides:
      getProject in class org.apache.maven.reporting.AbstractMavenReport
    • canGenerateReport

      public boolean canGenerateReport()
      Specified by:
      canGenerateReport in interface org.apache.maven.reporting.MavenReport
      Overrides:
      canGenerateReport in class org.apache.maven.reporting.AbstractMavenReport
    • executeReport

      protected void executeReport(Locale locale) throws org.apache.maven.reporting.MavenReportException
      Specified by:
      executeReport in class org.apache.maven.reporting.AbstractMavenReport
      Throws:
      org.apache.maven.reporting.MavenReportException
    • startReport

      protected void startReport(org.apache.maven.doxia.sink.Sink sink, ResourceBundle messages)
    • endReport

      protected void endReport(org.apache.maven.doxia.sink.Sink sink)
    • reportBody

      protected void reportBody(ReportTimeReporter reporterWithResults, org.revapi.API oldAPI, org.revapi.API newAPI, org.apache.maven.doxia.sink.Sink sink, ResourceBundle messages)
    • getOutputName

      public String getOutputName()
    • getName

      public String getName(Locale locale)
    • getDescription

      public String getDescription(Locale locale)
    • prepareAnalyzer

      protected Analyzer prepareAnalyzer(Locale locale)
    • getBundle

      protected ResourceBundle getBundle(Locale locale)
    • niceList

      protected String niceList(Iterable<? extends org.revapi.Archive> archives)