|
30 | 30 | import java.util.Collections; |
31 | 31 | import java.util.EnumSet; |
32 | 32 | import java.util.HashSet; |
| 33 | +import java.util.LinkedHashSet; |
33 | 34 | import java.util.List; |
34 | 35 | import java.util.Objects; |
35 | 36 | import java.util.Set; |
|
38 | 39 | import net.java.sezpoz.Index; |
39 | 40 | import net.java.sezpoz.IndexItem; |
40 | 41 | import org.apache.commons.io.IOUtils; |
| 42 | +import org.apache.maven.RepositoryUtils; |
41 | 43 | import org.apache.maven.artifact.Artifact; |
42 | 44 | import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; |
43 | 45 | import org.apache.maven.model.Resource; |
44 | 46 | import org.apache.maven.plugin.MojoExecutionException; |
45 | 47 | import org.apache.maven.plugins.annotations.Component; |
46 | 48 | import org.apache.maven.plugins.annotations.Parameter; |
| 49 | +import org.apache.maven.project.DefaultDependencyResolutionRequest; |
| 50 | +import org.apache.maven.project.DependencyResolutionException; |
| 51 | +import org.apache.maven.project.DependencyResolutionRequest; |
| 52 | +import org.apache.maven.project.DependencyResolutionResult; |
47 | 53 | import org.apache.maven.project.MavenProject; |
| 54 | +import org.apache.maven.project.ProjectDependenciesResolver; |
48 | 55 | import org.apache.maven.shared.filtering.MavenFilteringException; |
49 | 56 | import org.apache.maven.shared.filtering.MavenResourcesExecution; |
50 | 57 | import org.apache.maven.shared.filtering.MavenResourcesFiltering; |
|
55 | 62 | import org.codehaus.plexus.util.DirectoryScanner; |
56 | 63 | import org.codehaus.plexus.util.FileUtils; |
57 | 64 | import org.codehaus.plexus.util.StringUtils; |
| 65 | +import org.eclipse.aether.graph.DependencyFilter; |
| 66 | +import org.eclipse.aether.util.filter.ScopeDependencyFilter; |
58 | 67 | import org.jenkinsci.maven.plugins.hpi.util.Utils; |
59 | 68 |
|
60 | 69 | public abstract class AbstractHpiMojo extends AbstractJenkinsMojo { |
@@ -162,6 +171,9 @@ public abstract class AbstractHpiMojo extends AbstractJenkinsMojo { |
162 | 171 | @Component |
163 | 172 | protected ArchiverManager archiverManager; |
164 | 173 |
|
| 174 | + @Component |
| 175 | + protected ProjectDependenciesResolver dependenciesResolver; |
| 176 | + |
165 | 177 | private static final String WEB_INF = "WEB-INF"; |
166 | 178 |
|
167 | 179 | private static final String META_INF = "META-INF"; |
@@ -352,7 +364,7 @@ public void buildExplodedWebapp(File webappDirectory, File jarFile) throws MojoE |
352 | 364 |
|
353 | 365 | try { |
354 | 366 | List<Resource> webResources = this.webResources != null ? List.of(this.webResources) : null; |
355 | | - if (webResources != null && webResources.size() > 0) { |
| 367 | + if (webResources != null && !webResources.isEmpty()) { |
356 | 368 | copyResourcesWithFiltering(webResources, webappDirectory); |
357 | 369 | } |
358 | 370 |
|
@@ -575,7 +587,7 @@ public void buildWebapp(MavenProject project, File webappDirectory) throws MojoE |
575 | 587 | } |
576 | 588 | } |
577 | 589 |
|
578 | | - if (dependentWarDirectories.size() > 0) { |
| 590 | + if (!dependentWarDirectories.isEmpty()) { |
579 | 591 | getLog().info("Overlaying " + dependentWarDirectories.size() + " war(s)."); |
580 | 592 |
|
581 | 593 | // overlay dependent wars |
@@ -788,4 +800,44 @@ protected Boolean isSupportDynamicLoading() throws IOException { |
788 | 800 | return Boolean.TRUE; |
789 | 801 | } |
790 | 802 | } |
| 803 | + |
| 804 | + /** |
| 805 | + * Performs the equivalent of "@requiresDependencyResolution" mojo attribute, |
| 806 | + * so that we can choose the scope at runtime. |
| 807 | + */ |
| 808 | + protected Set<Artifact> resolveDependencies(String scope) throws MojoExecutionException { |
| 809 | + try { |
| 810 | + DependencyResolutionRequest request = |
| 811 | + new DefaultDependencyResolutionRequest(project, session.getRepositorySession()); |
| 812 | + request.setResolutionFilter(getDependencyFilter(scope)); |
| 813 | + DependencyResolutionResult result = dependenciesResolver.resolve(request); |
| 814 | + |
| 815 | + Set<Artifact> artifacts = new LinkedHashSet<>(); |
| 816 | + if (result.getDependencyGraph() != null |
| 817 | + && !result.getDependencyGraph().getChildren().isEmpty()) { |
| 818 | + RepositoryUtils.toArtifacts( |
| 819 | + artifacts, |
| 820 | + result.getDependencyGraph().getChildren(), |
| 821 | + List.of(project.getArtifact().getId()), |
| 822 | + request.getResolutionFilter()); |
| 823 | + } |
| 824 | + return artifacts; |
| 825 | + } catch (DependencyResolutionException e) { |
| 826 | + throw new MojoExecutionException("Unable to resolve dependencies", e); |
| 827 | + } |
| 828 | + } |
| 829 | + |
| 830 | + /** |
| 831 | + * Returns all the transitive plugin dependencies as MavenArtifact. |
| 832 | + */ |
| 833 | + protected Set<MavenArtifact> getProjectArtifacts() { |
| 834 | + return wrap(Artifacts.of(project)); |
| 835 | + } |
| 836 | + |
| 837 | + protected DependencyFilter getDependencyFilter(String scope) { |
| 838 | + if (scope == null || scope.isEmpty()) { |
| 839 | + return null; |
| 840 | + } |
| 841 | + return new ScopeDependencyFilter(null, scope); |
| 842 | + } |
791 | 843 | } |
0 commit comments