From d17ea03bcd78c977dc613593c5616d96246706da Mon Sep 17 00:00:00 2001 From: Christian Schulte Date: Thu, 18 Dec 2014 02:37:09 +0100 Subject: [PATCH] [MNG-5738] Updated to add command line option '--legacy-reactor-resolution' to allow disabling workspace resolution introduced in Maven 3 as discussed at MPIR-238. --- .../java/org/apache/maven/DefaultMaven.java | 39 +++++++++++-------- .../DefaultMavenExecutionRequest.java | 17 ++++++++ .../execution/MavenExecutionRequest.java | 10 +++++ ...DefaultRepositorySystemSessionFactory.java | 7 +++- .../java/org/apache/maven/cli/CLIManager.java | 3 ++ .../java/org/apache/maven/cli/MavenCli.java | 11 ++++++ 6 files changed, 69 insertions(+), 18 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index 94e75e02ff41..ad225c1fb634 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -234,25 +234,30 @@ private MavenExecutionResult doExecute( MavenExecutionRequest request, MavenSess return addExceptionToResult( result, e ); } - WorkspaceReader reactorWorkspace; - try - { - reactorWorkspace = container.lookup( WorkspaceReader.class, ReactorReader.HINT ); - } - catch ( ComponentLookupException e ) + // As of Maven 3.3.0, workspace resolution can be disabled. See MNG-5738. + if ( !request.isUseLegacyReactorResolution() ) { - return addExceptionToResult( result, e ); - } + WorkspaceReader reactorWorkspace; + try + { + reactorWorkspace = container.lookup( WorkspaceReader.class, ReactorReader.HINT ); + } + catch ( ComponentLookupException e ) + { + return addExceptionToResult( result, e ); + } - // - // Desired order of precedence for local artifact repositories - // - // Reactor - // Workspace - // User Local Repository - // - repoSession.setWorkspaceReader( ChainedWorkspaceReader.newInstance( reactorWorkspace, - repoSession.getWorkspaceReader() ) ); + // + // Desired order of precedence for local artifact repositories + // + // Reactor + // Workspace + // User Local Repository + // + repoSession.setWorkspaceReader( ChainedWorkspaceReader.newInstance( reactorWorkspace, + repoSession.getWorkspaceReader() ) ); + + } repoSession.setReadOnly(); diff --git a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java index e5509dcac1fc..98efa4f57004 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java @@ -163,6 +163,9 @@ public class DefaultMavenExecutionRequest private Map data; + /** @since 3.3.0 */ + private boolean useLegacyReactorResolution = false; + public DefaultMavenExecutionRequest() { } @@ -207,6 +210,7 @@ public static MavenExecutionRequest copy( MavenExecutionRequest original ) copy.setNoSnapshotUpdates( original.isNoSnapshotUpdates() ); copy.setExecutionListener( original.getExecutionListener() ); copy.setUseLegacyLocalRepository( original.isUseLegacyLocalRepository() ); + copy.setUseLegacyReactorResolution( original.isUseLegacyReactorResolution() ); copy.setBuilderId( original.getBuilderId() ); return copy; } @@ -1232,6 +1236,19 @@ public MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocal } @Override + /** @since 3.3.0 */ + public boolean isUseLegacyReactorResolution() + { + return this.useLegacyReactorResolution; + } + + /** @since 3.3.0 */ + public MavenExecutionRequest setUseLegacyReactorResolution( boolean value ) + { + this.useLegacyReactorResolution = value; + return this; + } + public MavenExecutionRequest setBuilderId( String builderId ) { this.builderId = builderId; diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java index 53f84c509240..8b02598bc673 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java @@ -387,6 +387,16 @@ public interface MavenExecutionRequest */ MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocalRepository ); + /** + * @since 3.3.0 + */ + boolean isUseLegacyReactorResolution(); + + /** + * @since 3.3.0 + */ + MavenExecutionRequest setUseLegacyReactorResolution( boolean value ); + /** * Controls the {@link Builder} used by Maven by specification of the builder's id. * diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index 6197f0f25201..d071198a6149 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -148,7 +148,12 @@ else if ( request.isUpdateSnapshots() ) session.setLocalRepositoryManager( repoSystem.newLocalRepositoryManager( session, localRepo ) ); } - if ( request.getWorkspaceReader() != null ) + // As of Maven 3.3.0, workspace resolution can be disabled. See MNG-5738. + if ( request.isUseLegacyReactorResolution() ) + { + session.setWorkspaceReader( null ); + } + else if ( request.getWorkspaceReader() != null ) { session.setWorkspaceReader( request.getWorkspaceReader() ); } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java index a78e11dcc9e2..798e5915c49d 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java @@ -101,6 +101,8 @@ public class CLIManager public static final String LEGACY_LOCAL_REPOSITORY = "llr"; + public static final String LEGACY_REACTOR_RESOLUTION = "lrr"; + public static final String BUILDER = "b"; protected Options options; @@ -141,6 +143,7 @@ public CLIManager() options.addOption( OptionBuilder.withLongOpt( "encrypt-password" ).hasOptionalArg().withDescription( "Encrypt server password" ).create( ENCRYPT_PASSWORD ) ); options.addOption( OptionBuilder.withLongOpt( "threads" ).hasArg().withDescription( "Thread count, for instance 2.0C where C is core multiplied" ).create( THREADS ) ); options.addOption( OptionBuilder.withLongOpt( "legacy-local-repository" ).withDescription( "Use Maven 2 Legacy Local Repository behaviour, ie no use of _remote.repositories. Can also be activated by using -Dmaven.legacyLocalRepo=true" ).create( LEGACY_LOCAL_REPOSITORY ) ); + options.addOption( OptionBuilder.withLongOpt( "legacy-reactor-resolution" ).withDescription( "Use Maven 2 legacy reactor resolution behaviour, ie disable workspace resolution. Can also be activated by using -Dmaven.legacyReactorResolution=true" ).create( LEGACY_REACTOR_RESOLUTION ) ); options.addOption( OptionBuilder.withLongOpt( "builder" ).hasArg().withDescription( "The id of the build strategy to use." ).create( BUILDER ) ); // Adding this back in for compatibility with the verifier that hard codes this option. diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index ced883c235bb..972ec0b3a30e 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -272,6 +272,7 @@ public int doMain( CliRequest cliRequest ) populateRequest( cliRequest ); encryption( cliRequest ); repository( cliRequest ); + resolution( cliRequest ); return execute( cliRequest ); } catch ( ExitException e ) @@ -842,6 +843,16 @@ private void repository( CliRequest cliRequest ) } } + private void resolution( CliRequest cliRequest ) + throws Exception + { + if ( cliRequest.commandLine.hasOption( CLIManager.LEGACY_REACTOR_RESOLUTION ) + || Boolean.getBoolean( "maven.legacyReactorResolution" ) ) + { + cliRequest.request.setUseLegacyReactorResolution( true ); + } + } + private int execute( CliRequest cliRequest ) throws MavenExecutionRequestPopulationException { MavenExecutionRequest request = executionRequestPopulator.populateDefaults( cliRequest.request );