Skip to content

Commit cd2f9f0

Browse files
committed
MDEP-726: dependency:copy finds missing versions in TRANSITIVE dependencies
Signed-off-by: Markus KARG <[email protected]>
1 parent 50568fc commit cd2f9f0

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

Diff for: src/main/java/org/apache/maven/plugins/dependency/fromConfiguration/AbstractFromConfigurationMojo.java

+27-24
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,27 @@
2020
*/
2121

2222
import java.io.File;
23+
import java.util.Arrays;
2324
import java.util.Collections;
2425
import java.util.List;
2526
import java.util.Objects;
27+
import java.util.Set;
2628

29+
import javax.inject.Inject;
30+
31+
import org.apache.maven.ProjectDependenciesResolver;
2732
import org.apache.maven.artifact.Artifact;
2833
import org.apache.maven.artifact.handler.ArtifactHandler;
2934
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
30-
import org.apache.maven.model.Dependency;
35+
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
36+
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
3137
import org.apache.maven.plugin.MojoExecutionException;
3238
import org.apache.maven.plugin.MojoFailureException;
3339
import org.apache.maven.plugins.annotations.Component;
3440
import org.apache.maven.plugins.annotations.Parameter;
3541
import org.apache.maven.plugins.dependency.AbstractDependencyMojo;
3642
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
3743
import org.apache.maven.plugins.dependency.utils.filters.ArtifactItemFilter;
38-
import org.apache.maven.project.MavenProject;
3944
import org.apache.maven.project.ProjectBuildingRequest;
4045
import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
4146
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
@@ -270,33 +275,31 @@ protected Artifact getArtifact( ArtifactItem artifactItem )
270275
private void fillMissingArtifactVersion( ArtifactItem artifact )
271276
throws MojoExecutionException
272277
{
273-
MavenProject project = getProject();
274-
List<Dependency> deps = project.getDependencies();
275-
List<Dependency> depMngt = project.getDependencyManagement() == null ? Collections.<Dependency>emptyList()
276-
: project.getDependencyManagement().getDependencies();
277-
278-
if ( !findDependencyVersion( artifact, deps, false )
279-
&& ( project.getDependencyManagement() == null || !findDependencyVersion( artifact, depMngt, false ) )
280-
&& !findDependencyVersion( artifact, deps, true )
281-
&& ( project.getDependencyManagement() == null || !findDependencyVersion( artifact, depMngt, true ) ) )
278+
try
279+
{
280+
if ( !this.findDependencyVersion( artifact, false ) && !this.findDependencyVersion( artifact, true ) )
281+
{
282+
throw new MojoExecutionException( "Unable to find artifact version of " + artifact.getGroupId() + ":"
283+
+ artifact.getArtifactId() + " in transitively resolved dependencies." );
284+
}
285+
}
286+
catch ( final ArtifactResolutionException | ArtifactNotFoundException e )
282287
{
283-
throw new MojoExecutionException( "Unable to find artifact version of " + artifact.getGroupId() + ":"
284-
+ artifact.getArtifactId() + " in either dependency list or in project's dependency management." );
288+
throw new MojoExecutionException( "Failed to transitively resolve project dependencies.", e );
285289
}
286290
}
287291

288-
/**
289-
* Tries to find missing version from a list of dependencies. If found, the artifact is updated with the correct
290-
* version.
291-
*
292-
* @param artifact representing configured file.
293-
* @param dependencies list of dependencies to search.
294-
* @param looseMatch only look at artifactId and groupId
295-
* @return the found dependency
296-
*/
297-
private boolean findDependencyVersion( ArtifactItem artifact, List<Dependency> dependencies, boolean looseMatch )
292+
@Inject
293+
private ProjectDependenciesResolver resolver;
294+
295+
private boolean findDependencyVersion( final ArtifactItem artifact, boolean looseMatch )
296+
throws ArtifactResolutionException, ArtifactNotFoundException
298297
{
299-
for ( Dependency dependency : dependencies )
298+
final Set<Artifact> resolvedArtifacts =
299+
this.resolver.resolve( this.getProject(),
300+
Arrays.asList( "compile", "provided", "runtime", "test", "system", "import" ),
301+
this.session );
302+
for ( final Artifact dependency : resolvedArtifacts )
300303
{
301304
if ( Objects.equals( dependency.getArtifactId(), artifact.getArtifactId() )
302305
&& Objects.equals( dependency.getGroupId(), artifact.getGroupId() )

0 commit comments

Comments
 (0)