From 312f24305acaca553500930c87d6b049c585745a Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Mon, 3 Jan 2011 16:21:16 +0100 Subject: [PATCH] [HUDSON-8395] M2 POMs aren't parsed if there is a M3 control error like an invalid scope in a plugin dep. use different validation level depending on maven version used. --- .../hudson/maven/MavenEmbedderRequest.java | 100 ++++++++++++------ .../hudson/maven/MavenModuleSetBuild.java | 24 ++++- .../src/main/java/hudson/maven/MavenUtil.java | 4 + .../java/hudson/maven/Maven3BuildTest.java | 18 ++++ .../java/hudson/maven/MavenBuildTest.java | 25 ++++- .../resources/hudson/maven/test-pom-8395.xml | 25 +++++ 6 files changed, 153 insertions(+), 43 deletions(-) create mode 100755 test/src/test/resources/hudson/maven/test-pom-8395.xml diff --git a/maven-plugin/src/main/java/hudson/maven/MavenEmbedderRequest.java b/maven-plugin/src/main/java/hudson/maven/MavenEmbedderRequest.java index 5cd50c382d..955f27e82d 100755 --- a/maven-plugin/src/main/java/hudson/maven/MavenEmbedderRequest.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenEmbedderRequest.java @@ -27,6 +27,7 @@ import hudson.model.TaskListener; import java.io.File; import java.util.Properties; +import org.apache.maven.model.building.ModelBuildingRequest; import org.sonatype.aether.transfer.TransferListener; /** @@ -52,7 +53,26 @@ public class MavenEmbedderRequest * @since 1.393 */ private ClassLoader classLoader; + + /** + * will processPlugins during project reading + * @since 1.393 + */ + private boolean processPlugins; + + /** + * will resolve dependencies during project reading + * @since 1.393 + */ + private boolean resolveDependencies; + /** + * level of validation when reading pom (ie model building request) + * default value : {@link ModelBuildingRequest#VALIDATION_LEVEL_MAVEN_2_0} etc... + * @since 1.393 + */ + private int validationLevel = ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0; + /** * @param listener * This is where the log messages from Maven will be recorded. @@ -69,8 +89,7 @@ public class MavenEmbedderRequest * Optional alternate settings.xml file. */ public MavenEmbedderRequest( TaskListener listener, File mavenHome, String profiles, Properties systemProperties, - String privateRepository, File alternateSettings ) - { + String privateRepository, File alternateSettings ) { this.listener = listener; this.mavenHome = mavenHome; this.profiles = profiles; @@ -79,91 +98,104 @@ public class MavenEmbedderRequest this.alternateSettings = alternateSettings; } - public TaskListener getListener() - { + public TaskListener getListener() { return listener; } - public MavenEmbedderRequest setListener( TaskListener listener ) - { + public MavenEmbedderRequest setListener( TaskListener listener ) { this.listener = listener; return this; } - public File getMavenHome() - { + public File getMavenHome() { return mavenHome; } - public MavenEmbedderRequest setMavenHome( File mavenHome ) - { + public MavenEmbedderRequest setMavenHome( File mavenHome ) { this.mavenHome = mavenHome; return this; } - public String getProfiles() - { + public String getProfiles() { return profiles; } - public MavenEmbedderRequest setProfiles( String profiles ) - { + public MavenEmbedderRequest setProfiles( String profiles ) { this.profiles = profiles; return this; } - public Properties getSystemProperties() - { + public Properties getSystemProperties() { return systemProperties; } - public MavenEmbedderRequest setSystemProperties( Properties systemProperties ) - { + public MavenEmbedderRequest setSystemProperties( Properties systemProperties ) { this.systemProperties = systemProperties; return this; } - public String getPrivateRepository() - { + public String getPrivateRepository() { return privateRepository; } - public MavenEmbedderRequest setPrivateRepository( String privateRepository ) - { + public MavenEmbedderRequest setPrivateRepository( String privateRepository ) { this.privateRepository = privateRepository; return this; } - public File getAlternateSettings() - { + public File getAlternateSettings() { return alternateSettings; } - public MavenEmbedderRequest setAlternateSettings( File alternateSettings ) - { + public MavenEmbedderRequest setAlternateSettings( File alternateSettings ) { this.alternateSettings = alternateSettings; return this; } - public TransferListener getTransferListener() - { + public TransferListener getTransferListener() { return transferListener; } - public MavenEmbedderRequest setTransferListener( TransferListener transferListener ) - { + public MavenEmbedderRequest setTransferListener( TransferListener transferListener ) { this.transferListener = transferListener; return this; } - public ClassLoader getClassLoader() - { + public ClassLoader getClassLoader() { return classLoader; } - public MavenEmbedderRequest setClassLoader( ClassLoader classLoader ) - { + public MavenEmbedderRequest setClassLoader( ClassLoader classLoader ) { this.classLoader = classLoader; return this; } + + public boolean isProcessPlugins() { + return processPlugins; + } + + public MavenEmbedderRequest setProcessPlugins( boolean processPlugins ) { + this.processPlugins = processPlugins; + return this; + } + + public boolean isResolveDependencies() { + return resolveDependencies; + } + + public MavenEmbedderRequest setResolveDependencies( boolean resolveDependencies ) { + this.resolveDependencies = resolveDependencies; + return this; + } + + public int getValidationLevel() + { + return validationLevel; + } + + public MavenEmbedderRequest setValidationLevel( int validationLevel ) + { + this.validationLevel = validationLevel; + return this; + } } diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java index ca44082bb2..11b4d3cc19 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java @@ -31,6 +31,7 @@ import hudson.FilePath; import hudson.FilePath.FileCallable; import hudson.Launcher; import hudson.Util; +import hudson.cli.VersionCommand; import hudson.maven.MavenBuild.ProxyImpl2; import hudson.maven.reporters.MavenFingerprinter; import hudson.maven.reporters.MavenMailer; @@ -84,6 +85,7 @@ import org.apache.maven.artifact.versioning.ComparableVersion; import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.ReactorManager; import org.apache.maven.lifecycle.LifecycleExecutionException; +import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingException; @@ -498,7 +500,7 @@ public class MavenModuleSetBuild extends AbstractMavenBuild)MavenModuleSetBuild.this)); @@ -523,7 +525,7 @@ public class MavenModuleSetBuild extends AbstractMavenBuild(); List changedModules = new ArrayList(); @@ -682,12 +684,12 @@ public class MavenModuleSetBuild extends AbstractMavenBuild poms; try { - poms = getModuleRoot().act(new PomParser(listener, mvn, project)); + poms = getModuleRoot().act(new PomParser(listener, mvn, project, mavenVersion)); } catch (IOException e) { if (e.getCause() instanceof AbortException) throw (AbortException) e.getCause(); @@ -997,7 +999,8 @@ public class MavenModuleSetBuild extends AbstractMavenBuild= 0; + if (maven3OrLater) + mavenEmbedderRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 ); + //mavenEmbedderRequest.setClassLoader( MavenEmbedderUtils.buildClassRealm( mavenHome.getHomeDir(), null, null ) ); MavenEmbedder embedder = MavenUtil.createEmbedder( mavenEmbedderRequest ); diff --git a/maven-plugin/src/main/java/hudson/maven/MavenUtil.java b/maven-plugin/src/main/java/hudson/maven/MavenUtil.java index cc444edc41..025b52c81b 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenUtil.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenUtil.java @@ -188,6 +188,10 @@ public class MavenUtil { mavenEmbedderRequest.getClassLoader() == null ? new MaskingClassLoader( cl ) : mavenEmbedderRequest.getClassLoader(); + mavenRequest.setProcessPlugins( mavenEmbedderRequest.isProcessPlugins() ); + mavenRequest.setResolveDependencies( mavenEmbedderRequest.isResolveDependencies() ); + mavenRequest.setValidationLevel( mavenEmbedderRequest.getValidationLevel() ); + // TODO check this MaskingClassLoader with maven 3 artifacts MavenEmbedder maven = new MavenEmbedder( mavenEmbedderClassLoader, mavenRequest ); { diff --git a/test/src/test/java/hudson/maven/Maven3BuildTest.java b/test/src/test/java/hudson/maven/Maven3BuildTest.java index 4f083c159a..6cec218b7b 100644 --- a/test/src/test/java/hudson/maven/Maven3BuildTest.java +++ b/test/src/test/java/hudson/maven/Maven3BuildTest.java @@ -3,13 +3,16 @@ package hudson.maven; import hudson.Launcher; import hudson.maven.reporters.MavenAbstractArtifactRecord; import hudson.model.BuildListener; +import hudson.model.Result; import hudson.tasks.Maven.MavenInstallation; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; +import java.util.concurrent.Future; import org.apache.commons.io.FileUtils; +import org.jvnet.hudson.test.Bug; import org.jvnet.hudson.test.ExtractResourceSCM; import org.jvnet.hudson.test.HudsonTestCase; @@ -68,8 +71,23 @@ public class Maven3BuildTest extends HudsonTestCase { assertTrue( MavenUtil.maven3orLater( b.getMavenVersionUsed() ) ); } + @Bug(value=8395) + public void testMaven3BuildWrongScope() throws Exception { + + File pom = new File(this.getClass().getResource("test-pom-8395.xml").toURI()); + MavenModuleSet m = createMavenProject(); + MavenInstallation mavenInstallation = configureMaven3(); + m.setMaven( mavenInstallation.getName() ); + m.getReporters().add(new TestReporter()); + m.setRootPOM(pom.getAbsolutePath()); + m.setGoals( "clean validate" ); + MavenModuleSetBuild mmsb = m.scheduleBuild2( 0 ).get(); + assertBuildStatus( Result.FAILURE, mmsb ); + assertTrue( mmsb.getProject().getModules() == null); + } + private static class TestReporter extends MavenReporter { @Override public boolean end(MavenBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { diff --git a/test/src/test/java/hudson/maven/MavenBuildTest.java b/test/src/test/java/hudson/maven/MavenBuildTest.java index 11fa6f6804..427b83e805 100644 --- a/test/src/test/java/hudson/maven/MavenBuildTest.java +++ b/test/src/test/java/hudson/maven/MavenBuildTest.java @@ -1,17 +1,19 @@ package hudson.maven; -import org.jvnet.hudson.test.HudsonTestCase; -import org.jvnet.hudson.test.Bug; -import org.jvnet.hudson.test.ExtractResourceSCM; import hudson.Launcher; -import hudson.scm.SubversionSCM; import hudson.model.BuildListener; import hudson.model.Result; +import hudson.scm.SubversionSCM; +import hudson.tasks.Maven.MavenInstallation; import hudson.util.NullStream; +import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import org.jvnet.hudson.test.Bug; +import org.jvnet.hudson.test.ExtractResourceSCM; +import org.jvnet.hudson.test.HudsonTestCase; import org.tmatesoft.svn.core.SVNException; /** @@ -90,4 +92,19 @@ public class MavenBuildTest extends HudsonTestCase { buildAndAssertSuccess(m.getModule("test$module1")); buildAndAssertSuccess(m.getModule("test$module1")); } + + @Bug(value=8395) + public void testMaven2BuildWrongScope() throws Exception { + + File pom = new File(this.getClass().getResource("test-pom-8395.xml").toURI()); + MavenModuleSet m = createMavenProject(); + MavenInstallation mavenInstallation = configureDefaultMaven(); + m.setMaven( mavenInstallation.getName() ); + m.getReporters().add(new TestReporter()); + m.setRootPOM(pom.getAbsolutePath()); + m.setGoals( "clean validate" ); + MavenModuleSetBuild mmsb = buildAndAssertSuccess(m); + assertFalse( mmsb.getProject().getModules().isEmpty()); + } + } diff --git a/test/src/test/resources/hudson/maven/test-pom-8395.xml b/test/src/test/resources/hudson/maven/test-pom-8395.xml new file mode 100755 index 0000000000..0ef0ff59ac --- /dev/null +++ b/test/src/test/resources/hudson/maven/test-pom-8395.xml @@ -0,0 +1,25 @@ + + 4.0.0 + org.hudson-ci.testcase + testcase-wrong-plugin-dep-scope + 1.0-SNAPSHOT + jar + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.6 + + + ant + ant-nodeps + 1.8.2 + test + + + + + + -- GitLab