diff --git a/provisio-maven-plugin/src/main/java/ca/vanzyl/maven/plugins/provisio/BaseMojo.java b/provisio-maven-plugin/src/main/java/ca/vanzyl/maven/plugins/provisio/BaseMojo.java index e441151..db048d6 100644 --- a/provisio-maven-plugin/src/main/java/ca/vanzyl/maven/plugins/provisio/BaseMojo.java +++ b/provisio-maven-plugin/src/main/java/ca/vanzyl/maven/plugins/provisio/BaseMojo.java @@ -26,17 +26,11 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; -import org.apache.maven.project.artifact.ProjectArtifact; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.ReaderFactory; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -44,7 +38,14 @@ import org.eclipse.aether.artifact.ArtifactType; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.artifact.DefaultArtifactType; -import org.eclipse.aether.util.artifact.ArtifactIdUtils; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.graph.DefaultDependencyNode; +import org.eclipse.aether.graph.DependencyFilter; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.resolution.DependencyRequest; +import org.eclipse.aether.resolution.DependencyResolutionException; +import org.eclipse.aether.resolution.DependencyResult; +import org.eclipse.aether.util.filter.ScopeDependencyFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -96,13 +97,12 @@ protected ProvisioArtifact projectArtifact() { // is no real protocol for knowing what something like, say, the JAR plugin did to drop off a file somewhere. We // need to improve this but for now we'll look. // === - // This above is not quite true: check below reuses main artifact if it was built (backing file exists) unrelated - // where it was created, but have been attached. + // While this above is still true, this check below is better, in a sense it allows JAR plugin to drop off file + // anywhere. // - Artifact pomArtifact = RepositoryUtils.toArtifact(new ProjectArtifact(project)); Artifact projectArtifact = RepositoryUtils.toArtifact(project.getArtifact()); - if (!ArtifactIdUtils.equalsId(pomArtifact, projectArtifact) - && projectArtifact.getFile() != null + if (projectArtifact.getFile() != null + && projectArtifact.getFile().getName().endsWith(".jar") && projectArtifact.getFile().exists()) { jarArtifact = new ProvisioArtifact(project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion()); jarArtifact.setFile(projectArtifact.getFile()); @@ -122,14 +122,44 @@ protected ArtifactSet getRuntimeClasspathAsArtifactSet() { // for this Mojo. I think this will be sufficient for anything related to creating a runtime. // ArtifactSet artifactSet = new ArtifactSet(); - for (org.apache.maven.artifact.Artifact mavenArtifact : project.getArtifacts()) { - if (!mavenArtifact.getScope().equals("system") && !mavenArtifact.getScope().equals("provided")) { - artifactSet.addArtifact(new ProvisioArtifact(toArtifact(mavenArtifact))); - } + for (Artifact mavenArtifact : resolveRuntimeScopeTransitively()) { + artifactSet.addArtifact(new ProvisioArtifact(mavenArtifact)); } return artifactSet; } + + /** + * This method is in use instead of project offering mojo asked resolution scope due presence of: + * MNG-8041 + */ + private List resolveRuntimeScopeTransitively() { + DependencyFilter scoopeDependencyFilter = new ScopeDependencyFilter("provided", "test"); + List dependencies = project.getDependencies().stream() + .map(d -> RepositoryUtils.toDependency(d, repositorySystemSession.getArtifactTypeRegistry())) + .filter(d -> scoopeDependencyFilter.accept(new DefaultDependencyNode(d), Collections.emptyList())) + .collect(Collectors.toList()); + List managedDependencies = Collections.emptyList(); + if (project.getDependencyManagement() != null) { + managedDependencies = project.getDependencyManagement().getDependencies().stream() + .map(d -> RepositoryUtils.toDependency(d, repositorySystemSession.getArtifactTypeRegistry())) + .collect(Collectors.toList()); + } + + CollectRequest collectRequest = new CollectRequest(); + collectRequest.setManagedDependencies(managedDependencies); + collectRequest.setRepositories(project.getRemoteProjectRepositories()); + collectRequest.setDependencies(dependencies); + collectRequest.setRootArtifact(RepositoryUtils.toArtifact(project.getArtifact())); + DependencyRequest request = new DependencyRequest(collectRequest, scoopeDependencyFilter); + try { + DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, request); + return dependencyResult.getArtifactResults().stream().map(ArtifactResult::getArtifact).collect(Collectors.toList()); + } catch (DependencyResolutionException e) { + throw new RuntimeException(e); + } + } + private static Artifact toArtifact(org.apache.maven.artifact.Artifact artifact) { if (artifact == null) { return null; diff --git a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/GeneratorIntegrationTest.java b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/GeneratorIntegrationTest.java index 0a8a01b..a151e54 100644 --- a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/GeneratorIntegrationTest.java +++ b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/GeneratorIntegrationTest.java @@ -41,7 +41,7 @@ import static org.junit.Assert.assertArrayEquals; @RunWith(MavenJUnitTestRunner.class) -@MavenVersions({"3.6.3", "3.8.4"}) +@MavenVersions({"3.6.3", "3.8.8", "3.9.6"}) @SuppressWarnings({"JUnitTestNG", "PublicField"}) public class GeneratorIntegrationTest { diff --git a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ProvisioningIntegrationTest.java b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ProvisioningIntegrationTest.java index 5ada744..7091152 100644 --- a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ProvisioningIntegrationTest.java +++ b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ProvisioningIntegrationTest.java @@ -29,7 +29,7 @@ import static org.junit.Assert.assertTrue; @RunWith(MavenJUnitTestRunner.class) -@MavenVersions({"3.6.3", "3.8.4", "3.9.6"}) +@MavenVersions({"3.6.3", "3.8.8", "3.9.6"}) @SuppressWarnings({"JUnitTestNG", "PublicField"}) public class ProvisioningIntegrationTest { diff --git a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ValidatorIntegrationTest.java b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ValidatorIntegrationTest.java index 399d946..003da68 100644 --- a/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ValidatorIntegrationTest.java +++ b/provisio-maven-plugin/src/test/java/ca/vanzyl/maven/plugins/provisio/ValidatorIntegrationTest.java @@ -27,7 +27,7 @@ import java.io.File; @RunWith(MavenJUnitTestRunner.class) -@MavenVersions({"3.6.3", "3.8.4"}) +@MavenVersions({"3.6.3", "3.8.8", "3.9.6"}) @SuppressWarnings({"JUnitTestNG", "PublicField"}) public class ValidatorIntegrationTest {