From d23716a0c901fd6c6e9626b61758584f82b4d08c Mon Sep 17 00:00:00 2001 From: rfscholte Date: Sun, 27 Oct 2019 20:05:25 +0100 Subject: [PATCH] Refactor code to improve separation of Maven APIs and Aether code. All transfer internal Maven3x implementations should not use (close to) any Maven Core code, only a few classes are allowed. --- pom.xml | 15 ++- .../internal/DefaultArtifactDeployer.java | 37 ++++++-- .../internal/Maven30ArtifactDeployer.java | 28 +++--- .../internal/Maven31ArtifactDeployer.java | 31 +++--- .../internal/MavenArtifactDeployer.java | 42 +++++++++ .../internal/DefaultArtifactInstaller.java | 44 ++++++--- .../internal/Maven30ArtifactInstaller.java | 46 +++------ .../internal/Maven31ArtifactInstaller.java | 39 ++------ .../internal/MavenArtifactInstaller.java | 36 +++++++ .../internal/DefaultArtifactResolver.java | 56 +++++++++-- .../internal/Maven30ArtifactResolver.java | 45 ++++----- .../internal/Maven31ArtifactResolver.java | 47 ++++------ .../internal/MavenArtifactResolver.java | 38 ++++++++ .../internal/DefaultDependencyCollector.java | 54 ++++++++++- .../internal/Maven30DependencyCollector.java | 49 +++++----- .../internal/Maven31DependencyCollector.java | 48 +++++----- .../internal/MavenDependencyCollector.java | 44 +++++++++ .../internal/DefaultDependencyResolver.java | 65 +++++++++---- .../internal/Maven30DependencyResolver.java | 63 +++++-------- .../internal/Maven31DependencyResolver.java | 61 +++++------- .../internal/MavenDependencyResolver.java | 51 ++++++++++ .../internal/DefaultRepositoryManager.java | 94 ++++++++++--------- .../internal/Maven302RepositoryManager.java | 9 +- .../internal/Maven30RepositoryManager.java | 65 +++---------- .../internal/Maven31RepositoryManager.java | 67 +++---------- .../internal/MavenRepositoryManager.java | 67 +++++++++++++ .../Maven30ArtifactInstallerTest.java | 9 +- .../Maven30RepositoryManagerTest.java | 12 ++- 28 files changed, 778 insertions(+), 484 deletions(-) create mode 100644 src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java create mode 100644 src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java create mode 100644 src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java create mode 100644 src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java create mode 100644 src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java create mode 100644 src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java diff --git a/pom.xml b/pom.xml index 85114335..0b26abdf 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,10 @@ scm:svn:https://svn.apache.org/repos/asf/maven/website/components/${maven.site.path} + + + 7 + @@ -83,7 +87,7 @@ org.codehaus.mojo animal-sniffer-maven-plugin - 1.15 + 1.18 sniff @@ -94,10 +98,13 @@ + + java.lang.invoke.MethodHandle + org.codehaus.mojo.signature - java16 - 1.1 + java17 + 1.0 @@ -110,7 +117,7 @@ - 1.6 + 1.${javaVersion} diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java index 345e85d7..c6f2858a 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java @@ -52,11 +52,7 @@ public void deploy( ProjectBuildingRequest request, Collection mavenAr try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint ); - - effectiveArtifactDeployer.deploy( request, mavenArtifacts ); + getMavenArtifactDeployer( request ).deploy( mavenArtifacts ); } catch ( ComponentLookupException e ) { @@ -72,11 +68,7 @@ public void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRep validateParameters( request, mavenArtifacts ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint ); - - effectiveArtifactDeployer.deploy( request, remoteRepository, mavenArtifacts ); + getMavenArtifactDeployer( request ).deploy( remoteRepository, mavenArtifacts ); } catch ( ComponentLookupException e ) { @@ -133,4 +125,29 @@ public void contextualize( Context context ) { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } + + private MavenArtifactDeployer getMavenArtifactDeployer( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, ArtifactDeployerException + { + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem repositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); + + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven31ArtifactDeployer( repositorySystem, session ); + } + else + { + org.sonatype.aether.RepositorySystem repositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven30ArtifactDeployer( repositorySystem, session ); + } + } } diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java index 83cc6a2c..0f5908dd 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java @@ -25,13 +25,9 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.artifact.ProjectArtifactMetadata; -import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer; import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException; import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; @@ -43,33 +39,35 @@ /** * */ -@Component( role = ArtifactDeployer.class, hint = "maven3" ) class Maven30ArtifactDeployer - implements ArtifactDeployer + implements MavenArtifactDeployer { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; + + private final RepositorySystemSession session; + + Maven30ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session ) + { + this.repositorySystem = repositorySystem; + this.session = session; + } @Override - public void deploy( ProjectBuildingRequest buildingRequest, - Collection mavenArtifacts ) + public void deploy( Collection mavenArtifacts ) throws ArtifactDeployerException { - deploy( buildingRequest, null, mavenArtifacts ); + deploy( null, mavenArtifacts ); } @Override - public void deploy( ProjectBuildingRequest buildingRequest, ArtifactRepository remoteRepository, + public void deploy( ArtifactRepository remoteRepository, Collection mavenArtifacts ) throws ArtifactDeployerException { // prepare request DeployRequest request = new DeployRequest(); - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - RemoteRepository defaultRepository = null; if ( remoteRepository != null ) diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java index 71594de6..1a2b640e 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java @@ -25,13 +25,9 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.artifact.ProjectArtifactMetadata; -import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer; import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException; import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -43,33 +39,36 @@ /** * */ -@Component( role = ArtifactDeployer.class, hint = "maven31" ) class Maven31ArtifactDeployer - implements ArtifactDeployer + implements MavenArtifactDeployer { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; + + private final RepositorySystemSession session; + + Maven31ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session ) + { + super(); + this.repositorySystem = repositorySystem; + this.session = session; + } @Override - public void deploy( ProjectBuildingRequest buildingRequest, - Collection mavenArtifacts ) + public void deploy( Collection mavenArtifacts ) throws ArtifactDeployerException { - deploy( buildingRequest, null, mavenArtifacts ); + deploy( null, mavenArtifacts ); } - /** {@inheritDoc} */ - public void deploy( ProjectBuildingRequest buildingRequest, ArtifactRepository remoteRepository, + @Override + public void deploy( ArtifactRepository remoteRepository, Collection mavenArtifacts ) throws ArtifactDeployerException { // prepare request DeployRequest request = new DeployRequest(); - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - RemoteRepository defaultRepository = null; if ( remoteRepository != null ) diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java new file mode 100644 index 00000000..c4f04463 --- /dev/null +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java @@ -0,0 +1,42 @@ +package org.apache.maven.shared.transfer.artifact.deploy.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Collection; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException; + +/** + * + * @author Robert Scholte + * + */ +public interface MavenArtifactDeployer +{ + + void deploy( Collection mavenArtifacts ) + throws ArtifactDeployerException; + + void deploy( ArtifactRepository remoteRepository, Collection mavenArtifacts ) + throws ArtifactDeployerException; + +} diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java index 574d2089..f8a56f79 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java @@ -26,6 +26,7 @@ import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller; import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException; +import org.apache.maven.shared.transfer.repository.RepositoryManager; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; @@ -41,8 +42,9 @@ class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable { - private PlexusContainer container; + + private RepositoryManager repositoryManager; @Override public void install( ProjectBuildingRequest request, Collection mavenArtifacts ) @@ -51,11 +53,7 @@ public void install( ProjectBuildingRequest request, Collection mavenA validateParameters( request, mavenArtifacts ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactInstaller effectiveArtifactInstaller = container.lookup( ArtifactInstaller.class, hint ); - - effectiveArtifactInstaller.install( request, mavenArtifacts ); + getMavenArtifactInstaller( request ).install( mavenArtifacts ); } catch ( ComponentLookupException e ) { @@ -78,14 +76,13 @@ public void install( ProjectBuildingRequest request, File localRepositry, Collec } // TODO: Should we check for exists() ? + + // update local repo in request + ProjectBuildingRequest newRequest = repositoryManager.setLocalRepositoryBasedir( request, localRepositry ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactInstaller effectiveArtifactInstaller = container.lookup( ArtifactInstaller.class, hint ); - - effectiveArtifactInstaller.install( request, localRepositry, mavenArtifacts ); + getMavenArtifactInstaller( newRequest ).install( mavenArtifacts ); } catch ( ComponentLookupException e ) { @@ -142,4 +139,29 @@ public void contextualize( Context context ) { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } + + private MavenArtifactInstaller getMavenArtifactInstaller( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, ArtifactInstallerException + { + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem repositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); + + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven31ArtifactInstaller( repositorySystem, session ); + } + else + { + org.sonatype.aether.RepositorySystem repositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven30ArtifactInstaller( repositorySystem, session ); + } + } } diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java index 260beecb..2a15dfdd 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java @@ -19,20 +19,14 @@ * under the License. */ -import java.io.File; import java.util.Collection; import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.artifact.ProjectArtifactMetadata; -import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller; import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException; import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge; -import org.apache.maven.shared.transfer.repository.RepositoryManager; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; @@ -43,30 +37,24 @@ /** * */ -@Component( role = ArtifactInstaller.class, hint = "maven3" ) class Maven30ArtifactInstaller - implements ArtifactInstaller + implements MavenArtifactInstaller { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private RepositoryManager repositoryManager; - - @Override - public void install( ProjectBuildingRequest buildingRequest, - Collection mavenArtifacts ) - throws ArtifactInstallerException + private final RepositorySystemSession session; + + Maven30ArtifactInstaller( RepositorySystem repositorySystem, RepositorySystemSession session ) { - install( buildingRequest, null, mavenArtifacts ); + this.repositorySystem = repositorySystem; + this.session = session; } - + @Override - public void install( ProjectBuildingRequest buildingRequest, File localRepository, - Collection mavenArtifacts ) - throws ArtifactInstallerException + public void install( Collection mavenArtifacts ) + throws ArtifactInstallerException { - // prepare installRequest + // prepare installRequest InstallRequest request = new InstallRequest(); // transform artifacts @@ -100,14 +88,10 @@ else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.Artifact } } - if ( localRepository != null ) - { - buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository ); - } - - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - +// if ( localRepository != null ) +// { +// buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository ); +// } // install try diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java index d922b975..e4eae744 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java @@ -19,20 +19,14 @@ * under the License. */ -import java.io.File; import java.util.Collection; import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.artifact.ProjectArtifactMetadata; -import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller; import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException; import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge; -import org.apache.maven.shared.transfer.repository.RepositoryManager; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -43,27 +37,22 @@ /** * */ -@Component( role = ArtifactInstaller.class, hint = "maven31" ) class Maven31ArtifactInstaller - implements ArtifactInstaller + implements MavenArtifactInstaller { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private RepositoryManager repositoryManager; - - @Override - public void install( ProjectBuildingRequest buildingRequest, - Collection mavenArtifacts ) - throws ArtifactInstallerException + private final RepositorySystemSession session; + + Maven31ArtifactInstaller( RepositorySystem repositorySystem, + RepositorySystemSession session ) { - install( buildingRequest, null, mavenArtifacts ); + this.repositorySystem = repositorySystem; + this.session = session; } - + @Override - public void install( ProjectBuildingRequest buildingRequest, File localRepository, - Collection mavenArtifacts ) + public void install( Collection mavenArtifacts ) throws ArtifactInstallerException { // prepare installRequest @@ -100,14 +89,6 @@ else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.Artifact } } - if ( localRepository != null ) - { - buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository ); - } - - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - // install try { diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java new file mode 100644 index 00000000..7670d574 --- /dev/null +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java @@ -0,0 +1,36 @@ +package org.apache.maven.shared.transfer.artifact.install.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Collection; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException; + +/** + * + * @author Robert Scholte + * + */ +public interface MavenArtifactInstaller +{ + void install( Collection mavenArtifacts ) + throws ArtifactInstallerException; +} diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java index ae709a5e..9f1826bd 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java @@ -19,6 +19,9 @@ * under the License. */ +import java.util.List; + +import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; @@ -33,6 +36,7 @@ import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; + /** * */ @@ -49,11 +53,7 @@ public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, A validateParameters( buildingRequest, mavenArtifact ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint ); - - return effectiveArtifactResolver.resolveArtifact( buildingRequest, mavenArtifact ); + return getMavenArtifactResolver( buildingRequest ).resolveArtifact( mavenArtifact ); } catch ( ComponentLookupException e ) { @@ -68,11 +68,7 @@ public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, A validateParameters( buildingRequest, coordinate ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint ); - - return effectiveArtifactResolver.resolveArtifact( buildingRequest, coordinate ); + return getMavenArtifactResolver( buildingRequest ).resolveArtifact( coordinate ); } catch ( ComponentLookupException e ) { @@ -137,4 +133,44 @@ public void contextualize( Context context ) { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } + + private MavenArtifactResolver getMavenArtifactResolver( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, ArtifactResolverException + { + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem repositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); + + @SuppressWarnings( "unchecked" ) + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, "toRepos", + List.class, + buildingRequest.getRemoteRepositories() ); + + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven31ArtifactResolver( repositorySystem, aetherRepositories, session ); + + } + else + { + org.sonatype.aether.RepositorySystem repositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + @SuppressWarnings( "unchecked" ) + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, + "toRepos", List.class, + buildingRequest.getRemoteRepositories() ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven30ArtifactResolver( repositorySystem, aetherRepositories, session ); + } + + + } } diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java index f81b2431..e5f820c9 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java @@ -22,13 +22,8 @@ import java.util.List; import org.apache.maven.RepositoryUtils; -import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; -import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver; import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; @@ -43,33 +38,38 @@ /** * */ -@Component( role = ArtifactResolver.class, hint = "maven3" ) class Maven30ArtifactResolver - implements ArtifactResolver + implements MavenArtifactResolver { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final List aetherRepositories; + + private final RepositorySystemSession session; + + Maven30ArtifactResolver( RepositorySystem repositorySystem, List aetherRepositories, + RepositorySystemSession session ) + { + this.repositorySystem = repositorySystem; + this.aetherRepositories = aetherRepositories; + this.session = session; + } @Override // CHECKSTYLE_OFF: LineLength - public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact ) + public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, mavenArtifact ); - return resolveArtifact( buildingRequest, aetherArtifact ); + return resolveArtifact( aetherArtifact ); } @Override // CHECKSTYLE_OFF: LineLength - public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - ArtifactCoordinate coordinate ) + public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { @@ -77,23 +77,14 @@ public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveA new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(), coordinate.getExtension(), coordinate.getVersion() ); - return resolveArtifact( buildingRequest, aetherArtifact ); + return resolveArtifact( aetherArtifact ); } // CHECKSTYLE_OFF: LineLength - private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - Artifact aetherArtifact ) + private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { - @SuppressWarnings( "unchecked" ) - List aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - try { // use descriptor to respect relocation diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java index 56e45199..888a6837 100644 --- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java @@ -22,13 +22,8 @@ import java.util.List; import org.apache.maven.RepositoryUtils; -import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; -import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver; import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -43,33 +38,38 @@ /** * */ -@Component( role = ArtifactResolver.class, hint = "maven31" ) class Maven31ArtifactResolver - implements ArtifactResolver + implements MavenArtifactResolver { - @Requirement - private RepositorySystem repositorySystem; - - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final RepositorySystem repositorySystem; + + private final List aetherRepositories; + + private final RepositorySystemSession session; + + Maven31ArtifactResolver( RepositorySystem repositorySystem, List aetherRepositories, + RepositorySystemSession session ) + { + this.repositorySystem = repositorySystem; + this.aetherRepositories = aetherRepositories; + this.session = session; + } @Override // CHECKSTYLE_OFF: LineLength - public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact ) + public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, mavenArtifact ); - return resolveArtifact( buildingRequest, aetherArtifact ); + return resolveArtifact( aetherArtifact ); } @Override // CHECKSTYLE_OFF: LineLength - public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - ArtifactCoordinate coordinate ) + public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { @@ -77,23 +77,14 @@ public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveA new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(), coordinate.getExtension(), coordinate.getVersion() ); - return resolveArtifact( buildingRequest, aetherArtifact ); + return resolveArtifact( aetherArtifact ); } // CHECKSTYLE_OFF: LineLength - private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, - Artifact aetherArtifact ) + private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact ) throws ArtifactResolverException // CHECKSTYLE_ON: LineLength { - @SuppressWarnings( "unchecked" ) - List aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - try { // use descriptor to respect relocation diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java new file mode 100644 index 00000000..2e9fb742 --- /dev/null +++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java @@ -0,0 +1,38 @@ +package org.apache.maven.shared.transfer.artifact.resolve.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; +import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException; +import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult; + +/** + * + * @author Robert Scholte + * + */ +public interface MavenArtifactResolver +{ + ArtifactResult resolveArtifact( Artifact mavenArtifact ) throws ArtifactResolverException; + + ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException; + +} diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java index 863c3262..99047313 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java @@ -19,6 +19,10 @@ * under the License. */ +import java.util.List; + +import org.apache.maven.RepositoryUtils; +import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.project.ProjectBuildingRequest; @@ -72,11 +76,7 @@ public CollectorResult collectDependencies( ProjectBuildingRequest buildingReque try { - String hint = isMaven31() ? "maven31" : "maven3"; - - DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint ); - - return effectiveDependencyCollector.collectDependencies( buildingRequest, root ); + return getMavenDependencyCollector( buildingRequest ).collectDependencies( root ); } catch ( ComponentLookupException e ) { @@ -172,5 +172,49 @@ public void contextualize( Context context ) { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } + + private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, DependencyCollectorException + { + ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class ); + + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem m31RepositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); + + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + @SuppressWarnings( "unchecked" ) + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, "toRepos", + List.class, + buildingRequest.getRemoteRepositories() ); + + return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session, + aetherRepositories ); + + } + else + { + + org.sonatype.aether.RepositorySystem m30RepositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + @SuppressWarnings( "unchecked" ) + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, + "toRepos", List.class, + buildingRequest.getRemoteRepositories() ); + + return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session, + aetherRepositories ); + } + + } } diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java index a1abb8cd..4b4eaf29 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java @@ -26,13 +26,11 @@ import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.Model; -import org.apache.maven.project.ProjectBuildingRequest; + import org.apache.maven.shared.transfer.dependencies.DependableCoordinate; import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult; import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector; import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; @@ -49,19 +47,29 @@ * @author Robert Scholte * */ -@Component( role = DependencyCollector.class, hint = "maven3" ) class Maven30DependencyCollector - implements DependencyCollector + implements MavenDependencyCollector { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final ArtifactHandlerManager artifactHandlerManager; + + private final RepositorySystemSession session; + + private final List aetherRepositories; + + Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager, + RepositorySystemSession session, List aetherRepositories ) + { + super(); + this.repositorySystem = repositorySystem; + this.artifactHandlerManager = artifactHandlerManager; + this.session = session; + this.aetherRepositories = aetherRepositories; + } @Override - public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, - org.apache.maven.model.Dependency root ) + public CollectorResult collectDependencies( org.apache.maven.model.Dependency root ) throws DependencyCollectorException { ArtifactTypeRegistry typeRegistry = @@ -71,11 +79,11 @@ public CollectorResult collectDependencies( final ProjectBuildingRequest buildin CollectRequest request = new CollectRequest(); request.setRoot( toDependency( root, typeRegistry ) ); - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } @Override - public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root ) + public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException { ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() ); @@ -88,11 +96,11 @@ public CollectorResult collectDependencies( ProjectBuildingRequest buildingReque CollectRequest request = new CollectRequest(); request.setRoot( new Dependency( aetherArtifact, null ) ); - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } @Override - public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root ) + public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException { // Are there examples where packaging and type are NOT in sync @@ -130,19 +138,12 @@ public CollectorResult collectDependencies( ProjectBuildingRequest buildingReque request.setManagedDependencies( aetherManagerDependencies ); } - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } - private CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, CollectRequest request ) + private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException { - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - - @SuppressWarnings( "unchecked" ) - List aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); request.setRepositories( aetherRepositories ); try diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java index cc4430d0..0ee03857 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java @@ -26,13 +26,10 @@ import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.Model; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.dependencies.DependableCoordinate; import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult; import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector; import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -49,19 +46,29 @@ * @author Robert Scholte * */ -@Component( role = DependencyCollector.class, hint = "maven31" ) class Maven31DependencyCollector - implements DependencyCollector + implements MavenDependencyCollector { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final ArtifactHandlerManager artifactHandlerManager; + + private final RepositorySystemSession session; + + private final List aetherRepositories; + + Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager, + RepositorySystemSession session, List aetherRepositories ) + { + super(); + this.repositorySystem = repositorySystem; + this.artifactHandlerManager = artifactHandlerManager; + this.session = session; + this.aetherRepositories = aetherRepositories; + } @Override - public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, - org.apache.maven.model.Dependency root ) + public CollectorResult collectDependencies( org.apache.maven.model.Dependency root ) throws DependencyCollectorException { ArtifactTypeRegistry typeRegistry = @@ -71,11 +78,11 @@ public CollectorResult collectDependencies( final ProjectBuildingRequest buildin CollectRequest request = new CollectRequest(); request.setRoot( toDependency( root, typeRegistry ) ); - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } @Override - public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root ) + public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException { ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() ); @@ -88,11 +95,11 @@ public CollectorResult collectDependencies( ProjectBuildingRequest buildingReque CollectRequest request = new CollectRequest(); request.setRoot( new Dependency( aetherArtifact, null ) ); - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } @Override - public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root ) + public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException { // Are there examples where packaging and type are NOT in sync @@ -130,19 +137,12 @@ public CollectorResult collectDependencies( ProjectBuildingRequest buildingReque request.setManagedDependencies( aetherManagerDependencies ); } - return collectDependencies( buildingRequest, request ); + return collectDependencies( request ); } - private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, CollectRequest request ) + private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException { - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - - @SuppressWarnings( "unchecked" ) - List aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); request.setRepositories( aetherRepositories ); try diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java new file mode 100644 index 00000000..53823f8f --- /dev/null +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java @@ -0,0 +1,44 @@ +package org.apache.maven.shared.transfer.dependencies.collect.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; +import org.apache.maven.shared.transfer.dependencies.DependableCoordinate; +import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult; +import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException; + +/** + * + * @author Robert Scholte + */ +public interface MavenDependencyCollector +{ + + CollectorResult collectDependencies( Dependency root ) + throws DependencyCollectorException; + + CollectorResult collectDependencies( DependableCoordinate root ) + throws DependencyCollectorException; + + CollectorResult collectDependencies( Model root ) + throws DependencyCollectorException; + +} diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java index 2c1d7ea8..f3a6866e 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java @@ -20,7 +20,10 @@ */ import java.util.Collection; +import java.util.List; +import org.apache.maven.RepositoryUtils; +import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.project.ProjectBuildingRequest; @@ -57,12 +60,8 @@ public Iterable resolveDependencies( ProjectBuildingRequest buil try { - String hint = isMaven31() ? "maven31" : "maven3"; - - DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint ); - - return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinates, managedDependencies, - filter ); + return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies, + filter ); } catch ( ComponentLookupException e ) { @@ -78,11 +77,7 @@ public Iterable resolveDependencies( ProjectBuildingRequest buil validateParameters( buildingRequest, coordinate, filter ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint ); - - return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinate, filter ); + return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter ); } catch ( ComponentLookupException e ) { @@ -98,11 +93,7 @@ public Iterable resolveDependencies( ProjectBuildingRequest buil validateParameters( buildingRequest, model, filter ); try { - String hint = isMaven31() ? "maven31" : "maven3"; - - DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint ); - - return effectiveArtifactResolver.resolveDependencies( buildingRequest, model, filter ); + return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter ); } catch ( ComponentLookupException e ) { @@ -164,6 +155,48 @@ private void validateParameters( ProjectBuildingRequest buildingRequest, Model m } } + + private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, DependencyResolverException + { + ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class ); + + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem m31RepositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); + + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, + "toRepos", + List.class, + buildingRequest.getRemoteRepositories() ); + + return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session, + aetherRepositories ); + } + else + { + org.sonatype.aether.RepositorySystem m30RepositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + List aetherRepositories = + (List) Invoker.invoke( RepositoryUtils.class, + "toRepos", + List.class, + buildingRequest.getRemoteRepositories() ); + + return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session, + aetherRepositories ); + + } + } private void validateBuildingRequest( ProjectBuildingRequest buildingRequest ) { diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java index 91823302..806d4151 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java @@ -29,14 +29,10 @@ import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Model; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter; import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer; import org.apache.maven.shared.transfer.dependencies.DependableCoordinate; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; @@ -56,20 +52,30 @@ /** * */ -@Component( role = DependencyResolver.class, hint = "maven3" ) class Maven30DependencyResolver - implements DependencyResolver + implements MavenDependencyResolver { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final ArtifactHandlerManager artifactHandlerManager; + + private final RepositorySystemSession session; + + private final List aetherRepositories; + + Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager, + RepositorySystemSession session, List aetherRepositories ) + { + super(); + this.repositorySystem = repositorySystem; + this.artifactHandlerManager = artifactHandlerManager; + this.session = session; + this.aetherRepositories = aetherRepositories; + } @Override // CHECKSTYLE_OFF: LineLength - public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - DependableCoordinate coordinate, + public Iterable resolveDependencies( DependableCoordinate coordinate, TransformableFilter dependencyFilter ) // CHECKSTYLE_ON: LineLength throws DependencyResolverException @@ -80,20 +86,14 @@ public Iterable aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories ); - return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request ); + return resolveDependencies( aetherRepositories, dependencyFilter, request ); } @Override // CHECKSTYLE_OFF: LineLength - public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - Model model, + public Iterable resolveDependencies( Model model, TransformableFilter dependencyFilter ) // CHECKSTYLE_ON: LineLength throws DependencyResolverException @@ -108,11 +108,6 @@ public Iterable aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories ); ArtifactTypeRegistry typeRegistry = @@ -140,13 +135,12 @@ public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - Collection mavenDependencies, + public Iterable resolveDependencies( Collection mavenDependencies, Collection managedMavenDependencies, TransformableFilter filter ) // CHECKSTYLE_ON: LineLength @@ -193,20 +187,14 @@ public Iterable aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - CollectRequest request = new CollectRequest( aetherDependencies, aetherManagedDependencies, aetherRepositories ); - return resolveDependencies( buildingRequest, aetherRepositories, filter, request ); + return resolveDependencies( aetherRepositories, filter, request ); } // CHECKSTYLE_OFF: LineLength - private Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - List aetherRepositories, + private Iterable resolveDependencies( List aetherRepositories, TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException @@ -220,9 +208,6 @@ private Iterable dependencyResults = repositorySystem.resolveDependencies( session, request, depFilter ); diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java index c4f53cfd..7bbd6fcb 100644 --- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java +++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java @@ -29,14 +29,10 @@ import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Model; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter; import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer; import org.apache.maven.shared.transfer.dependencies.DependableCoordinate; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -56,20 +52,30 @@ /** * */ -@Component( role = DependencyResolver.class, hint = "maven31" ) class Maven31DependencyResolver - implements DependencyResolver + implements MavenDependencyResolver { - @Requirement private RepositorySystem repositorySystem; - @Requirement private ArtifactHandlerManager artifactHandlerManager; + private final RepositorySystemSession session; + + private final List aetherRepositories; + + Maven31DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager, + RepositorySystemSession session, List aetherRepositories ) + { + super(); + this.repositorySystem = repositorySystem; + this.artifactHandlerManager = artifactHandlerManager; + this.session = session; + this.aetherRepositories = aetherRepositories; + } + @Override // CHECKSTYLE_OFF: LineLength - public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - DependableCoordinate coordinate, + public Iterable resolveDependencies( DependableCoordinate coordinate, TransformableFilter dependencyFilter ) throws DependencyResolverException // CHECKSTYLE_ON: LineLength @@ -80,20 +86,14 @@ public Iterable aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories ); - return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request ); + return resolveDependencies( aetherRepositories, dependencyFilter, request ); } @Override // CHECKSTYLE_OFF: LineLength - public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - Model model, + public Iterable resolveDependencies( Model model, TransformableFilter dependencyFilter ) // CHECKSTYLE_ON: LineLength throws DependencyResolverException @@ -108,11 +108,6 @@ public Iterable aetherRepositories = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); - CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories ); ArtifactTypeRegistry typeRegistry = @@ -140,13 +135,12 @@ public Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - Collection mavenDependencies, + public Iterable resolveDependencies( Collection mavenDependencies, Collection managedMavenDependencies, TransformableFilter filter ) throws DependencyResolverException @@ -193,19 +187,13 @@ public Iterable aetherRepos = - (List) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, - buildingRequest.getRemoteRepositories() ); + CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories ); - CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepos ); - - return resolveDependencies( buildingRequest, aetherRepos, filter, request ); + return resolveDependencies( aetherRepositories, filter, request ); } // CHECKSTYLE_OFF: LineLength - private Iterable resolveDependencies( ProjectBuildingRequest buildingRequest, - List aetherRepositories, + private Iterable resolveDependencies( List aetherRepositories, TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException @@ -221,9 +209,6 @@ private Iterable resolveDependencies( DependableCoordinate coordinate, + TransformableFilter dependencyFilter ) + throws DependencyResolverException; + + Iterable resolveDependencies( Model model, TransformableFilter dependencyFilter ) + throws DependencyResolverException; + + Iterable resolveDependencies( Collection mavenDependencies, + Collection managedMavenDependencies, + TransformableFilter filter ) + throws DependencyResolverException; + +} diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java index b14ae416..a38dce64 100644 --- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java +++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java @@ -28,6 +28,7 @@ import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate; import org.apache.maven.shared.transfer.repository.RepositoryManager; +import org.apache.maven.shared.transfer.repository.RepositoryManagerException; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; @@ -41,22 +42,18 @@ */ @Component( role = RepositoryManager.class ) class DefaultRepositoryManager - implements RepositoryManager, Contextualizable + implements RepositoryManager, Contextualizable { private PlexusContainer container; - + @Override public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact ) { try { - String hint = isMaven31() ? "maven31" : "maven3"; - - RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint ); - - return effectiveRepositoryManager.getPathForLocalArtifact( buildingRequest, artifact ); + return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( artifact ); } - catch ( ComponentLookupException e ) + catch ( ComponentLookupException | RepositoryManagerException e ) { throw new IllegalStateException( e.getMessage(), e ); } @@ -67,13 +64,9 @@ public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, A { try { - String hint = isMaven31() ? "maven31" : "maven3"; - - RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint ); - - return effectiveRepositoryManager.getPathForLocalArtifact( buildingRequest, coor ); + return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( coor ); } - catch ( ComponentLookupException e ) + catch ( ComponentLookupException | RepositoryManagerException e ) { throw new IllegalStateException( e.getMessage(), e ); } @@ -91,51 +84,38 @@ public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, A pomCoordinate.setExtension( "pom" ); return getPathForLocalArtifact( buildingRequest, pomCoordinate ); } - + try { - - String hint = isMaven31() ? "maven31" : "maven3"; - - RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint ); - - return effectiveRepositoryManager.getPathForLocalMetadata( buildingRequest, metadata ); + return getMavenRepositoryManager( buildingRequest ).getPathForLocalMetadata( metadata ); } - catch ( ComponentLookupException e ) + catch ( ComponentLookupException | RepositoryManagerException e ) { throw new IllegalStateException( e.getMessage(), e ); } } @Override - public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir ) + public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir ) { try { - String hint = isMaven31() ? "maven31" : isMaven302() ? "maven302" : "maven3"; - - RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint ); - - return effectiveRepositoryManager.setLocalRepositoryBasedir( request, basedir ); + return getMavenRepositoryManager( buildingRequest ).setLocalRepositoryBasedir( buildingRequest, basedir ); } - catch ( ComponentLookupException e ) + catch ( ComponentLookupException | RepositoryManagerException e ) { throw new IllegalStateException( e.getMessage(), e ); } } @Override - public File getLocalRepositoryBasedir( ProjectBuildingRequest request ) + public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest ) { try { - String hint = isMaven31() ? "maven31" : isMaven302() ? "maven302" : "maven3"; - - RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint ); - - return effectiveRepositoryManager.getLocalRepositoryBasedir( request ); + return getMavenRepositoryManager( buildingRequest ).getLocalRepositoryBasedir(); } - catch ( ComponentLookupException e ) + catch ( ComponentLookupException | RepositoryManagerException e ) { throw new IllegalStateException( e.getMessage(), e ); } @@ -170,15 +150,41 @@ private boolean canFindCoreClass( String className ) return false; } } + + private MavenRepositoryManager getMavenRepositoryManager( ProjectBuildingRequest buildingRequest ) + throws ComponentLookupException, RepositoryManagerException + { + if ( isMaven31() ) + { + org.eclipse.aether.RepositorySystem m31RepositorySystem = + container.lookup( org.eclipse.aether.RepositorySystem.class ); - /** - * Injects the Plexus content. - * - * @param context Plexus context to inject. - * @throws ContextException if the PlexusContainer could not be located. - */ - public void contextualize( Context context ) - throws ContextException + org.eclipse.aether.RepositorySystemSession session = + (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + return new Maven31RepositoryManager( m31RepositorySystem, session ); + } + else + { + org.sonatype.aether.RepositorySystem m30RepositorySystem = + container.lookup( org.sonatype.aether.RepositorySystem.class ); + + org.sonatype.aether.RepositorySystemSession session = + (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + if ( isMaven302() ) + { + return new Maven302RepositoryManager( m30RepositorySystem, session ); + + } + else + { + return new Maven30RepositoryManager( m30RepositorySystem, session ); + } + } + } + + public void contextualize( Context context ) throws ContextException { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java index 0bd1bab8..29178f4e 100644 --- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java +++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java @@ -19,17 +19,20 @@ * under the License. */ -import org.apache.maven.shared.transfer.repository.RepositoryManager; -import org.codehaus.plexus.component.annotations.Component; +import org.sonatype.aether.RepositorySystem; +import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.repository.LocalRepository; /** * */ -@Component( role = RepositoryManager.class, hint = "maven302" ) class Maven302RepositoryManager extends Maven30RepositoryManager { + Maven302RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session ) + { + super( repositorySystem, session ); + } /** * Aether-1.9+ (i.e. M3.0.2+) expects "default", not "enhanced" as repositoryType diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java index 9fbaea97..936ea12f 100644 --- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java +++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java @@ -22,15 +22,11 @@ import java.io.File; import org.apache.maven.RepositoryUtils; -import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; -import org.apache.maven.shared.transfer.repository.RepositoryManager; import org.apache.maven.shared.transfer.repository.RepositoryManagerException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; @@ -46,32 +42,29 @@ /** * */ -@Component( role = RepositoryManager.class, hint = "maven3" ) class Maven30RepositoryManager - implements RepositoryManager + implements MavenRepositoryManager { + private final RepositorySystem repositorySystem; - @Requirement - private RepositorySystem repositorySystem; - - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final RepositorySystemSession session; + + Maven30RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session ) + { + this.repositorySystem = repositorySystem; + this.session = session; + } @Override - public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact ) + public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact ) { Artifact aetherArtifact; - RepositorySystemSession session; - // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException try { aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, mavenArtifact ); - - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); } catch ( RepositoryManagerException e ) { @@ -82,29 +75,17 @@ public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, } @Override - public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate ) + public String getPathForLocalArtifact( ArtifactCoordinate coordinate ) { - Artifact aetherArtifact; - - RepositorySystemSession session; + Artifact aetherArtifact = toArtifact( coordinate ); // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException - try - { - aetherArtifact = toArtifact( coordinate ); - - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact ); } @Override - public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata ) + public String getPathForLocalMetadata( ArtifactMetadata metadata ) { Metadata aetherMetadata = new DefaultMetadata( metadata.getGroupId(), @@ -112,15 +93,6 @@ public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, A metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null, "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT ); - RepositorySystemSession session; - try - { - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata ); } @@ -166,17 +138,8 @@ public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest } @Override - public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest ) + public File getLocalRepositoryBasedir() { - RepositorySystemSession session; - try - { - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } return session.getLocalRepository().getBasedir(); } diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java index d7f4d6ee..86ae6130 100644 --- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java +++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java @@ -22,15 +22,11 @@ import java.io.File; import org.apache.maven.RepositoryUtils; -import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; -import org.apache.maven.shared.transfer.repository.RepositoryManager; import org.apache.maven.shared.transfer.repository.RepositoryManagerException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.DefaultRepositoryCache; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.RepositorySystem; @@ -46,30 +42,30 @@ /** * */ -@Component( role = RepositoryManager.class, hint = "maven31" ) class Maven31RepositoryManager - implements RepositoryManager + implements MavenRepositoryManager { - @Requirement - private RepositorySystem repositorySystem; + private final RepositorySystem repositorySystem; - @Requirement - private ArtifactHandlerManager artifactHandlerManager; + private final RepositorySystemSession session; + + Maven31RepositoryManager( RepositorySystem repositorySystem, + RepositorySystemSession session ) + { + this.repositorySystem = repositorySystem; + this.session = session; + } @Override - public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact ) + public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact ) { Artifact aetherArtifact; - RepositorySystemSession session; // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException try { aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, mavenArtifact ); - - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); } catch ( RepositoryManagerException e ) { @@ -80,29 +76,15 @@ public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, } @Override - public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate ) + public String getPathForLocalArtifact( ArtifactCoordinate coordinate ) { - Artifact aetherArtifact; - - RepositorySystemSession session; - - // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException - try - { - aetherArtifact = toArtifact( coordinate ); - - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } + Artifact aetherArtifact = toArtifact( coordinate ); return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact ); } @Override - public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata ) + public String getPathForLocalMetadata( ArtifactMetadata metadata ) { Metadata aetherMetadata = new DefaultMetadata( metadata.getGroupId(), @@ -110,15 +92,6 @@ public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, A metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null, "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT ); - RepositorySystemSession session; - try - { - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata ); } @@ -164,18 +137,8 @@ public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest } @Override - public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest ) + public File getLocalRepositoryBasedir() { - RepositorySystemSession session; - try - { - session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); - } - catch ( RepositoryManagerException e ) - { - throw new RuntimeException( e.getMessage(), e ); - } - return session.getLocalRepository().getBasedir(); } diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java new file mode 100644 index 00000000..e494b15c --- /dev/null +++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java @@ -0,0 +1,67 @@ +package org.apache.maven.shared.transfer.repository.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.metadata.ArtifactMetadata; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate; + +/** + * + * @author Robert Scholte + */ +interface MavenRepositoryManager +{ + /** + * @param artifact {@link Artifact} + * @return the path of the local artifact. + */ + String getPathForLocalArtifact( Artifact artifact ); + + /** + * @param coordinate {@link ArtifactCoordinate} + * @return the path for the local artifact. + */ + String getPathForLocalArtifact( ArtifactCoordinate coordinate ); + + /** + * @param metadata {@link ArtifactMetadata} + * @return the path of the local metadata. + */ + String getPathForLocalMetadata( ArtifactMetadata metadata ); + + /** + * Create a new {@code ProjectBuildingRequest} with an adjusted repository session. + * + * @param basedir the base directory of the local repository + * @return a new project building request + */ + ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir ); + + /** + * Get the localRepositryBasedir as specified in the repository session of the request + * + * @return the local repository base directory + */ + File getLocalRepositoryBasedir(); +} diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java b/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java index b5693f1a..19d19392 100644 --- a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java +++ b/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java @@ -28,22 +28,22 @@ import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.repository.internal.MavenRepositorySystemSession; -import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller; import org.apache.maven.shared.transfer.artifact.install.internal.Maven30ArtifactInstaller; import org.codehaus.plexus.PlexusTestCase; +import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager; public class Maven30ArtifactInstallerTest extends PlexusTestCase { private final File localRepo = new File( "target/tests/local-repo" ); - private Maven30ArtifactInstaller installer; + private RepositorySystem repositorySystem; @Override public void setUp() throws Exception { super.setUp(); - installer = (Maven30ArtifactInstaller) super.lookup( ArtifactInstaller.class, "maven3" ); + repositorySystem = lookup( RepositorySystem.class ); } public void testInstall() throws Exception @@ -67,7 +67,8 @@ public void testInstall() throws Exception Collection mavenArtifacts = Arrays.asList( artifact, artifactWithClassifier ); - installer.install( buildingRequest, mavenArtifacts ); + MavenArtifactInstaller installer = new Maven30ArtifactInstaller( repositorySystem, repositorySession ); + installer.install( mavenArtifacts ); assertTrue( new File( localRepo, "GROUPID/ARTIFACTID/VERSION/ARTIFACTID-VERSION.EXTENSION" ).exists() ); assertTrue( new File( localRepo, "GROUPID/ARTIFACTID/VERSION/ARTIFACTID-VERSION-CLASSIFIER.EXTENSION" ).exists() ); diff --git a/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java b/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java index faa9e1a4..b4263162 100644 --- a/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java +++ b/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java @@ -24,9 +24,9 @@ import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.repository.internal.MavenRepositorySystemSession; -import org.apache.maven.shared.transfer.repository.RepositoryManager; import org.apache.maven.shared.transfer.repository.internal.Maven30RepositoryManager; import org.codehaus.plexus.PlexusTestCase; +import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.impl.internal.EnhancedLocalRepositoryManager; import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager; @@ -35,13 +35,13 @@ public class Maven30RepositoryManagerTest extends PlexusTestCase private final File localRepo = new File( "target/tests/local-repo" ); - private Maven30RepositoryManager repositoryManager; + private RepositorySystem repositorySystem; @Override public void setUp() throws Exception { super.setUp(); - repositoryManager = (Maven30RepositoryManager) super.lookup( RepositoryManager.class, "maven3" ); + repositorySystem = lookup( RepositorySystem.class ); } public void testSetLocalRepositoryBasedirSimple() throws Exception @@ -53,6 +53,9 @@ public void testSetLocalRepositoryBasedirSimple() throws Exception File basedir = new File( "NEW/LOCAL/REPO" ); + Maven30RepositoryManager repositoryManager = + new Maven30RepositoryManager( repositorySystem, buildingRequest.getRepositorySession() ); + ProjectBuildingRequest newBuildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, basedir ); assertEquals( basedir.getAbsoluteFile(), newBuildingRequest.getRepositorySession().getLocalRepository().getBasedir() ); @@ -68,6 +71,9 @@ public void testSetLocalRepositoryBasedirEnhanced() throws Exception File basedir = new File( "NEW/LOCAL/REPO" ); + Maven30RepositoryManager repositoryManager = + new Maven30RepositoryManager( repositorySystem, buildingRequest.getRepositorySession() ); + ProjectBuildingRequest newBuildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, basedir ); assertEquals( basedir.getAbsoluteFile(), newBuildingRequest.getRepositorySession().getLocalRepository().getBasedir() );