Skip to content

Commit

Permalink
[JENKINS-62658] Multi-module Jenkins plugins fail `mvn process-test-c…
Browse files Browse the repository at this point in the history
…lasses` (#453)
  • Loading branch information
basil committed Mar 24, 2023
1 parent 2b5aae9 commit 0e6242e
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/main/java/org/jenkinsci/maven/plugins/hpi/MavenArtifact.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
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 java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -130,7 +131,28 @@ public File getFile() {
ProjectBuildingRequest buildingRequest =
new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
buildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
return resolver.resolveArtifact(buildingRequest, artifact).getArtifact().getFile();
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);
}
Expand Down

0 comments on commit 0e6242e

Please sign in to comment.