io.tesla.maven.plugins.util.AetherUtils Maven / Gradle / Ivy
The newest version!
package io.tesla.maven.plugins.util;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.model.Repository;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.ArtifactProperties;
import org.eclipse.aether.artifact.ArtifactType;
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.artifact.DefaultArtifactType;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.graph.Exclusion;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
/**
* Warning: This is an internal utility class that is only public for technical reasons, it is not part
* of the public API. In particular, this class can be changed or deleted without prior notice.
*
* @author Benjamin Bentmann
*/
public class AetherUtils {
//
// Repository Utils
//
private static String nullify(String string) {
return (string == null || string.length() <= 0) ? null : string;
}
private static org.apache.maven.artifact.Artifact toArtifact(Dependency dependency) {
if (dependency == null) {
return null;
}
org.apache.maven.artifact.Artifact result = toArtifact(dependency.getArtifact());
result.setScope(dependency.getScope());
result.setOptional(dependency.isOptional());
return result;
}
public static org.apache.maven.artifact.Artifact toArtifact(Artifact artifact) {
if (artifact == null) {
return null;
}
ArtifactHandler handler = newHandler(artifact);
/*
* NOTE: From Artifact.hasClassifier(), an empty string and a null both denote "no classifier". However, some plugins only check for null, so be sure to nullify an empty classifier.
*/
org.apache.maven.artifact.Artifact result = new org.apache.maven.artifact.DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), null, artifact.getProperty(
ArtifactProperties.TYPE, artifact.getExtension()), nullify(artifact.getClassifier()), handler);
result.setFile(artifact.getFile());
result.setResolved(artifact.getFile() != null);
List trail = new ArrayList(1);
trail.add(result.getId());
result.setDependencyTrail(trail);
return result;
}
public static void toArtifacts(Collection artifacts, Collection extends DependencyNode> nodes, List trail, DependencyFilter filter) {
for (DependencyNode node : nodes) {
org.apache.maven.artifact.Artifact artifact = toArtifact(node.getDependency());
List nodeTrail = new ArrayList(trail.size() + 1);
nodeTrail.addAll(trail);
nodeTrail.add(artifact.getId());
if (filter == null || filter.accept(node, Collections. emptyList())) {
artifact.setDependencyTrail(nodeTrail);
artifacts.add(artifact);
}
toArtifacts(artifacts, node.getChildren(), nodeTrail, filter);
}
}
public static Artifact toArtifact(org.apache.maven.artifact.Artifact artifact) {
if (artifact == null) {
return null;
}
String version = artifact.getVersion();
if (version == null && artifact.getVersionRange() != null) {
version = artifact.getVersionRange().toString();
}
Map props = null;
if (org.apache.maven.artifact.Artifact.SCOPE_SYSTEM.equals(artifact.getScope())) {
String localPath = (artifact.getFile() != null) ? artifact.getFile().getPath() : "";
props = Collections.singletonMap(ArtifactProperties.LOCAL_PATH, localPath);
}
Artifact result = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getClassifier(), artifact.getArtifactHandler().getExtension(), version, props, newArtifactType(
artifact.getType(), artifact.getArtifactHandler()));
result = result.setFile(artifact.getFile());
return result;
}
public static Dependency toDependency(org.apache.maven.artifact.Artifact artifact, Collection exclusions) {
if (artifact == null) {
return null;
}
Artifact result = toArtifact(artifact);
List excl = null;
if (exclusions != null) {
excl = new ArrayList(exclusions.size());
for (org.apache.maven.model.Exclusion exclusion : exclusions) {
excl.add(toExclusion(exclusion));
}
}
return new Dependency(result, artifact.getScope(), artifact.isOptional(), excl);
}
public static List toRepos(List repos) {
if (repos == null) {
return null;
}
List results = new ArrayList(repos.size());
for (ArtifactRepository repo : repos) {
results.add(toRepo(repo));
}
return results;
}
public static RemoteRepository toRepo(ArtifactRepository repo) {
RemoteRepository result = null;
if (repo != null) {
RemoteRepository.Builder builder = new RemoteRepository.Builder(repo.getId(), getLayout(repo), repo.getUrl());
builder.setSnapshotPolicy(toPolicy(repo.getSnapshots()));
builder.setReleasePolicy(toPolicy(repo.getReleases()));
builder.setAuthentication(toAuthentication(repo.getAuthentication()));
builder.setProxy(toProxy(repo.getProxy()));
builder.setMirroredRepositories(toRepos(repo.getMirroredRepositories()));
result = builder.build();
}
return result;
}
public static String getLayout(ArtifactRepository repo) {
try {
return repo.getLayout().getId();
} catch (LinkageError e) {
/*
* NOTE: getId() was added in 3.x and is as such not implemented by plugins compiled against 2.x APIs.
*/
String className = repo.getLayout().getClass().getSimpleName();
if (className.endsWith("RepositoryLayout")) {
String layout = className.substring(0, className.length() - "RepositoryLayout".length());
if (layout.length() > 0) {
layout = Character.toLowerCase(layout.charAt(0)) + layout.substring(1);
return layout;
}
}
return "";
}
}
private static RepositoryPolicy toPolicy(ArtifactRepositoryPolicy policy) {
RepositoryPolicy result = null;
if (policy != null) {
result = new RepositoryPolicy(policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy());
}
return result;
}
private static Authentication toAuthentication(org.apache.maven.artifact.repository.Authentication auth) {
Authentication result = null;
if (auth != null) {
AuthenticationBuilder authBuilder = new AuthenticationBuilder();
authBuilder.addUsername(auth.getUsername()).addPassword(auth.getPassword());
authBuilder.addPrivateKey(auth.getPrivateKey(), auth.getPassphrase());
result = authBuilder.build();
}
return result;
}
private static Proxy toProxy(org.apache.maven.repository.Proxy proxy) {
Proxy result = null;
if (proxy != null) {
AuthenticationBuilder authBuilder = new AuthenticationBuilder();
authBuilder.addUsername(proxy.getUserName()).addPassword(proxy.getPassword());
result = new Proxy(proxy.getProtocol(), proxy.getHost(), proxy.getPort(), authBuilder.build());
}
return result;
}
public static ArtifactHandler newHandler(Artifact artifact) {
String type = artifact.getProperty(ArtifactProperties.TYPE, artifact.getExtension());
DefaultArtifactHandler handler = new DefaultArtifactHandler(type);
handler.setExtension(artifact.getExtension());
handler.setLanguage(artifact.getProperty(ArtifactProperties.LANGUAGE, null));
handler.setAddedToClasspath(Boolean.parseBoolean(artifact.getProperty(ArtifactProperties.CONSTITUTES_BUILD_PATH, "")));
handler.setIncludesDependencies(Boolean.parseBoolean(artifact.getProperty(ArtifactProperties.INCLUDES_DEPENDENCIES, "")));
return handler;
}
public static ArtifactType newArtifactType(String id, ArtifactHandler handler) {
return new DefaultArtifactType(id, handler.getExtension(), handler.getClassifier(), handler.getLanguage(), handler.isAddedToClasspath(), handler.isIncludesDependencies());
}
public static Dependency toDependency(org.apache.maven.model.Dependency dependency, ArtifactTypeRegistry stereotypes) {
ArtifactType stereotype = stereotypes.get(dependency.getType());
if (stereotype == null) {
stereotype = new DefaultArtifactType(dependency.getType());
}
boolean system = dependency.getSystemPath() != null && dependency.getSystemPath().length() > 0;
Map props = null;
if (system) {
props = Collections.singletonMap(ArtifactProperties.LOCAL_PATH, dependency.getSystemPath());
}
Artifact artifact = new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null, dependency.getVersion(), props, stereotype);
List exclusions = new ArrayList(dependency.getExclusions().size());
for (org.apache.maven.model.Exclusion exclusion : dependency.getExclusions()) {
exclusions.add(toExclusion(exclusion));
}
Dependency result = new Dependency(artifact, dependency.getScope(), dependency.isOptional(), exclusions);
return result;
}
private static Exclusion toExclusion(org.apache.maven.model.Exclusion exclusion) {
return new Exclusion(exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*");
}
public static ArtifactTypeRegistry newArtifactTypeRegistry(ArtifactHandlerManager handlerManager) {
return new MavenArtifactTypeRegistry(handlerManager);
}
static class MavenArtifactTypeRegistry implements ArtifactTypeRegistry {
private final ArtifactHandlerManager handlerManager;
public MavenArtifactTypeRegistry(ArtifactHandlerManager handlerManager) {
this.handlerManager = handlerManager;
}
public ArtifactType get(String stereotypeId) {
ArtifactHandler handler = handlerManager.getArtifactHandler(stereotypeId);
return newArtifactType(stereotypeId, handler);
}
}
//
// ArtifactDescriptor Utils
//
public static Artifact toPomArtifact(Artifact artifact) {
Artifact pomArtifact = artifact;
if (pomArtifact.getClassifier().length() > 0 || !"pom".equals(pomArtifact.getExtension())) {
pomArtifact = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), "pom", artifact.getVersion());
}
return pomArtifact;
}
public static RemoteRepository toRemoteRepository(Repository repository) {
RemoteRepository.Builder builder = new RemoteRepository.Builder(repository.getId(), repository.getLayout(), repository.getUrl());
builder.setSnapshotPolicy(toRepositoryPolicy(repository.getSnapshots()));
builder.setReleasePolicy(toRepositoryPolicy(repository.getReleases()));
return builder.build();
}
public static RepositoryPolicy toRepositoryPolicy(org.apache.maven.model.RepositoryPolicy policy) {
boolean enabled = true;
String checksums = RepositoryPolicy.CHECKSUM_POLICY_WARN;
String updates = RepositoryPolicy.UPDATE_POLICY_DAILY;
if (policy != null) {
enabled = policy.isEnabled();
if (policy.getUpdatePolicy() != null) {
updates = policy.getUpdatePolicy();
}
if (policy.getChecksumPolicy() != null) {
checksums = policy.getChecksumPolicy();
}
}
return new RepositoryPolicy(enabled, updates, checksums);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy