package org.argeo.slc.factory.m2; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.Set; /** * Static utilities around Maven which are NOT using the Maven APIs (conventions * based). */ public class MavenConventionsUtils { public final static String MAVEN_CENTRAL_BASE_URL = "https://repo1.maven.org/maven2/"; /** * Path to the file identified by this artifact without using Maven APIs * (convention based). Default location of repository (~/.m2/repository) is used * here. * * @see MavenConventionsUtils#artifactToFile(String, Artifact) */ public static File artifactToFile(Artifact artifact) { return artifactToFile(System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository", artifact); } /** * Path to the file identified by this artifact without using Maven APIs * (convention based). * * @param repositoryPath path to the related local repository location * @param artifact the artifact */ public static File artifactToFile(String repositoryPath, Artifact artifact) { return new File(repositoryPath + File.separator + artifact.getGroupId().replace('.', File.separatorChar) + File.separator + artifact.getArtifactId() + File.separator + artifact.getVersion() + File.separator + artifactFileName(artifact)).getAbsoluteFile(); } /** The file name of this artifact when stored */ public static String artifactFileName(Artifact artifact) { return artifact.getArtifactId() + '-' + artifact.getVersion() + (artifact.getClassifier().equals("") ? "" : '-' + artifact.getClassifier()) + '.' + artifact.getExtension(); } /** Absolute path to the file */ public static String artifactPath(String artifactBasePath, Artifact artifact) { return artifactParentPath(artifactBasePath, artifact) + '/' + artifactFileName(artifact); } /** Absolute path to the file */ public static String artifactUrl(String repoUrl, Artifact artifact) { if (repoUrl.endsWith("/")) return repoUrl + artifactPath("/", artifact).substring(1); else return repoUrl + artifactPath("/", artifact); } /** Absolute path to the file */ public static URL mavenCentralUrl(Artifact artifact) { String url = artifactUrl(MAVEN_CENTRAL_BASE_URL, artifact); try { return new URL(url); } catch (MalformedURLException e) { // it should not happen throw new IllegalStateException(e); } } /** Absolute path to the directories where the files will be stored */ public static String artifactParentPath(String artifactBasePath, Artifact artifact) { return artifactBasePath + (artifactBasePath.endsWith("/") ? "" : "/") + artifactParentPath(artifact); } /** Absolute path to the directory of this group */ public static String groupPath(String artifactBasePath, String groupId) { return artifactBasePath + (artifactBasePath.endsWith("/") ? "" : "/") + groupId.replace('.', '/'); } /** Relative path to the directories where the files will be stored */ public static String artifactParentPath(Artifact artifact) { return artifact.getGroupId().replace('.', '/') + '/' + artifact.getArtifactId() + '/' + artifact.getBaseVersion(); } public static String artifactsAsDependencyPom(Artifact pomArtifact, Set artifacts, Artifact parent) { StringBuffer p = new StringBuffer(); // XML header p.append("\n"); p.append( "\n"); p.append("4.0.0\n"); // Artifact if (parent != null) { p.append("\n"); p.append("").append(parent.getGroupId()).append("\n"); p.append("").append(parent.getArtifactId()).append("\n"); p.append("").append(parent.getVersion()).append("\n"); p.append("\n"); } p.append("").append(pomArtifact.getGroupId()).append("\n"); p.append("").append(pomArtifact.getArtifactId()).append("\n"); p.append("").append(pomArtifact.getVersion()).append("\n"); p.append("pom\n"); // Dependencies p.append("\n"); for (Artifact a : artifacts) { p.append("\t"); p.append("").append(a.getArtifactId()).append(""); p.append("").append(a.getGroupId()).append(""); if (!a.getExtension().equals("jar")) p.append("").append(a.getExtension()).append(""); p.append("\n"); } p.append("\n"); // Dependency management p.append("\n"); p.append("\n"); for (Artifact a : artifacts) { p.append("\t"); p.append("").append(a.getArtifactId()).append(""); p.append("").append(a.getVersion()).append(""); p.append("").append(a.getGroupId()).append(""); if (a.getExtension().equals("pom")) { p.append("").append(a.getExtension()).append(""); p.append("import"); } p.append("\n"); } p.append("\n"); p.append("\n"); // Repositories // p.append("\n"); // p.append("argeohttp://maven.argeo.org/argeo\n"); // p.append("\n"); p.append("\n"); return p.toString(); } /** Singleton */ private MavenConventionsUtils() { } }