diff --git a/pom.xml b/pom.xml
index 0d758190ed..9dc8d09a69 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,11 +44,9 @@
$
{
jenkinsci/${project.artifactId}
- 1.1.0
3.8.1
3.9.0
- 1.1.0
false
@@ -67,64 +65,9 @@
1.15
- org.apache.maven
- maven-artifact
- ${maven.version}
-
-
- org.apache.maven
- maven-core
- ${maven.version}
-
-
- org.apache.maven
- maven-model
- ${maven.version}
-
-
- org.apache.maven
- maven-plugin-api
- ${maven.version}
-
-
- org.apache.maven.shared
- maven-shared-utils
- 3.4.2
-
-
- org.codehaus.plexus
- plexus-archiver
- 4.7.1
-
-
- org.codehaus.plexus
- plexus-component-annotations
- 2.1.1
-
-
- org.codehaus.plexus
- plexus-io
- 3.4.1
-
-
- org.eclipse.aether
- aether-api
- ${aether.version}
-
-
- org.eclipse.aether
- aether-impl
- ${aether.version}
-
-
- org.eclipse.aether
- aether-spi
- ${aether.version}
-
-
- org.eclipse.aether
- aether-util
- ${aether.version}
+ org.slf4j
+ slf4j-api
+ 2.0.7
@@ -171,11 +114,6 @@
maven-archiver
3.6.0
-
- org.apache.maven.shared
- maven-artifact-transfer
- 0.13.1
-
org.apache.maven.shared
maven-dependency-tree
@@ -220,22 +158,19 @@
org.apache.maven
maven-artifact
- provided
-
-
- org.apache.maven
- maven-builder-support
${maven.version}
provided
org.apache.maven
maven-core
+ ${maven.version}
provided
org.apache.maven
maven-model
+ ${maven.version}
provided
@@ -247,11 +182,6 @@
org.apache.maven
maven-plugin-api
- provided
-
-
- org.apache.maven
- maven-repository-metadata
${maven.version}
provided
@@ -261,18 +191,6 @@
${maven.version}
provided
-
- org.apache.maven
- maven-settings
- ${maven.version}
- provided
-
-
- org.apache.maven
- maven-settings-builder
- ${maven.version}
- provided
-
org.apache.maven.plugin-tools
maven-plugin-annotations
@@ -308,26 +226,6 @@
-
- maven-enforcer-plugin
-
-
- display-info
-
-
-
-
- commons-lang:commons-lang
- org.apache.commons:commons-collections4
- org.apache.commons:commons-lang3
- org.slf4j:slf4j-api
-
-
-
-
-
-
-
org.apache.maven.plugins
maven-invoker-plugin
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/AbstractJenkinsMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/AbstractJenkinsMojo.java
index 9fba80ac6d..c4bd76f807 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/AbstractJenkinsMojo.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/AbstractJenkinsMojo.java
@@ -16,14 +16,10 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.apache.maven.project.ProjectBuilder;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.eclipse.aether.RepositorySystem;
/**
* Mojos that need to figure out the Jenkins version it's working with.
@@ -62,7 +58,7 @@ public abstract class AbstractJenkinsMojo extends AbstractMojo {
protected ArtifactFactory artifactFactory;
@Component
- protected ArtifactResolver artifactResolver;
+ protected RepositorySystem repositorySystem;
@Component
protected ProjectBuilder projectBuilder;
@@ -127,30 +123,20 @@ protected JavaSpecificationVersion getMinimumJavaVersion() throws MojoExecutionE
}
private Artifact resolveJenkinsCore() throws MojoExecutionException {
- DefaultArtifactCoordinate artifactCoordinate = new DefaultArtifactCoordinate();
+ String groupId, artifactId;
if (jenkinsCoreId != null) {
String[] parts = jenkinsCoreId.split(":");
- artifactCoordinate.setGroupId(parts[0]);
- artifactCoordinate.setArtifactId(parts[1]);
+ groupId = parts[0];
+ artifactId = parts[1];
} else {
- artifactCoordinate.setGroupId("org.jenkins-ci.main");
- artifactCoordinate.setArtifactId("jenkins-core");
- }
- artifactCoordinate.setVersion(findJenkinsVersion());
-
- try {
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- return artifactResolver
- .resolveArtifact(buildingRequest, artifactCoordinate)
- .getArtifact();
- } catch (ArtifactResolverException e) {
- throw new MojoExecutionException("Couldn't download artifact: ", e);
+ groupId = "org.jenkins-ci.main";
+ artifactId = "jenkins-core";
}
+ Artifact artifact = artifactFactory.createArtifact(groupId, artifactId, findJenkinsVersion(), null, "jar");
+ return MavenArtifact.resolveArtifact(artifact, project, session, repositorySystem);
}
protected MavenArtifact wrap(Artifact a) {
- return new MavenArtifact(a, artifactResolver, artifactFactory, projectBuilder, session, project);
+ return new MavenArtifact(a, repositorySystem, artifactFactory, projectBuilder, session, project);
}
}
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/HplMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/HplMojo.java
index ea0d1f0318..dc8e33208a 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/HplMojo.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/HplMojo.java
@@ -113,7 +113,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
* puts into WEB-INF/lib should be the same so that the plugins see consistent
* environment.
*/
- private void buildLibraries(List paths) throws IOException {
+ private void buildLibraries(List paths) throws IOException, MojoExecutionException {
Set artifacts = getProjectArtfacts();
// List up IDs of Jenkins plugin dependencies
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/MavenArtifact.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/MavenArtifact.java
index 78e1af2dd8..3e289a17ac 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/MavenArtifact.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/MavenArtifact.java
@@ -6,6 +6,7 @@
import java.util.List;
import java.util.Objects;
import java.util.jar.JarFile;
+import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.handler.ArtifactHandler;
@@ -13,15 +14,22 @@
import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactDescriptorException;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
/**
* {@link Artifact} is a bare data structure without any behavior and therefore
@@ -35,19 +43,19 @@ public class MavenArtifact implements Comparable {
public final ArtifactFactory artifactFactory;
public final ProjectBuilder builder;
public final Artifact artifact;
- public final ArtifactResolver resolver;
+ public final RepositorySystem repositorySystem;
public final MavenSession session;
public final MavenProject project;
public MavenArtifact(
Artifact artifact,
- ArtifactResolver resolver,
+ RepositorySystem repositorySystem,
ArtifactFactory artifactFactory,
ProjectBuilder builder,
MavenSession session,
MavenProject project) {
this.artifact = artifact;
- this.resolver = resolver;
+ this.repositorySystem = repositorySystem;
this.artifactFactory = artifactFactory;
this.builder = builder;
this.session = Objects.requireNonNull(session);
@@ -123,40 +131,65 @@ public String getType() {
/**
* Resolves to the jar file that contains the code of the plugin.
*/
- public File getFile() {
+ public File getFile() throws MojoExecutionException {
if (artifact.getFile() == null) {
+ return resolveArtifact(artifact, project, session, repositorySystem).getFile();
+ }
+ return artifact.getFile();
+ }
+
+ static Artifact resolveArtifact(
+ Artifact artifact, MavenProject project, MavenSession session, RepositorySystem repositorySystem)
+ throws MojoExecutionException {
+ ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
+ buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
+ List remoteRepositories = RepositoryUtils.toRepos(buildingRequest.getRemoteRepositories());
+ RepositorySystemSession repositorySession = buildingRequest.getRepositorySession();
+
+ // use descriptor to respect relocation
+ ArtifactDescriptorRequest descriptorRequest =
+ new ArtifactDescriptorRequest(RepositoryUtils.toArtifact(artifact), remoteRepositories, null);
+
+ ArtifactDescriptorResult descriptorResult;
+ try {
+ descriptorResult = repositorySystem.readArtifactDescriptor(repositorySession, descriptorRequest);
+ } catch (ArtifactDescriptorException e) {
+ throw new MojoExecutionException("Failed to read artifact descriptor: " + artifact, e);
+ }
+
+ ArtifactRequest request = new ArtifactRequest(descriptorResult.getArtifact(), remoteRepositories, null);
+ Artifact resolved;
+ try {
+ resolved = RepositoryUtils.toArtifact(
+ repositorySystem.resolveArtifact(repositorySession, request).getArtifact());
+ } catch (ArtifactResolutionException e) {
+ throw new MojoExecutionException("Failed to resolve artifact: " + artifact, e);
+ }
+
+ /*
+ * If the result is a directory rather than a file, we must be in a multi-module project
+ * where one plugin depends on another plugin in the same multi-module project. Try again
+ * without the workspace reader to force Maven to look for released artifacts rather than in
+ * the target/ directory of another module.
+ */
+ if (resolved.getFile().isDirectory()
+ && buildingRequest.getRepositorySession() instanceof DefaultRepositorySystemSession) {
+ DefaultRepositorySystemSession oldRepositorySession =
+ (DefaultRepositorySystemSession) buildingRequest.getRepositorySession();
+ DefaultRepositorySystemSession newRepositorySession =
+ new DefaultRepositorySystemSession(oldRepositorySession);
+ newRepositorySession.setWorkspaceReader(null);
+ newRepositorySession.setReadOnly();
try {
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- File result = resolver.resolveArtifact(buildingRequest, artifact)
- .getArtifact()
- .getFile();
- /*
- * If the result is a directory rather than a file, we must be in a multi-module
- * project where one plugin depends on another plugin in the same multi-module
- * project. Try again without the workspace reader to force Maven to look for
- * released artifacts rather than in the target/ directory of another module.
- */
- if (result.isDirectory()
- && buildingRequest.getRepositorySession() instanceof DefaultRepositorySystemSession) {
- DefaultRepositorySystemSession oldRepositorySession =
- (DefaultRepositorySystemSession) buildingRequest.getRepositorySession();
- DefaultRepositorySystemSession newRepositorySession =
- new DefaultRepositorySystemSession(oldRepositorySession);
- newRepositorySession.setWorkspaceReader(null);
- newRepositorySession.setReadOnly();
- buildingRequest.setRepositorySession(newRepositorySession);
- result = resolver.resolveArtifact(buildingRequest, artifact)
- .getArtifact()
- .getFile();
- }
- return result;
- } catch (ArtifactResolverException e) {
- throw new RuntimeException("Failed to resolve " + getId(), e);
+ resolved = RepositoryUtils.toArtifact(repositorySystem
+ .resolveArtifact(newRepositorySession, request)
+ .getArtifact());
+ } catch (ArtifactResolutionException e) {
+ throw new MojoExecutionException("Failed to resolve artifact: " + artifact, e);
}
}
- return artifact.getFile();
+
+ return resolved;
}
/**
@@ -169,7 +202,7 @@ public MavenArtifact getHpi() throws IOException {
artifact.getVersion(),
Artifact.SCOPE_COMPILE,
getResolvedType());
- return new MavenArtifact(a, resolver, artifactFactory, builder, session, project);
+ return new MavenArtifact(a, repositorySystem, artifactFactory, builder, session, project);
}
public List getDependencyTrail() {
@@ -221,7 +254,7 @@ public ArtifactHandler getArtifactHandler() {
}
/** For a plugin artifact, unlike {@link #getArtifactId} this parses the plugin manifest. */
- public String getActualArtifactId() throws IOException {
+ public String getActualArtifactId() throws IOException, MojoExecutionException {
File file = getFile();
if (file != null && file.isFile()) {
try (JarFile jf = new JarFile(file)) {
@@ -233,7 +266,7 @@ public String getActualArtifactId() throws IOException {
}
/** For a plugin artifact, unlike {@link #getVersion} this parses the plugin manifest. */
- public String getActualVersion() throws IOException {
+ public String getActualVersion() throws IOException, MojoExecutionException {
File file = getFile();
if (file != null && file.isFile()) {
try (JarFile jf = new JarFile(file)) {
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/RunMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/RunMojo.java
index b177444003..8d32c63c31 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/RunMojo.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/RunMojo.java
@@ -61,16 +61,13 @@
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.project.DefaultDependencyResolutionRequest;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.DependencyResolutionException;
import org.apache.maven.project.DependencyResolutionRequest;
import org.apache.maven.project.DependencyResolutionResult;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
-import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectDependenciesResolver;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
import org.eclipse.jetty.http.HttpCompliance;
@@ -147,7 +144,7 @@ public class RunMojo extends JettyRunWarMojo {
protected File warSourceDirectory;
@Component
- protected ArtifactResolver artifactResolver;
+ protected RepositorySystem repositorySystem;
@Component
protected ArtifactFactory artifactFactory;
@@ -317,17 +314,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
.artifactIdIsNot("remoting"); // remoting moved to its own release cycle
if (webAppFile == null) {
- Artifact jenkinsWarArtifact = getJenkinsWarArtifact();
- try {
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- jenkinsWarArtifact = artifactResolver
- .resolveArtifact(buildingRequest, jenkinsWarArtifact)
- .getArtifact();
- } catch (ArtifactResolverException x) {
- throw new MojoExecutionException("Could not resolve " + jenkinsWarArtifact + ": " + x, x);
- }
+ Artifact jenkinsWarArtifact =
+ MavenArtifact.resolveArtifact(getJenkinsWarArtifact(), project, session, repositorySystem);
webAppFile = jenkinsWarArtifact.getFile();
if (webAppFile == null || !webAppFile.isFile()) {
throw new MojoExecutionException("Could not find " + webAppFile + " from " + jenkinsWarArtifact);
@@ -373,10 +361,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
// find corresponding .hpi file
Artifact hpi =
artifactFactory.createArtifact(a.getGroupId(), a.getArtifactId(), a.getVersion(), null, "hpi");
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- hpi = artifactResolver.resolveArtifact(buildingRequest, hpi).getArtifact();
+ hpi = MavenArtifact.resolveArtifact(hpi, project, session, repositorySystem);
// check recursive dependency. this is a rare case that happens when we split out some things from the
// core into a plugin
@@ -401,7 +386,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
copyPlugin(hpi.getFile(), pluginsDir, actualArtifactId);
}
}
- } catch (IOException | ArtifactResolverException e) {
+ } catch (IOException e) {
throw new MojoExecutionException("Unable to copy dependency plugin", e);
}
@@ -772,7 +757,7 @@ public Set getProjectArtifacts() {
}
protected MavenArtifact wrap(Artifact a) {
- return new MavenArtifact(a, artifactResolver, artifactFactory, projectBuilder, session, project);
+ return new MavenArtifact(a, repositorySystem, artifactFactory, projectBuilder, session, project);
}
protected Artifact getJenkinsWarArtifact() throws MojoExecutionException {
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/TestRuntimeMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/TestRuntimeMojo.java
index d947b99720..59ab9b6149 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/TestRuntimeMojo.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/TestRuntimeMojo.java
@@ -18,10 +18,6 @@
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
/**
* Configure Surefire for the desired version of Java.
@@ -73,22 +69,9 @@ private void setAddOpensProperty() throws MojoExecutionException {
@NonNull
private Artifact resolveJenkinsWar() throws MojoExecutionException {
- DefaultArtifactCoordinate artifactCoordinate = new DefaultArtifactCoordinate();
- artifactCoordinate.setGroupId("org.jenkins-ci.main");
- artifactCoordinate.setArtifactId("jenkins-war");
- artifactCoordinate.setVersion(findJenkinsVersion());
- artifactCoordinate.setExtension("war");
-
- try {
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- return artifactResolver
- .resolveArtifact(buildingRequest, artifactCoordinate)
- .getArtifact();
- } catch (ArtifactResolverException e) {
- throw new MojoExecutionException("Couldn't download artifact: ", e);
- }
+ Artifact artifact =
+ artifactFactory.createArtifact("org.jenkins-ci.main", "jenkins-war", findJenkinsVersion(), null, "war");
+ return MavenArtifact.resolveArtifact(artifact, project, session, repositorySystem);
}
@CheckForNull
diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/WarMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/WarMojo.java
index 1ec918d82a..15fe620b9d 100644
--- a/src/main/java/org/jenkinsci/maven/plugins/hpi/WarMojo.java
+++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/WarMojo.java
@@ -12,11 +12,8 @@
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.ZipFileSet;
@@ -90,10 +87,7 @@ public void execute() throws MojoExecutionException {
// find corresponding .hpi file
Artifact hpi =
artifactFactory.createArtifact(a.getGroupId(), a.getArtifactId(), a.getVersion(), null, "hpi");
- ProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
- buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- hpi = artifactResolver.resolveArtifact(buildingRequest, hpi).getArtifact();
+ hpi = MavenArtifact.resolveArtifact(hpi, project, session, repositorySystem);
if (hpi.getFile().isDirectory()) {
throw new UnsupportedOperationException(
@@ -110,7 +104,7 @@ public void execute() throws MojoExecutionException {
getLog().info("Generated " + outputFile);
projectHelper.attachArtifact(getProject(), "war", outputFile);
- } catch (IOException | ArtifactResolverException e) {
+ } catch (IOException e) {
throw new MojoExecutionException("Failed to package war", e);
}
}