diff options
author | simonbrandhof <simon.brandhof@gmail.com> | 2010-09-06 14:08:06 +0000 |
---|---|---|
committer | simonbrandhof <simon.brandhof@gmail.com> | 2010-09-06 14:08:06 +0000 |
commit | aeadc1f9129274949daaa57738c7c4550bdfbc7b (patch) | |
tree | 08dadf5ef7474fc41d1d48f74648f1ba8b55f34d /sonar-maven-plugin | |
download | sonarqube-aeadc1f9129274949daaa57738c7c4550bdfbc7b.tar.gz sonarqube-aeadc1f9129274949daaa57738c7c4550bdfbc7b.zip |
SONAR-236 remove deprecated code from checkstyle plugin + display default value of rule parameters in Q profile console
Diffstat (limited to 'sonar-maven-plugin')
3 files changed, 304 insertions, 0 deletions
diff --git a/sonar-maven-plugin/pom.xml b/sonar-maven-plugin/pom.xml new file mode 100644 index 00000000000..47c9bf17b54 --- /dev/null +++ b/sonar-maven-plugin/pom.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.codehaus.sonar</groupId> + <artifactId>sonar</artifactId> + <version>2.3-SNAPSHOT</version> + </parent> + <artifactId>sonar-maven-plugin</artifactId> + <packaging>maven-plugin</packaging> + <name>Sonar :: Maven2 Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-dependency-tree</artifactId> + <version>1.2</version> + </dependency> + <dependency> + <groupId>org.codehaus.sonar</groupId> + <artifactId>sonar-batch</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0.7</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-core</artifactId> + <version>2.0.7</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>2.0.7</version> + <scope>provided</scope> + </dependency> + </dependencies> +</project>
\ No newline at end of file diff --git a/sonar-maven-plugin/src/main/java/org/sonar/maven/Maven2PluginExecutor.java b/sonar-maven-plugin/src/main/java/org/sonar/maven/Maven2PluginExecutor.java new file mode 100644 index 00000000000..e39a64415d6 --- /dev/null +++ b/sonar-maven-plugin/src/main/java/org/sonar/maven/Maven2PluginExecutor.java @@ -0,0 +1,82 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2009 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * Sonar is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * Sonar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.maven; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.execution.ReactorManager; +import org.apache.maven.lifecycle.LifecycleExecutor; +import org.sonar.api.batch.maven.MavenPlugin; +import org.sonar.api.batch.maven.MavenPluginHandler; +import org.sonar.api.resources.Project; +import org.sonar.api.utils.SonarException; +import org.sonar.batch.MavenPluginExecutor; + +import java.util.Arrays; + +public class Maven2PluginExecutor implements MavenPluginExecutor { + + private LifecycleExecutor lifecycleExecutor; + private MavenSession mavenSession; + + public Maven2PluginExecutor(LifecycleExecutor le, MavenSession mavenSession) { + this.lifecycleExecutor = le; + this.mavenSession = mavenSession; + } + + public MavenPluginHandler execute(Project project, MavenPluginHandler handler) { + for (String goal : handler.getGoals()) { + MavenPlugin plugin = MavenPlugin.getPlugin(project.getPom(), handler.getGroupId(), handler.getArtifactId()); + execute(project, getGoal(handler.getGroupId(), handler.getArtifactId(), plugin.getPlugin().getVersion(), goal)); + } + return handler; + } + + public void execute(Project project, String goal) { + try { + ReactorManager reactor = new ReactorManager(Arrays.asList(project.getPom())); + MavenSession clonedSession = new MavenSession(mavenSession.getContainer(), + mavenSession.getSettings(), + mavenSession.getLocalRepository(), + mavenSession.getEventDispatcher(), + reactor, + Arrays.asList(goal), + mavenSession.getExecutionRootDirectory(), + mavenSession.getExecutionProperties(), + mavenSession.getStartTime() + ); + lifecycleExecutor.execute(clonedSession, reactor, clonedSession.getEventDispatcher()); + + } catch (Exception e) { + throw new SonarException("Unable to execute maven plugin", e); + + } + } + + protected static String getGoal(String groupId, String artifactId, String version, String goal) { + String defaultVersion = (version==null ? "" : version); + return new StringBuilder() + .append(groupId).append(":") + .append(artifactId).append(":") + .append(defaultVersion) + .append(":") + .append(goal) + .toString(); + } +} diff --git a/sonar-maven-plugin/src/main/java/org/sonar/maven/SonarMojo.java b/sonar-maven-plugin/src/main/java/org/sonar/maven/SonarMojo.java new file mode 100644 index 00000000000..516b2500c3b --- /dev/null +++ b/sonar-maven-plugin/src/main/java/org/sonar/maven/SonarMojo.java @@ -0,0 +1,171 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2009 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * Sonar is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * Sonar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.maven; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; +import org.apache.commons.configuration.*; +import org.apache.commons.io.IOUtils; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.metadata.ArtifactMetadataSource; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactCollector; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.lifecycle.LifecycleExecutor; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugin.PluginManager; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; +import org.slf4j.LoggerFactory; +import org.sonar.api.platform.Environment; +import org.sonar.batch.Batch; + +import java.io.InputStream; + +/** + * @goal sonar + * @aggregator + * @requiresDependencyResolution test + */ +public final class SonarMojo extends AbstractMojo { + + /** + * @parameter expression="${session}" + * @required + * @readonly + */ + private MavenSession session; + + /** + * @parameter expression="${project}" + * @required + * @readonly + */ + private MavenProject project; + + /** + * @component + * @required + */ + private LifecycleExecutor lifecycleExecutor; + + /** + * @component + * @required + */ + private PluginManager pluginManager; + + /** + * The artifact factory to use. + * + * @component + * @required + * @readonly + */ + private ArtifactFactory artifactFactory; + + /** + * The artifact repository to use. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + private ArtifactRepository localRepository; + + /** + * The artifact metadata source to use. + * + * @component + * @required + * @readonly + */ + private ArtifactMetadataSource artifactMetadataSource; + + /** + * The artifact collector to use. + * + * @component + * @required + * @readonly + */ + private ArtifactCollector artifactCollector; + + /** + * The dependency tree builder to use. + * + * @component + * @required + * @readonly + */ + private DependencyTreeBuilder dependencyTreeBuilder; + + /** + * @component + * @required + * @readonly + */ + private MavenProjectBuilder projectBuilder; + + public void execute() throws MojoExecutionException, MojoFailureException { + initLogging(); + executeBatch(); + } + + + private void executeBatch() throws MojoExecutionException { + Batch batch = new Batch(getInitialConfiguration(), + session, project, getLog(), lifecycleExecutor, pluginManager, artifactFactory, + localRepository, artifactMetadataSource, artifactCollector, dependencyTreeBuilder, + projectBuilder, Environment.MAVEN2, Maven2PluginExecutor.class); + batch.execute(); + } + + + private void initLogging() throws MojoExecutionException { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + JoranConfigurator jc = new JoranConfigurator(); + jc.setContext(context); + context.reset(); + InputStream input = getClass().getResourceAsStream("/org/sonar/batch/logback.xml"); + System.setProperty("ROOT_LOGGER_LEVEL", getLog().isDebugEnabled() ? "DEBUG" : "INFO"); + try { + jc.doConfigure(input); + + } catch (JoranException e) { + throw new MojoExecutionException("can not initialize logging", e); + + } finally { + IOUtils.closeQuietly(input); + } + } + + private Configuration getInitialConfiguration() { + CompositeConfiguration configuration = new CompositeConfiguration(); + configuration.addConfiguration(new SystemConfiguration()); + configuration.addConfiguration(new EnvironmentConfiguration()); + configuration.addConfiguration(new MapConfiguration(project.getModel().getProperties())); + return configuration; + } +} |