diff --git a/plugin/pom.xml b/plugin/pom.xml index 93aa2b7..d3b24d5 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -101,34 +101,6 @@ 1.8 - - org.codehaus.mojo - properties-maven-plugin - ${properties-maven-plugin.version} - - - - set-system-properties - - - - - maven-checkstyle-plugin.version - ${maven-checkstyle-plugin.version} - - - checkstyle.version - ${checkstyle.version} - - - sevntu.version - ${sevntu.version} - - - - - - diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/AbstractCheckMojo.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/AbstractCheckMojo.java index fbb72f1..ae39165 100644 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/AbstractCheckMojo.java +++ b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/AbstractCheckMojo.java @@ -26,7 +26,12 @@ package net.kemitix.checkstyle.ruleset.plugin; import lombok.Setter; import lombok.val; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.BuildPluginManager; import org.apache.maven.plugin.MojoExecutionException; @@ -34,14 +39,19 @@ import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.twdata.maven.mojoexecutor.MojoExecutor; +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + /** * Runs the Checkstyle Maven Plugin with the Kemitix Checkstyle Ruleset. * * @author Paul Campbell (pcampbell@kemitix.net) */ -public abstract class AbstractCheckMojo extends AbstractMojo { +abstract class AbstractCheckMojo extends AbstractMojo { private static final String CHECKSTYLE_GROUPID = "com.puppycrawl.tools"; @@ -73,8 +83,11 @@ public abstract class AbstractCheckMojo extends AbstractMojo { @Parameter(defaultValue = "${session}", readonly = true) private MavenSession mavenSession; + @Parameter(defaultValue = "${localRepository}", readonly = true, required = true) + private ArtifactRepository artifactRepository = null; + @Component - private BuildPluginManager pluginManager; + private BuildPluginManager pluginManager = null; /** * Execute Checkstyle Check. @@ -84,28 +97,66 @@ public abstract class AbstractCheckMojo extends AbstractMojo { * @throws MojoExecutionException on execution error * @throws MojoFailureException on execution failure */ - protected final void performCheck(final String level) throws MojoExecutionException, MojoFailureException { - // load versions from plugin's pom.xml - val properties = System.getProperties(); - val mavenCheckstylePluginVersion = properties.getProperty("maven-checkstyle-plugin.version"); - val checkstyleVersion = properties.getProperty("checkstyle.version"); - val sevntuVersion = properties.getProperty("sevntu.version"); + final void performCheck(final String level) throws MojoExecutionException, MojoFailureException { + val properties = getProperties(); + debug("properties: %s", properties); + // get versions from pom.xml properties + val pluginVersion = getProperty(properties, "maven-checkstyle-plugin.version"); + val checkstyleVersion = getProperty(properties, "checkstyle.version"); + val sevntuVersion = getProperty(properties, "sevntu.version"); + + // configure + val checkstylePlugin = getPlugin(pluginVersion, checkstyleVersion, sevntuVersion); + val configuration = MojoExecutor.configuration( + MojoExecutor.element(CONFIG_LOCATION, String.format("net/kemitix/checkstyle-%s.xml", level))); + val environment = MojoExecutor.executionEnvironment(mavenProject, mavenSession, pluginManager); + + // run + info("Running Checkstyle %s (sevntu: %s) with ruleset %s (%s)", checkstyleVersion, sevntuVersion, level, + rulesetVersion + ); + MojoExecutor.executeMojo(checkstylePlugin, "check", configuration, environment); + info("Checkstyle complete"); + } + + private String getProperty(final Properties properties, final String key) { + val property = properties.getProperty(key); + debug(key + ": %s", property); + return property; + } + + private Plugin getPlugin(final String pluginVersion, final String checkstyleVersion, final String sevntuVersion) { + // create checkstyle dependencies val checkstyle = MojoExecutor.dependency(CHECKSTYLE_GROUPID, CHECKSTYLE_ARTIFACTID, checkstyleVersion); val sevntu = MojoExecutor.dependency(SEVNTU_GROUPID, SEVNTU_ARTIFACTID, sevntuVersion); val ruleset = MojoExecutor.dependency(KEMITIX_GROUPID, KEMITIX_ARTIFACTID, rulesetVersion); - val checkstylePlugin = - MojoExecutor.plugin(APACHE_PLUGIN_GROUPID, APACHE_PLUGIN_ARTIFACTID, mavenCheckstylePluginVersion, - MojoExecutor.dependencies(checkstyle, sevntu, ruleset) - ); - val configLocation = - MojoExecutor.element(CONFIG_LOCATION, String.format("net/kemitix/checkstyle-%s.xml", level)); + val dependencies = MojoExecutor.dependencies(checkstyle, sevntu, ruleset); - getLog().info(String.format("Running Checkstyle %s (sevntu: %s) with ruleset %s (%s)", checkstyleVersion, - sevntuVersion, level, rulesetVersion - )); - MojoExecutor.executeMojo(checkstylePlugin, "check", MojoExecutor.configuration(configLocation), - MojoExecutor.executionEnvironment(mavenProject, mavenSession, pluginManager) - ); + return MojoExecutor.plugin(APACHE_PLUGIN_GROUPID, APACHE_PLUGIN_ARTIFACTID, pluginVersion, dependencies); + } + + private Properties getProperties() throws MojoFailureException { + // load properties from the plugin pom.xml + val pluginArtifactId = KEMITIX_ARTIFACTID + "-maven-plugin"; + val pluginArtifact = new DefaultArtifact(KEMITIX_GROUPID, pluginArtifactId, rulesetVersion, null, "", null, + new DefaultArtifactHandler("pom") + ); + try { + val pomReader = new FileReader(artifactRepository.find(pluginArtifact) + .getFile()); + return new MavenXpp3Reader().read(pomReader) + .getProperties(); + } catch (XmlPullParserException | IOException e) { + throw new MojoFailureException("Can't load properties from plugin's pom.xml", e); + } + } + + private void info(final String format, final Object... args) { + getLog().info(String.format(format, args)); + } + + private void debug(final String format, final Object... args) { + getLog().debug(String.format(format, args)); } }