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));
}
}