|
1 | 1 | package org.jfrog.build.extractor.maven;
|
2 | 2 |
|
| 3 | +import org.apache.commons.lang3.StringUtils; |
3 | 4 | import org.apache.maven.artifact.repository.ArtifactRepository;
|
4 | 5 | import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
|
5 | 6 | import org.apache.maven.artifact.repository.MavenArtifactRepository;
|
|
9 | 10 | import org.apache.maven.project.ProjectBuildingRequest;
|
10 | 11 | import org.apache.maven.project.ProjectBuildingResult;
|
11 | 12 | import org.codehaus.plexus.component.annotations.Component;
|
| 13 | +import org.codehaus.plexus.component.annotations.Requirement; |
| 14 | +import org.jfrog.build.extractor.maven.resolver.ResolutionHelper; |
| 15 | +import org.sonatype.aether.repository.RepositoryPolicy; |
12 | 16 |
|
13 | 17 | import javax.inject.Named;
|
14 | 18 | import java.io.File;
|
15 | 19 | import java.util.ArrayList;
|
16 |
| -import java.util.Collections; |
17 | 20 | import java.util.List;
|
| 21 | +import java.util.Properties; |
18 | 22 |
|
19 | 23 | import static org.jfrog.build.api.BuildInfoConfigProperties.PROP_ARTIFACTORY_RESOLUTION_ENABLED;
|
20 | 24 |
|
21 | 25 | @Named
|
22 |
| -@Component( role = DefaultProjectBuilder.class, hint = "default") |
| 26 | +@Component(role = DefaultProjectBuilder.class, hint = "default") |
23 | 27 | public class ArtifactoryProjectBuilder extends DefaultProjectBuilder {
|
24 | 28 |
|
| 29 | + @Requirement |
| 30 | + private ResolutionHelper resolutionHelper; |
| 31 | + |
25 | 32 | @Override
|
26 | 33 | public List<ProjectBuildingResult> build(List<File> pomFiles, boolean recursive, ProjectBuildingRequest request) throws ProjectBuildingException {
|
27 | 34 | if (Boolean.parseBoolean(System.getProperties().getProperty(PROP_ARTIFACTORY_RESOLUTION_ENABLED))
|
28 | 35 | || Boolean.parseBoolean(System.getenv(PROP_ARTIFACTORY_RESOLUTION_ENABLED))) {
|
29 |
| - // We're setting a dummy repository to the list of repositories, which has both snapshot and release policies enabled. |
| 36 | + if (!resolutionHelper.isInitialized()) { |
| 37 | + Properties allMavenProps = new Properties(); |
| 38 | + allMavenProps.putAll(request.getSystemProperties()); |
| 39 | + allMavenProps.putAll(request.getUserProperties()); |
| 40 | + resolutionHelper.init(allMavenProps); |
| 41 | + } |
| 42 | + |
| 43 | + // We're setting the resolver repositories to the list of repositories. |
30 | 44 | // This repository replaces the central repository.
|
31 | 45 | // This ensures that parent poms with snapshot versions can be downloaded from Artifactory.
|
32 |
| - request.setRemoteRepositories(getDummyRepo()); |
| 46 | + List<ArtifactRepository> repositories = getRepositories(); |
| 47 | + request.setRemoteRepositories(repositories); |
| 48 | + request.setPluginArtifactRepositories(repositories); |
33 | 49 | }
|
34 | 50 | return super.build(pomFiles, recursive, request);
|
35 | 51 | }
|
36 | 52 |
|
37 |
| - private List<ArtifactRepository> getDummyRepo() { |
38 |
| - ArtifactRepository repo = new MavenArtifactRepository("dummy", |
39 |
| - "http://ArtifactoryDummyRepo./dummy", |
40 |
| - new DefaultRepositoryLayout(), |
41 |
| - new ArtifactRepositoryPolicy(), |
42 |
| - new ArtifactRepositoryPolicy()); |
43 |
| - return new ArrayList<ArtifactRepository>(Collections.singletonList(repo)); |
| 53 | + private List<ArtifactRepository> getRepositories() { |
| 54 | + List<ArtifactRepository> repositories = new ArrayList<>(); |
| 55 | + |
| 56 | + String releaseRepoUrl = resolutionHelper.getRepoReleaseUrl(); |
| 57 | + String snapshotRepoUrl = resolutionHelper.getRepoSnapshotUrl(); |
| 58 | + |
| 59 | + org.apache.maven.artifact.repository.Authentication authentication = null; |
| 60 | + if (StringUtils.isNotBlank(resolutionHelper.getRepoUsername())) { |
| 61 | + authentication = new org.apache.maven.artifact.repository.Authentication(resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword()); |
| 62 | + } |
| 63 | + org.apache.maven.repository.Proxy proxy = null; |
| 64 | + if (StringUtils.isNotBlank(resolutionHelper.getProxyHost())) { |
| 65 | + proxy = new org.apache.maven.repository.Proxy(); |
| 66 | + proxy.setHost(resolutionHelper.getProxyHost()); |
| 67 | + proxy.setPort(resolutionHelper.getProxyPort()); |
| 68 | + proxy.setUserName(resolutionHelper.getProxyUsername()); |
| 69 | + proxy.setPassword(resolutionHelper.getProxyPassword()); |
| 70 | + } |
| 71 | + |
| 72 | + if (StringUtils.isNotBlank(snapshotRepoUrl)) { |
| 73 | + ArtifactRepositoryPolicy snapshotPolicy = new ArtifactRepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN); |
| 74 | + ArtifactRepositoryPolicy releasePolicy = new ArtifactRepositoryPolicy(false, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN); |
| 75 | + MavenArtifactRepository repository = new MavenArtifactRepository("artifactory-snapshot", snapshotRepoUrl, new DefaultRepositoryLayout(), snapshotPolicy, releasePolicy); |
| 76 | + |
| 77 | + if (authentication != null) { |
| 78 | + repository.setAuthentication(authentication); |
| 79 | + } |
| 80 | + if (proxy != null) { |
| 81 | + repository.setProxy(proxy); |
| 82 | + } |
| 83 | + |
| 84 | + repositories.add(repository); |
| 85 | + } |
| 86 | + if (StringUtils.isNotBlank(releaseRepoUrl)) { |
| 87 | + boolean snapshotPolicyEnabled = StringUtils.isBlank(snapshotRepoUrl); |
| 88 | + String repositoryId = snapshotPolicyEnabled ? "artifactory-release-snapshot" : "artifactory-release"; |
| 89 | + |
| 90 | + ArtifactRepositoryPolicy snapshotPolicy = new ArtifactRepositoryPolicy(snapshotPolicyEnabled, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN); |
| 91 | + ArtifactRepositoryPolicy releasePolicy = new ArtifactRepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN); |
| 92 | + MavenArtifactRepository repository = new MavenArtifactRepository(repositoryId, releaseRepoUrl, new DefaultRepositoryLayout(), snapshotPolicy, releasePolicy); |
| 93 | + |
| 94 | + if (authentication != null) { |
| 95 | + repository.setAuthentication(authentication); |
| 96 | + } |
| 97 | + if (proxy != null) { |
| 98 | + repository.setProxy(proxy); |
| 99 | + } |
| 100 | + |
| 101 | + repositories.add(repository); |
| 102 | + } |
| 103 | + return repositories; |
44 | 104 | }
|
45 | 105 | }
|
0 commit comments