001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.maven3;
021
022 import org.apache.maven.artifact.factory.ArtifactFactory;
023 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
024 import org.apache.maven.artifact.repository.ArtifactRepository;
025 import org.apache.maven.artifact.resolver.ArtifactCollector;
026 import org.apache.maven.execution.MavenSession;
027 import org.apache.maven.execution.RuntimeInformation;
028 import org.apache.maven.lifecycle.LifecycleExecutor;
029 import org.apache.maven.plugin.AbstractMojo;
030 import org.apache.maven.plugin.MojoExecutionException;
031 import org.apache.maven.plugin.MojoFailureException;
032 import org.apache.maven.project.MavenProject;
033 import org.apache.maven.project.MavenProjectBuilder;
034 import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
035 import org.sonar.api.batch.bootstrap.ProjectDefinition;
036 import org.sonar.api.batch.bootstrap.ProjectReactor;
037 import org.sonar.batch.MavenProjectConverter;
038 import org.sonar.batch.bootstrapper.Batch;
039 import org.sonar.batch.bootstrapper.EnvironmentInformation;
040 import org.sonar.batch.bootstrapper.LoggingConfiguration;
041
042 import java.util.Map;
043
044 /**
045 * @goal sonar
046 * @aggregator
047 * @requiresDependencyResolution test
048 */
049 public final class SonarMojo extends AbstractMojo {
050
051 /**
052 * @parameter expression="${session}"
053 * @required
054 * @readonly
055 */
056 private MavenSession session;
057
058 /**
059 * @parameter expression="${project}"
060 * @required
061 * @readonly
062 */
063 private MavenProject project;
064
065 /**
066 * @component
067 * @required
068 */
069 private LifecycleExecutor lifecycleExecutor;
070
071 /**
072 * The artifact factory to use.
073 *
074 * @component
075 * @required
076 * @readonly
077 */
078 private ArtifactFactory artifactFactory;
079
080 /**
081 * The artifact repository to use.
082 *
083 * @parameter expression="${localRepository}"
084 * @required
085 * @readonly
086 */
087 private ArtifactRepository localRepository;
088
089 /**
090 * The artifact metadata source to use.
091 *
092 * @component
093 * @required
094 * @readonly
095 */
096 private ArtifactMetadataSource artifactMetadataSource;
097
098 /**
099 * The artifact collector to use.
100 *
101 * @component
102 * @required
103 * @readonly
104 */
105 private ArtifactCollector artifactCollector;
106
107 /**
108 * The dependency tree builder to use.
109 *
110 * @component
111 * @required
112 * @readonly
113 */
114 private DependencyTreeBuilder dependencyTreeBuilder;
115
116 /**
117 * @component
118 * @required
119 * @readonly
120 */
121 private MavenProjectBuilder projectBuilder;
122
123 /**
124 * @component
125 * @required
126 * @readonly
127 */
128 private RuntimeInformation runtimeInformation;
129
130 public void execute() throws MojoExecutionException, MojoFailureException {
131 ProjectDefinition def = MavenProjectConverter.convert(session.getSortedProjects(), project);
132 ProjectReactor reactor = new ProjectReactor(def);
133
134 Batch batch = Batch.builder()
135 .setEnvironment(getEnvironmentInformation())
136 .setProjectReactor(reactor)
137 .addComponents(
138 session, getLog(), lifecycleExecutor, artifactFactory, localRepository, artifactMetadataSource, artifactCollector,
139 dependencyTreeBuilder, projectBuilder, Maven3PluginExecutor.class)
140 .build();
141
142 configureLogging(batch.getLoggingConfiguration());
143 batch.execute();
144 }
145
146 private void configureLogging(LoggingConfiguration logging) {
147 logging.setProperties((Map) session.getSystemProperties());
148 logging.setFormat(LoggingConfiguration.FORMAT_MAVEN);
149 if (getLog().isDebugEnabled()) {
150 logging.setVerbose(true);
151 }
152 }
153
154 private EnvironmentInformation getEnvironmentInformation() {
155 String mavenVersion = runtimeInformation.getApplicationVersion().toString();
156 return new EnvironmentInformation("Maven", mavenVersion);
157 }
158
159 }