X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2Fmaven%2FImportMavenDependencies.java;h=bde774526c48354f35bb6e70ceb9292e54e493fe;hb=496f697b423f25a732d7d2e5b0405cfed0c31393;hp=3f001546558805a998ca442bb7118847008856ce;hpb=85f08be9b08c3938d25c46cae5b56dd0c4543cc7;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java index 3f0015465..bde774526 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java @@ -53,7 +53,8 @@ public class ImportMavenDependencies implements Runnable { .getLog(ImportMavenDependencies.class); private AetherTemplate aetherTemplate; - private String rootCoordinates; + private String rootCoordinates = "org.argeo.dep:versions-all:pom:1.2.0"; + private String distCoordinates = "org.argeo.tp:dist:pom:1.3.0"; private Set excludedArtifacts = new HashSet(); private Repository repository; @@ -74,6 +75,10 @@ public class ImportMavenDependencies implements Runnable { Set artifacts = resolveDistribution(); // sync + sync(artifacts); + } + + void sync(Set artifacts) { Session session = null; try { session = JcrUtils.loginOrCreateWorkspace(repository, workspace); @@ -81,7 +86,8 @@ public class ImportMavenDependencies implements Runnable { NodeIterator nit = session.getNode(artifactBasePath).getNodes(); while (nit.hasNext()) { Node node = nit.nextNode(); - if (node.isNodeType(NodeType.NT_FOLDER)) + if (node.isNodeType(NodeType.NT_FOLDER) + || node.isNodeType(NodeType.NT_UNSTRUCTURED)) node.remove(); } session.save(); @@ -93,7 +99,11 @@ public class ImportMavenDependencies implements Runnable { } } - private Set resolveDistribution() { + /** + * Generate a POM with all the artifacts declared in root coordinates as + * dependencies AND in dependency management. + */ + void createDistPom() { try { Artifact pomArtifact = new DefaultArtifact(rootCoordinates); @@ -101,42 +111,58 @@ public class ImportMavenDependencies implements Runnable { artifactComparator); MavenConventionsUtils.gatherPomDependencies(aetherTemplate, registeredArtifacts, pomArtifact); - Artifact sdkArtifact = new DefaultArtifact( - "org.argeo.tp:dist:pom:1.3.0"); + Artifact sdkArtifact = new DefaultArtifact(distCoordinates); String sdkPom = MavenConventionsUtils.artifactsAsDependencyPom( sdkArtifact, registeredArtifacts); if (log.isDebugEnabled()) log.debug("Gathered " + registeredArtifacts.size() + " artifacts:\n" + sdkPom); - // Resolve and add non-optional dependencies + } catch (Exception e) { + throw new SlcException("Cannot resolve distribution", e); + } + } + + /** Returns all transitive dependencies of dist POM */ + private Set resolveDistribution() { + try { + Artifact distArtifact = new DefaultArtifact(distCoordinates); Set artifacts = new TreeSet(artifactComparator); - /* - for (Artifact artifact : registeredArtifacts) { - try { - Boolean wasAdded = addArtifact(artifacts, artifact); - if (wasAdded) { - DependencyNode node = aetherTemplate - .resolveDependencies(artifact); - addDependencies(artifacts, node, null); - } - } catch (Exception e) { - log.error("Could not resolve dependencies of " + artifact - + ": " + e.getCause().getMessage()); - } - } + DependencyNode node = aetherTemplate + .resolveDependencies(distArtifact); + addDependencies(artifacts, node, null); - if (log.isDebugEnabled()) + if (log.isDebugEnabled()) { log.debug("Resolved " + artifacts.size() + " artifacts"); - // distribution descriptor - // Properties distributionDescriptor = - // generateDistributionDescriptor(artifacts); - // ByteArrayOutputStream out = new ByteArrayOutputStream(); - // distributionDescriptor.store(out, ""); - // log.debug(new String(out.toByteArray())); - // out.close(); -*/ + // Properties distributionDescriptor = + // generateDistributionDescriptor(artifacts); + // ByteArrayOutputStream out = new ByteArrayOutputStream(); + // distributionDescriptor.store(out, ""); + // log.debug(new String(out.toByteArray())); + // out.close(); + } + + /* + * for (Artifact artifact : registeredArtifacts) { try { Boolean + * wasAdded = addArtifact(artifacts, artifact); if (wasAdded) { + * DependencyNode node = aetherTemplate + * .resolveDependencies(artifact); addDependencies(artifacts, node, + * null); } } catch (Exception e) { + * log.error("Could not resolve dependencies of " + artifact + ": " + * + e.getCause().getMessage()); } + * + * } + * + * if (log.isDebugEnabled()) log.debug("Resolved " + + * artifacts.size() + " artifacts"); + * + * // distribution descriptor // Properties distributionDescriptor = + * // generateDistributionDescriptor(artifacts); // + * ByteArrayOutputStream out = new ByteArrayOutputStream(); // + * distributionDescriptor.store(out, ""); // log.debug(new + * String(out.toByteArray())); // out.close(); + */ return artifacts; } catch (Exception e) { throw new SlcException("Cannot resolve distribution", e); @@ -154,13 +180,23 @@ public class ImportMavenDependencies implements Runnable { return distributionDescriptor; } - private void syncDistribution(Session jcrSession, Set artifacts) { + /** Write artifacts to the target workspace, skipping excluded ones */ + protected void syncDistribution(Session jcrSession, Set artifacts) { Set artifactsWithoutSources = new TreeSet( artifactComparator); Long begin = System.currentTimeMillis(); try { - JcrUtils.mkdirs(jcrSession, artifactBasePath); + JcrUtils.mkdirs(jcrSession, artifactBasePath, NodeType.NT_FOLDER, + NodeType.NT_FOLDER, false); artifacts: for (Artifact artifact : artifacts) { + // skip excluded + if (excludedArtifacts.contains(artifact.getGroupId() + ":" + + artifact.getArtifactId())) { + if (log.isDebugEnabled()) + log.debug("Exclude " + artifact); + continue artifacts; + } + File jarFile = MavenConventionsUtils.artifactToFile(artifact); if (!jarFile.exists()) { log.warn("Generated file " + jarFile + " for " + artifact @@ -175,7 +211,7 @@ public class ImportMavenDependencies implements Runnable { Node parentNode; if (!jcrSession.itemExists(parentPath)) parentNode = JcrUtils.mkdirs(jcrSession, parentPath, - NodeType.NT_FOLDER); + NodeType.NT_FOLDER, NodeType.NT_FOLDER, false); else parentNode = jcrSession.getNode(parentPath); @@ -192,7 +228,8 @@ public class ImportMavenDependencies implements Runnable { jarFileIndexer.index(fileNode); jcrSession.save(); - addPdeSource(jcrSession, artifact, jarFile, artifacts); + addPdeSource(jcrSession, artifact, jarFile, + artifactsWithoutSources); jcrSession.save(); if (log.isDebugEnabled()) @@ -240,9 +277,9 @@ public class ImportMavenDependencies implements Runnable { .getResolvedFile(origSourceArtifact); } - String parentPath = MavenConventionsUtils.artifactParentPath( - artifactBasePath, artifact); - Node parentNode = JcrUtils.mkdirs(session, parentPath, + String sourceParentPath = MavenConventionsUtils.artifactParentPath( + artifactBasePath, targetSourceArtifact); + Node sourceParentNode = JcrUtils.mkdirs(session, sourceParentPath, NodeType.NT_FOLDER); NameVersion bundleNameVersion = RepoUtils .readNameVersion(artifactFile); @@ -250,7 +287,7 @@ public class ImportMavenDependencies implements Runnable { out); String targetSourceFileName = MavenConventionsUtils .artifactFileName(targetSourceArtifact); - JcrUtils.copyBytesAsFile(parentNode, targetSourceFileName, + JcrUtils.copyBytesAsFile(sourceParentNode, targetSourceFileName, out.toByteArray()); } catch (Exception e) { log.error("Cannot add PDE source for " + artifact + ": " + e); @@ -267,8 +304,8 @@ public class ImportMavenDependencies implements Runnable { /** Recursively adds non optional dependencies */ private void addDependencies(Set artifacts, DependencyNode node, String ancestors) { - if (artifacts.contains(node.getDependency().getArtifact())) - return; + // if (artifacts.contains(node.getDependency().getArtifact())) + // return; String currentArtifactId = node.getDependency().getArtifact() .getArtifactId(); if (log.isDebugEnabled()) { @@ -327,4 +364,12 @@ public class ImportMavenDependencies implements Runnable { this.workspace = workspace; } + public void setDistCoordinates(String distCoordinates) { + this.distCoordinates = distCoordinates; + } + + public void setArtifactBasePath(String artifactBasePath) { + this.artifactBasePath = artifactBasePath; + } + }