<module>sonar-home</module>
<module>sonar-java-api</module>
<module>sonar-markdown</module>
+ <module>sonar-maven-plugin</module>
+ <module>sonar-maven3-plugin</module>
<module>sonar-plugin-api</module>
<module>server</module>
<module>sonar-testing-harness</module>
--- /dev/null
+<?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>5.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>sonar-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <name>SonarQube :: Maven2 Plugin</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Test -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.easytesting</groupId>
+ <artifactId>fest-assert</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>${skipBatchTests}</skipTests>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.maven;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.execution.RuntimeInformation;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * @goal sonar
+ * @aggregator
+ */
+public final class SonarMojo extends AbstractMojo {
+
+ /**
+ * @component
+ * @required
+ * @readonly
+ * @VisibleForTesting
+ */
+ RuntimeInformation runtimeInformation;
+
+ @Override
+ public void execute() throws MojoExecutionException {
+ ArtifactVersion mavenVersion = getMavenVersion();
+ if (mavenVersion.getMajorVersion() < 3) {
+ throw new MojoExecutionException("Please use at least Maven 3.x to perform SonarQube analysis");
+ }
+ throw new MojoExecutionException("Please update sonar-maven-plugin to at least version 2.3");
+ }
+
+ private ArtifactVersion getMavenVersion() {
+ return runtimeInformation.getApplicationVersion();
+ }
+
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.maven;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.execution.RuntimeInformation;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class SonarMojoTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @Test
+ public void testFailureWithMaven2() throws MojoExecutionException {
+ SonarMojo mojo = new SonarMojo();
+ mojo.runtimeInformation = new RuntimeInformation() {
+
+ @Override
+ public ArtifactVersion getApplicationVersion() {
+ return new DefaultArtifactVersion("2.2.1");
+ }
+ };
+ thrown.expect(MojoExecutionException.class);
+ thrown.expectMessage("Please use at least Maven 3.x to perform SonarQube analysis");
+ mojo.execute();
+ }
+
+ @Test
+ public void testFailureWithMaven3() throws MojoExecutionException {
+ SonarMojo mojo = new SonarMojo();
+ mojo.runtimeInformation = new RuntimeInformation() {
+
+ @Override
+ public ArtifactVersion getApplicationVersion() {
+ return new DefaultArtifactVersion("3.0.5");
+ }
+ };
+ thrown.expect(MojoExecutionException.class);
+ thrown.expectMessage("Please update sonar-maven-plugin to at least version 2.3");
+ mojo.execute();
+ }
+
+}
--- /dev/null
+<?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>5.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>sonar-maven3-plugin</artifactId>
+ <packaging>pom</packaging>
+ <name>SonarQube :: Maven3 Plugin</name>
+ <!-- Since Sonar 3.7 there is no more difference between Maven 2 and Maven 3 so relocate to Maven 2 plugin to avoid duplication -->
+ <distributionManagement>
+ <relocation>
+ <artifactId>sonar-maven-plugin</artifactId>
+ </relocation>
+ </distributionManagement>
+
+</project>