This is an automated email from the ASF dual-hosted git repository. rfscholte pushed a commit to branch MNG-6656 in repository https://gitbox.apache.org/repos/asf/maven.git
commit 91f87994a4fb93aa7f90e82c69eb73b05a9302b6 Author: rfscholte <[email protected]> AuthorDate: Tue Oct 15 00:12:17 2019 +0200 [MNG-6656] Enable maven.experimental.buildconsumer by default --- .../project/AbstractMavenProjectTestCase.java | 35 ++++-- .../apache/maven/project/ProjectClasspathTest.java | 1 + .../maven/project/DefaultProjectBuilder.java | 2 +- .../maven/AbstractCoreMavenComponentTestCase.java | 24 +++-- .../project/AbstractMavenProjectTestCase.java | 33 ++++-- .../project/DefaultMavenProjectBuilderTest.java | 16 ++- .../apache/maven/project/PomConstructionTest.java | 14 ++- .../apache/maven/project/ProjectBuilderTest.java | 8 ++ .../maven/repository/TestRepositorySystem.java | 4 +- .../settings/PomConstructionWithSettingsTest.java | 27 ++++- .../java/org/apache/maven/feature/Features.java | 2 +- .../maven/model/building/DefaultModelBuilder.java | 119 ++++++++++++--------- .../validation/DefaultModelValidatorTest.java | 12 ++- .../xml/sax/filter/AbstractEventXMLFilter.java | 8 +- .../maven/xml/sax/filter/ParentXMLFilter.java | 8 +- .../maven/xml/sax/filter/ParentXMLFilterTest.java | 3 + 16 files changed, 215 insertions(+), 101 deletions(-) diff --git a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java index 7e3f7e6..7aa6585 100644 --- a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java +++ b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java @@ -23,11 +23,13 @@ import java.net.URL; import java.util.Arrays; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.building.ModelBuildingException; import org.apache.maven.model.building.ModelProblem; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.apache.maven.session.scope.internal.SessionScope; import org.codehaus.plexus.ContainerConfiguration; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusTestCase; @@ -42,6 +44,8 @@ public abstract class AbstractMavenProjectTestCase protected ProjectBuilder projectBuilder; protected RepositorySystem repositorySystem; + + private SessionScope sessionScope; @Override protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) @@ -67,12 +71,27 @@ public abstract class AbstractMavenProjectTestCase } repositorySystem = lookup( RepositorySystem.class ); + + } + + private void seedMavenSession( MavenSession mavenSession ) throws Exception + { + if ( sessionScope == null ) + { + sessionScope = lookup( SessionScope.class ); + sessionScope.enter(); + sessionScope.seed( MavenSession.class, mavenSession ); + } } @Override protected void tearDown() throws Exception { + if ( sessionScope != null ) + { + sessionScope.exit(); + } projectBuilder = null; super.tearDown(); @@ -121,11 +140,7 @@ public abstract class AbstractMavenProjectTestCase protected ArtifactRepository getLocalRepository() throws Exception { - ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" ); - - ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null ); - - return r; + return repositorySystem.createLocalRepository( getLocalRepositoryPath() ); } // ---------------------------------------------------------------------- @@ -142,6 +157,10 @@ public abstract class AbstractMavenProjectTestCase configuration.setResolveDependencies( true ); initRepoSession( configuration ); + seedMavenSession( new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); + try { return projectBuilder.build( pom, configuration ).getProject(); @@ -170,6 +189,10 @@ public abstract class AbstractMavenProjectTestCase ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest(); configuration.setLocalRepository( getLocalRepository() ); initRepoSession( configuration ); + + seedMavenSession( new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); return projectBuilder.build( pom, configuration ).getProject(); } diff --git a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java index d7ae86e..59c6e0d 100644 --- a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java +++ b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java @@ -35,6 +35,7 @@ public class ProjectClasspathTest public void setUp() throws Exception { + super.setUp(); ArtifactResolver resolver = lookup( ArtifactResolver.class, "classpath" ); DefaultArtifactDescriptorReader pomReader = (DefaultArtifactDescriptorReader)lookup(ArtifactDescriptorReader.class); pomReader.setArtifactResolver( resolver ); diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java index c3a0a8f..ce6c9dc 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java @@ -164,7 +164,7 @@ public class DefaultProjectBuilder request.setModelBuildingListener( listener ); request.setPomFile( pomFile ); - request.setTransformPom( true ); + request.setTransformPom( pomFile != null ); request.setModelSource( modelSource ); request.setLocationTracking( true ); diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java index 179b8f9..0931d1b 100644 --- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java @@ -44,10 +44,10 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.apache.maven.session.scope.internal.SessionScope; import org.codehaus.plexus.ContainerConfiguration; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusTestCase; -import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.util.FileUtils; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; @@ -56,12 +56,12 @@ import org.eclipse.aether.repository.LocalRepository; public abstract class AbstractCoreMavenComponentTestCase extends PlexusTestCase { - @Requirement protected RepositorySystem repositorySystem; - @Requirement protected org.apache.maven.project.ProjectBuilder projectBuilder; + protected SessionScope sessionScope; + protected void setUp() throws Exception { @@ -144,9 +144,17 @@ public abstract class AbstractCoreMavenComponentTestCase .setRemoteRepositories( request.getRemoteRepositories() ) .setPluginArtifactRepositories( request.getPluginArtifactRepositories() ) .setSystemProperties( executionProperties ); + initRepoSession( configuration ); - List<MavenProject> projects = new ArrayList<>(); + MavenSession session = + new MavenSession( getContainer(), configuration.getRepositorySession(), request, + new DefaultMavenExecutionResult() ); + sessionScope = lookup( SessionScope.class ); + sessionScope.enter(); + sessionScope.seed( MavenSession.class, session ); + + List<MavenProject> projects = new ArrayList<>(); if ( pom != null ) { MavenProject project = projectBuilder.build( pom, configuration ).getProject(); @@ -172,15 +180,9 @@ public abstract class AbstractCoreMavenComponentTestCase project.setPluginArtifactRepositories( request.getPluginArtifactRepositories() ); projects.add( project ); } - - initRepoSession( configuration ); - - MavenSession session = - new MavenSession( getContainer(), configuration.getRepositorySession(), request, - new DefaultMavenExecutionResult() ); session.setProjects( projects ); session.setAllProjects( session.getProjects() ); - + return session; } diff --git a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java index 9f836c2..82189e9 100644 --- a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java @@ -23,11 +23,13 @@ import java.net.URL; import java.util.Arrays; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.building.ModelBuildingException; import org.apache.maven.model.building.ModelProblem; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.apache.maven.session.scope.internal.SessionScope; import org.codehaus.plexus.ContainerConfiguration; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusTestCase; @@ -42,6 +44,8 @@ public abstract class AbstractMavenProjectTestCase protected ProjectBuilder projectBuilder; protected RepositorySystem repositorySystem; + + private SessionScope sessionScope; @Override protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) @@ -67,12 +71,17 @@ public abstract class AbstractMavenProjectTestCase } repositorySystem = lookup( RepositorySystem.class ); + + sessionScope = lookup( SessionScope.class ); + sessionScope.enter(); } @Override protected void tearDown() throws Exception { + sessionScope.exit(); + projectBuilder = null; super.tearDown(); @@ -82,6 +91,11 @@ public abstract class AbstractMavenProjectTestCase { return projectBuilder; } + + protected final SessionScope getSessionScope() + { + return sessionScope; + } @Override protected String getCustomConfigurationName() @@ -119,11 +133,7 @@ public abstract class AbstractMavenProjectTestCase protected ArtifactRepository getLocalRepository() throws Exception { - ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" ); - - ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null ); - - return r; + return repositorySystem.createLocalRepository( getLocalRepositoryPath() ); } // ---------------------------------------------------------------------- @@ -138,6 +148,9 @@ public abstract class AbstractMavenProjectTestCase configuration.setProcessPlugins( false ); configuration.setResolveDependencies( true ); + sessionScope.seed( MavenSession.class, new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); try { return projectBuilder.build( pom, configuration ).getProject(); @@ -164,6 +177,10 @@ public abstract class AbstractMavenProjectTestCase { ProjectBuildingRequest configuration = newBuildingRequest(); + sessionScope.seed( MavenSession.class, new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); + return projectBuilder.build( pom, configuration ).getProject(); } @@ -174,6 +191,10 @@ public abstract class AbstractMavenProjectTestCase configuration.setLocalRepository( this.getLocalRepository() ); configuration.setRemoteRepositories( Arrays.asList( this.repositorySystem.createDefaultRemoteRepository() ) ); initRepoSession( configuration ); + + sessionScope.seed( MavenSession.class, new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); return projectBuilder.build( pom, configuration ).getProject(); } diff --git a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java index 008c6d3..fa3501a 100644 --- a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java @@ -28,12 +28,13 @@ import java.util.List; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenSession; import org.codehaus.plexus.util.FileUtils; public class DefaultMavenProjectBuilderTest extends AbstractMavenProjectTestCase { - private List<File> filesToDelete = new ArrayList<>(); private File localRepoDir; @@ -84,6 +85,11 @@ public class DefaultMavenProjectBuilderTest configuration.setLocalRepository( getLocalRepository() ); initRepoSession( configuration ); + getSessionScope().seed( MavenSession.class, + new MavenSession( getContainer(), + configuration.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); + return projectBuilder.build( pom, allowStub, configuration ).getProject(); } @@ -225,6 +231,10 @@ public class DefaultMavenProjectBuilderTest ProjectBuildingRequest request = newBuildingRequest(); request.setProcessPlugins( false ); request.setResolveDependencies( true ); + + getSessionScope().seed( MavenSession.class, new MavenSession( getContainer(), + request.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); projectBuilder.build( pomFile, request ); fail( "Project building did not fail despite invalid POM" ); } @@ -249,6 +259,10 @@ public class DefaultMavenProjectBuilderTest ProjectBuildingRequest request = newBuildingRequest(); request.setProcessPlugins( false ); request.setResolveDependencies( true ); + + getSessionScope().seed( MavenSession.class, new MavenSession( getContainer(), + request.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); projectBuilder.build( pomFile, request ); } diff --git a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java index 9e16ebc..a639a38 100644 --- a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java @@ -22,6 +22,7 @@ package org.apache.maven.project; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.lessThan; import static org.hamcrest.Matchers.startsWith; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThat; import java.io.File; @@ -32,19 +33,21 @@ import java.util.Map; import java.util.Properties; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.project.harness.PomTestWrapper; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.apache.maven.session.scope.internal.SessionScope; import org.codehaus.plexus.ContainerConfiguration; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusTestCase; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.repository.LocalRepository; -import static org.junit.Assert.assertNotEquals; public class PomConstructionTest extends PlexusTestCase @@ -58,6 +61,8 @@ public class PomConstructionTest private DefaultProjectBuilder projectBuilder; private RepositorySystem repositorySystem; + + private SessionScope sessionScope; private File testDirectory; @@ -76,6 +81,8 @@ public class PomConstructionTest new File( getBasedir(), BASE_MIXIN_DIR ); projectBuilder = (DefaultProjectBuilder) lookup( ProjectBuilder.class ); repositorySystem = lookup( RepositorySystem.class ); + sessionScope = lookup( SessionScope.class ); + sessionScope.enter(); } @Override @@ -83,6 +90,7 @@ public class PomConstructionTest throws Exception { projectBuilder = null; + sessionScope.exit(); super.tearDown(); } @@ -1873,6 +1881,10 @@ public class PomConstructionTest LocalRepository localRepo = new LocalRepository( config.getLocalRepository().getBasedir() ); repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repoSession, localRepo ) ); config.setRepositorySession( repoSession ); + + sessionScope.seed( MavenSession.class, new MavenSession( getContainer(), + config.getRepositorySession(), + new DefaultMavenExecutionRequest(), null ) ); return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ).getProject() ); } diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java index 4833b00..efa8a4c 100644 --- a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java @@ -37,6 +37,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.model.building.FileModelSource; import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.model.building.ModelSource; +import org.apache.maven.session.scope.internal.SessionScope; import org.apache.maven.shared.utils.io.FileUtils; import com.google.common.io.Files; @@ -75,9 +76,16 @@ public class ProjectBuilderTest ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest(); configuration.setRepositorySession( mavenSession.getRepositorySession() ); ModelSource modelSource = new FileModelSource( pomFile ); + + SessionScope sessionScope = lookup( SessionScope.class ); + sessionScope.enter(); + sessionScope.seed( MavenSession.class, mavenSession ); + ProjectBuildingResult result = lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration ); + sessionScope.exit(); + assertNotNull( result.getProject().getParentFile() ); } diff --git a/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java b/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java index 0e054c6..75da311 100644 --- a/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java +++ b/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java @@ -103,14 +103,14 @@ public class TestRepositorySystem public ArtifactRepository createDefaultLocalRepository() throws InvalidRepositoryException { - return createLocalRepository( new File( System.getProperty( "basedir", "" ), "target/local-repo" ).getAbsoluteFile() ); + return createLocalRepository( new File( System.getProperty( "basedir", "." ), "target/local-repo" ).getAbsoluteFile() ); } public ArtifactRepository createDefaultRemoteRepository() throws InvalidRepositoryException { return new MavenArtifactRepository( DEFAULT_REMOTE_REPO_ID, "file://" - + new File( System.getProperty( "basedir", "" ), "src/test/remote-repo" ).toURI().getPath(), + + new File( System.getProperty( "basedir", "." ), "src/test/remote-repo" ).getAbsoluteFile().toURI().getPath(), new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(), new ArtifactRepositoryPolicy() ); } diff --git a/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java b/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java index 78d0da8..eb6270b 100644 --- a/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java +++ b/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java @@ -19,7 +19,14 @@ package org.apache.maven.settings; * under the License. */ +import java.io.File; +import java.io.IOException; +import java.io.Reader; + import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Profile; import org.apache.maven.project.DefaultProjectBuilder; import org.apache.maven.project.DefaultProjectBuildingRequest; @@ -28,6 +35,7 @@ import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.harness.PomTestWrapper; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.apache.maven.session.scope.internal.SessionScope; import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader; import org.codehaus.plexus.ContainerConfiguration; import org.codehaus.plexus.PlexusConstants; @@ -38,10 +46,6 @@ import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.repository.LocalRepository; -import java.io.File; -import java.io.IOException; -import java.io.Reader; - public class PomConstructionWithSettingsTest extends PlexusTestCase { @@ -52,9 +56,11 @@ public class PomConstructionWithSettingsTest private DefaultProjectBuilder projectBuilder; private RepositorySystem repositorySystem; + + private SessionScope sessionScope; private File testDirectory; - + @Override protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) { @@ -69,6 +75,7 @@ public class PomConstructionWithSettingsTest testDirectory = new File( getBasedir(), BASE_POM_DIR ); projectBuilder = (DefaultProjectBuilder) lookup( ProjectBuilder.class ); repositorySystem = lookup( RepositorySystem.class ); + sessionScope = lookup( SessionScope.class ); } @Override @@ -94,6 +101,7 @@ public class PomConstructionWithSettingsTest throws Exception { PomTestWrapper pom = buildPom( "test-pom-and-settings-interpolation" ); + assertEquals( "applied", pom.getValue( "properties/settingsProfile" ) ); assertEquals( "applied", pom.getValue( "properties/pomProfile" ) ); assertEquals( "settings", pom.getValue( "properties/pomVsSettings" ) ); @@ -138,6 +146,15 @@ public class PomConstructionWithSettingsTest repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repoSession, localRepo ) ); config.setRepositorySession( repoSession ); + + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + request.setActiveProfiles( settings.getActiveProfiles() ); + + sessionScope.enter(); + sessionScope.seed( MavenSession.class, + new MavenSession( getContainer(), + repoSession, + new DefaultMavenExecutionRequest(), null ) ); return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ).getProject() ); } diff --git a/maven-model-builder/src/main/java/org/apache/maven/feature/Features.java b/maven-model-builder/src/main/java/org/apache/maven/feature/Features.java index d4461d8..48848c9 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/feature/Features.java +++ b/maven-model-builder/src/main/java/org/apache/maven/feature/Features.java @@ -31,7 +31,7 @@ public final class Features { } - private static final Feature BUILDCONSUMER = new Feature( "maven.experimental.buildconsumer", "false" ); + private static final Feature BUILDCONSUMER = new Feature( "maven.experimental.buildconsumer", "true" ); public static Feature buildConsumer() { diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java index 6d2bb7e..fe3904b 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java @@ -23,6 +23,8 @@ import static org.apache.maven.model.building.Result.error; import static org.apache.maven.model.building.Result.newResult; import java.io.File; +import java.io.FileInputStream; +import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PipedInputStream; @@ -36,10 +38,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Properties; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import javax.inject.Inject; import javax.inject.Named; @@ -54,7 +52,6 @@ import javax.xml.transform.stream.StreamResult; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; -import org.apache.maven.building.FileSource; import org.apache.maven.feature.Features; import org.apache.maven.model.Activation; import org.apache.maven.model.Build; @@ -304,6 +301,20 @@ public class DefaultModelBuilder if ( inputModel == null ) { inputModel = readModel( request.getModelSource(), request.getPomFile(), request, problems ); + + if ( Features.buildConsumer().isActive() && request.isTransformPom() ) + { + try + { + inputModel = modelProcessor.read( transformData( request.getPomFile() ), null ); + + inputModel.setPomFile( request.getPomFile() ); + } + catch ( IOException | TransformerException | SAXException | ParserConfigurationException e ) + { + problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V37 ).setException( e ) ); + } + } } problems.setRootModel( inputModel ); @@ -763,78 +774,80 @@ public class DefaultModelBuilder private void assembleInheritance( List<ModelData> lineage, ModelBuildingRequest request, ModelProblemCollector problems ) { - for ( int i = lineage.size() - 2; i >= 1; i-- ) + for ( int i = lineage.size() - 2; i >= 0; i-- ) { Model parent = lineage.get( i + 1 ).getModel(); Model child = lineage.get( i ).getModel(); inheritanceAssembler.assembleModelInheritance( child, parent, request, problems ); } - - // re-read model from file - if ( Features.buildConsumer().isActive() && request.isTransformPom() ) - { - try - { - Model parent = lineage.get( 1 ).getModel(); - - Model child = modelProcessor.read( transformData( lineage.get( 0 ) ), null ); - inheritanceAssembler.assembleModelInheritance( child, parent, request, problems ); - - // sync pomfile, is transient - child.setPomFile( lineage.get( 0 ).getModel().getPomFile() ); - // overwrite child - lineage.get( 0 ).setModel( child ); - } - catch ( IOException | TransformerException | SAXException | ParserConfigurationException e ) - { - problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V37 ).setException( e ) ); - } - } - else - { - Model parent = lineage.get( 1 ).getModel(); - Model child = lineage.get( 0 ).getModel(); - inheritanceAssembler.assembleModelInheritance( child, parent, request, problems ); - } } - private InputStream transformData( ModelData modelData ) + private InputStream transformData( File pomFile ) throws IOException, TransformerException, SAXException, ParserConfigurationException { +// return modelData.getSource().getInputStream(); final TransformerFactory transformerFactory = Factories.newTransformerFactory() ; final PipedOutputStream pipedOutputStream = new PipedOutputStream(); final PipedInputStream pipedInputStream = new PipedInputStream( pipedOutputStream ); // Should always be FileSource for reactor poms - FileSource source = (FileSource) modelData.getSource(); +// FileSource source = (FileSource) modelData.getSource(); - // System.out.println( "transforming " + source.getFile() ); +// System.out.println( "transforming " + source.getFile() ); final SAXSource transformSource = - new SAXSource( buildPomXMLFilterFactory.get().get( source.getFile().toPath() ), - new org.xml.sax.InputSource( modelData.getSource().getInputStream() ) ); - - final StreamResult result = new StreamResult( pipedOutputStream ); + new SAXSource( buildPomXMLFilterFactory.get().get( pomFile.toPath() ), + new org.xml.sax.InputSource( new FileInputStream( pomFile ) ) ); + + FilterOutputStream fos = new FilterOutputStream( pipedOutputStream ) + { + @Override + public void write( byte[] b, int off, int len ) + throws IOException + { + System.out.write( b, off, len ); + super.write( b, off, len ); + } + } + ; + final StreamResult result = new StreamResult( fos ); - final Callable<Void> callable = () -> +//// final Callable<Void> callable = () -> +//// { +//// try ( PipedOutputStream out = pipedOutputStream ) +//// { +//// transformerFactory.newTransformer().transform( transformSource, result ); +//// } +//// return null; +//// }; +//// +//// ExecutorService executorService = Executors.newSingleThreadExecutor(); +//// try +//// { +//// executorService.submit( callable ).get(); +//// } +//// catch ( InterruptedException | ExecutionException e ) +//// { +//// throw new TransformerException( "Failed to transform pom", e ); +//// } + final Runnable runnable = new Runnable() { - try ( PipedOutputStream out = pipedOutputStream ) + @Override + public void run() { - transformerFactory.newTransformer().transform( transformSource, result ); + try ( PipedOutputStream out = pipedOutputStream ) + { + transformerFactory.newTransformer().transform( transformSource, result ); + } + catch ( TransformerException | IOException e ) + { + throw new RuntimeException( e ); + } } - return null; }; - ExecutorService executorService = Executors.newSingleThreadExecutor(); - try - { - executorService.submit( callable ).get(); - } - catch ( InterruptedException | ExecutionException e ) - { - throw new TransformerException( "Failed to transform pom", e ); - } + new Thread( runnable ).start(); return pipedInputStream; } diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java index 3e07c57..bf6b088 100644 --- a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java +++ b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java @@ -22,6 +22,7 @@ package org.apache.maven.model.validation; import java.io.InputStream; import java.util.List; +import org.apache.maven.feature.Features; import org.apache.maven.model.Model; import org.apache.maven.model.building.DefaultModelBuildingRequest; import org.apache.maven.model.building.ModelBuildingRequest; @@ -415,11 +416,18 @@ public class DefaultModelValidatorTest { SimpleProblemCollector result = validateRaw( "incomplete-parent.xml" ); - assertViolations( result, 3, 0, 0 ); + if ( Features.buildConsumer().isActive() ) + { + assertViolations( result, 2, 0, 0 ); + } + else + { + assertViolations( result, 3, 0, 0 ); + assertTrue( result.getFatals().get( 2 ).contains( "parent.version" ) ); + } assertTrue( result.getFatals().get( 0 ).contains( "parent.groupId" ) ); assertTrue( result.getFatals().get( 1 ).contains( "parent.artifactId" ) ); - assertTrue( result.getFatals().get( 2 ).contains( "parent.version" ) ); } public void testHardCodedSystemPath() diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java index 633c533..e563032 100644 --- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java @@ -1,7 +1,5 @@ package org.apache.maven.xml.sax.filter; -import java.util.ArrayDeque; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -21,10 +19,8 @@ import java.util.ArrayDeque; * under the License. */ -import java.util.ArrayList; +import java.util.ArrayDeque; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Queue; @@ -142,7 +138,7 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter } // not with streams due to checked SAXException - while( !saxEvents.isEmpty() ) + while ( !saxEvents.isEmpty() ) { saxEvents.poll().execute(); } diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ParentXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ParentXMLFilter.java index 9cb6ff2..2531798 100644 --- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ParentXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ParentXMLFilter.java @@ -34,6 +34,8 @@ import org.xml.sax.SAXException; * <p> * Transforms relativePath to version. * We could decide to simply allow {@code <parent/>}, but let's require the GA for now for checking + * This filter does NOT remove the relativePath (which is done by {@link RelativePathXMLFilter}, it will only + * optionally include the version based on the path * </p> * * @author Robert Scholte @@ -87,12 +89,6 @@ class ParentXMLFilter { return state; } - - @Override - protected boolean acceptEvent( String eventState ) - { - return !( "relativePath".equals( eventState ) && resolvedParent.isPresent() ); - } @Override public void startElement( String uri, final String localName, String qName, Attributes atts ) diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java index 8f25c10..f98f4dd 100644 --- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java +++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java @@ -99,6 +99,7 @@ public class ParentXMLFilterTest extends AbstractXMLFilterTests String expected = "<parent>" + "<groupId>GROUPID</groupId>" + "<artifactId>ARTIFACTID</artifactId>" + + "<relativePath>RELATIVEPATH</relativePath>" + "<version>1.0.0</version>" + "</parent>"; @@ -137,6 +138,7 @@ public class ParentXMLFilterTest extends AbstractXMLFilterTests String expected = "<parent>" + "<groupId>GROUPID</groupId>" + "<artifactId>ARTIFACTID</artifactId>" + + "<relativePath>RELATIVEPATH</relativePath>" + "<version>1.0.0</version>" + "</parent>"; @@ -156,6 +158,7 @@ public class ParentXMLFilterTest extends AbstractXMLFilterTests String expected = "<relativePath:parent xmlns:relativePath=\"relativePath\">" + "<relativePath:groupId>GROUPID</relativePath:groupId>" + "<relativePath:artifactId>ARTIFACTID</relativePath:artifactId>" + + "<relativePath:relativePath>RELATIVEPATH</relativePath:relativePath>" + "<relativePath:version>1.0.0</relativePath:version>" + "</relativePath:parent>";
