2424import java .util .Objects ;
2525
2626import org .apache .commons .lang3 .StringUtils ;
27+ import org .apache .maven .RepositoryUtils ;
2728import org .apache .maven .artifact .Artifact ;
2829import org .apache .maven .artifact .handler .ArtifactHandler ;
2930import org .apache .maven .artifact .handler .manager .ArtifactHandlerManager ;
3637import org .apache .maven .plugins .dependency .utils .DependencyUtil ;
3738import org .apache .maven .plugins .dependency .utils .filters .ArtifactItemFilter ;
3839import org .apache .maven .project .MavenProject ;
39- import org .apache .maven .project .ProjectBuildingRequest ;
4040import org .apache .maven .shared .artifact .filter .collection .ArtifactFilterException ;
41- import org .apache .maven .shared .transfer .artifact .DefaultArtifactCoordinate ;
42- import org .apache .maven .shared .transfer .artifact .resolve .ArtifactResolver ;
43- import org .apache .maven .shared .transfer .artifact .resolve .ArtifactResolverException ;
44- import org .apache .maven .shared .transfer .repository .RepositoryManager ;
41+ import org .eclipse .aether .DefaultRepositoryCache ;
42+ import org .eclipse .aether .DefaultRepositorySystemSession ;
43+ import org .eclipse .aether .RepositorySystem ;
44+ import org .eclipse .aether .RepositorySystemSession ;
45+ import org .eclipse .aether .artifact .DefaultArtifact ;
46+ import org .eclipse .aether .repository .LocalRepository ;
47+ import org .eclipse .aether .repository .LocalRepositoryManager ;
48+ import org .eclipse .aether .resolution .ArtifactRequest ;
49+ import org .eclipse .aether .resolution .ArtifactResolutionException ;
50+ import org .eclipse .aether .resolution .ArtifactResult ;
4551import org .sonatype .plexus .build .incremental .BuildContext ;
4652
4753/**
@@ -112,23 +118,19 @@ public abstract class AbstractFromConfigurationMojo extends AbstractDependencyMo
112118 @ Parameter
113119 private File localRepositoryDirectory ;
114120
115- private final ArtifactResolver artifactResolver ;
116-
117- private final RepositoryManager repositoryManager ;
118-
119121 private final ArtifactHandlerManager artifactHandlerManager ;
120122
123+ private final RepositorySystem repositorySystem ;
124+
121125 protected AbstractFromConfigurationMojo (
122126 MavenSession session ,
123127 BuildContext buildContext ,
124128 MavenProject project ,
125- ArtifactResolver artifactResolver ,
126- RepositoryManager repositoryManager ,
127- ArtifactHandlerManager artifactHandlerManager ) {
129+ ArtifactHandlerManager artifactHandlerManager ,
130+ RepositorySystem repositorySystem ) {
128131 super (session , buildContext , project );
129- this .artifactResolver = artifactResolver ;
130- this .repositoryManager = repositoryManager ;
131132 this .artifactHandlerManager = artifactHandlerManager ;
133+ this .repositorySystem = repositorySystem ;
132134 }
133135
134136 abstract ArtifactItemFilter getMarkedArtifactFilter (ArtifactItem item );
@@ -156,9 +158,9 @@ protected void verifyRequirements() throws MojoFailureException {
156158 protected List <ArtifactItem > getProcessedArtifactItems (ProcessArtifactItemsRequest processArtifactItemsRequest )
157159 throws MojoExecutionException {
158160
159- boolean removeVersion = processArtifactItemsRequest .isRemoveVersion (),
160- prependGroupId = processArtifactItemsRequest .isPrependGroupId (),
161- useBaseVersion = processArtifactItemsRequest .isUseBaseVersion ();
161+ boolean removeVersion = processArtifactItemsRequest .isRemoveVersion ();
162+ boolean prependGroupId = processArtifactItemsRequest .isPrependGroupId ();
163+ boolean useBaseVersion = processArtifactItemsRequest .isUseBaseVersion ();
162164
163165 boolean removeClassifier = processArtifactItemsRequest .isRemoveClassifier ();
164166
@@ -196,11 +198,31 @@ protected List<ArtifactItem> getProcessedArtifactItems(ProcessArtifactItemsReque
196198 return artifactItems ;
197199 }
198200
199- private boolean checkIfProcessingNeeded (ArtifactItem item ) throws MojoExecutionException , ArtifactFilterException {
201+ private boolean checkIfProcessingNeeded (ArtifactItem item ) throws ArtifactFilterException {
200202 return "true" .equalsIgnoreCase (item .getOverWrite ())
201203 || getMarkedArtifactFilter (item ).isArtifactIncluded (item );
202204 }
203205
206+ private RepositorySystemSession createSystemSessionForLocalRepo () {
207+ RepositorySystemSession repositorySystemSession = session .getRepositorySession ();
208+ if (localRepositoryDirectory != null ) {
209+ // "clone" repository session and replace localRepository
210+ DefaultRepositorySystemSession newSession =
211+ new DefaultRepositorySystemSession (session .getRepositorySession ());
212+ // Clear cache, since we're using a new local repository
213+ newSession .setCache (new DefaultRepositoryCache ());
214+ LocalRepositoryManager localRepositoryManager = repositorySystem .newLocalRepositoryManager (
215+ newSession , new LocalRepository (localRepositoryDirectory ));
216+
217+ newSession .setLocalRepositoryManager (localRepositoryManager );
218+ repositorySystemSession = newSession ;
219+ getLog ().debug ("localRepoPath: "
220+ + localRepositoryManager .getRepository ().getBasedir ());
221+ }
222+
223+ return repositorySystemSession ;
224+ }
225+
204226 /**
205227 * Resolves the Artifact from the remote repository if necessary. If no version is specified, it will be retrieved
206228 * from the dependency list or from the DependencyManagement section of the pom.
@@ -210,23 +232,8 @@ private boolean checkIfProcessingNeeded(ArtifactItem item) throws MojoExecutionE
210232 * @throws MojoExecutionException if the version can't be found in DependencyManagement
211233 */
212234 protected Artifact getArtifact (ArtifactItem artifactItem ) throws MojoExecutionException {
213- Artifact artifact ;
214235
215236 try {
216- ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest ();
217-
218- if (localRepositoryDirectory != null ) {
219- buildingRequest =
220- repositoryManager .setLocalRepositoryBasedir (buildingRequest , localRepositoryDirectory );
221- }
222-
223- // Map dependency to artifact coordinate
224- DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate ();
225- coordinate .setGroupId (artifactItem .getGroupId ());
226- coordinate .setArtifactId (artifactItem .getArtifactId ());
227- coordinate .setVersion (artifactItem .getVersion ());
228- coordinate .setClassifier (artifactItem .getClassifier ());
229-
230237 final String extension ;
231238
232239 ArtifactHandler artifactHandler = artifactHandlerManager .getArtifactHandler (artifactItem .getType ());
@@ -235,16 +242,23 @@ protected Artifact getArtifact(ArtifactItem artifactItem) throws MojoExecutionEx
235242 } else {
236243 extension = artifactItem .getType ();
237244 }
238- coordinate .setExtension (extension );
239245
240- artifact = artifactResolver
241- .resolveArtifact (buildingRequest , coordinate )
242- .getArtifact ();
243- } catch (ArtifactResolverException e ) {
246+ DefaultArtifact artifact = new DefaultArtifact (
247+ artifactItem .getGroupId (),
248+ artifactItem .getArtifactId (),
249+ artifactItem .getClassifier (),
250+ extension ,
251+ artifactItem .getVersion ());
252+
253+ RepositorySystemSession repositorySession = createSystemSessionForLocalRepo ();
254+
255+ ArtifactRequest request = new ArtifactRequest (artifact , getProject ().getRemoteProjectRepositories (), null );
256+ ArtifactResult artifactResult = repositorySystem .resolveArtifact (repositorySession , request );
257+ return RepositoryUtils .toArtifact (artifactResult .getArtifact ());
258+
259+ } catch (ArtifactResolutionException e ) {
244260 throw new MojoExecutionException ("Unable to find/resolve artifact." , e );
245261 }
246-
247- return artifact ;
248262 }
249263
250264 /**
0 commit comments