You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by me...@apache.org on 2006/09/19 01:39:26 UTC

svn commit: r447640 - in /incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven: MavenArtifactRepository.java MavenEmbedder.java MavenHelper.java

Author: meerajk
Date: Mon Sep 18 16:39:25 2006
New Revision: 447640

URL: http://svn.apache.org/viewvc?view=rev&rev=447640
Log:
Refactored Maven helper.

Added:
    incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java
      - copied, changed from r447612, incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenEmbedder.java
Removed:
    incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenEmbedder.java
Modified:
    incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java

Modified: incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java?view=diff&rev=447640&r1=447639&r2=447640
==============================================================================
--- incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java (original)
+++ incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java Mon Sep 18 16:39:25 2006
@@ -18,26 +18,10 @@
  */
 package org.apache.tuscany.services.maven;
 
-import java.net.MalformedURLException;
-import java.rmi.server.UID;
 import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.metadata.ResolutionGroup;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.embedder.MavenEmbedder;
-import org.apache.maven.embedder.MavenEmbedderException;
 import org.apache.tuscany.spi.services.artifact.Artifact;
 import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
-import org.codehaus.classworlds.ClassWorld;
-import org.codehaus.classworlds.DuplicateRealmException;
-import org.codehaus.plexus.PlexusContainerException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.embed.Embedder;
 import org.osoa.sca.annotations.Destroy;
 
 /**
@@ -50,42 +34,16 @@
  * @version $Rev$ $Date$
  */
 public class MavenArtifactRepository implements ArtifactRepository {
-
-    /** Local repository for resolving artifacts */
-    private org.apache.maven.artifact.repository.ArtifactRepository localRepository;
-
-    /** Remote repositories for resolving artifacts */
-    private List<org.apache.maven.artifact.repository.ArtifactRepository> remoteRepositories = new LinkedList<org.apache.maven.artifact.repository.ArtifactRepository>();
-
-    /** Maven embedder */
-    private MavenEmbedder mavenEmbedder;
-
-    /** Maven metadata source */
-    private ArtifactMetadataSource metadataSource;
+    
+    /** Maven helper */
+    private MavenHelper mavenHelper;
 
     /**
      * Conctructs a new artifact repository.
      */
     public MavenArtifactRepository(String[] remoteRepoUrls) {
-
-        try {
-
-            getMetadataSource();
-
-            mavenEmbedder = new MavenEmbedder();
-            mavenEmbedder.setClassLoader(getClass().getClassLoader());
-            mavenEmbedder.start();
-
-            localRepository = mavenEmbedder.getLocalRepository();
-            for (String remoteRepoUrl : remoteRepoUrls) {
-                remoteRepositories.add(mavenEmbedder.createRepository(new UID().toString(), remoteRepoUrl));
-            }
-        } catch (MavenEmbedderException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (ComponentLookupException ex) {
-            throw new TuscanyMavenException(ex);
-        }
-
+        mavenHelper = new MavenHelper(remoteRepoUrls);
+        mavenHelper.start();
     }
 
     /**
@@ -96,51 +54,7 @@
      * @param artifact the artifact to be resolved
      */
     public void resolve(Artifact rootArtifact) {
-
-        try {
-
-            org.apache.maven.artifact.Artifact mavenRootArtifact = mavenEmbedder.createArtifact(rootArtifact.getGroup(), rootArtifact.getName(),
-                    rootArtifact.getVersion(), org.apache.maven.artifact.Artifact.SCOPE_RUNTIME, rootArtifact.getType());
-
-            resolveTransitively(mavenRootArtifact, mavenEmbedder, rootArtifact);
-
-        } catch (ArtifactResolutionException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (ArtifactNotFoundException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (MalformedURLException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (ArtifactMetadataRetrievalException ex) {
-            throw new TuscanyMavenException(ex);
-        }
-
-    }
-
-    /*
-     * Resolve the dependency transitively.
-     */
-    private void resolveTransitively(org.apache.maven.artifact.Artifact mavenRootArtifact, MavenEmbedder mavenEmbedder, Artifact rootArtifact)
-            throws ArtifactMetadataRetrievalException, ArtifactResolutionException, ArtifactNotFoundException, MalformedURLException {
-
-        mavenEmbedder.resolve(mavenRootArtifact, remoteRepositories, localRepository);
-
-        if (rootArtifact.getUrl() == null) {
-            rootArtifact.setUrl(mavenRootArtifact.getFile().toURL());
-        } else {
-            Artifact artifact = new Artifact();
-            artifact.setName(mavenRootArtifact.getArtifactId());
-            artifact.setGroup(mavenRootArtifact.getGroupId());
-            artifact.setType(mavenRootArtifact.getType());
-            artifact.setClassifier(mavenRootArtifact.getClassifier());
-            artifact.setUrl(mavenRootArtifact.getFile().toURL());
-            rootArtifact.addDependency(artifact);
-        }
-        ResolutionGroup resolutionGroup = metadataSource.retrieve(mavenRootArtifact, localRepository, remoteRepositories);
-
-        for (Object dependency : resolutionGroup.getArtifacts()) {
-            resolveTransitively((org.apache.maven.artifact.Artifact) dependency, mavenEmbedder, rootArtifact);
-        }
-
+        mavenHelper.resolveTransitively(rootArtifact);
     }
 
     /**
@@ -161,34 +75,7 @@
      */
     @Destroy
     public void destroy() {
-        try {
-            mavenEmbedder.stop();
-        } catch (MavenEmbedderException ex) {
-            throw new TuscanyMavenException(ex);
-        }
-    }
-
-    /*
-     * Looks up the metadata source.
-     */
-    private void getMetadataSource() {
-
-        try {
-            ClassWorld classWorld = new ClassWorld();
-            classWorld.newRealm("test", getClass().getClassLoader());
-            Embedder embedder = new Embedder();
-            embedder.setClassWorld(classWorld);
-            embedder.start();
-            metadataSource = (ArtifactMetadataSource) embedder.lookup(ArtifactMetadataSource.ROLE);
-            embedder.stop();
-        } catch (DuplicateRealmException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (PlexusContainerException ex) {
-            throw new TuscanyMavenException(ex);
-        } catch (ComponentLookupException ex) {
-            throw new TuscanyMavenException(ex);
-        }
-
+        mavenHelper.stop();
     }
 
 }

Copied: incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java (from r447612, incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenEmbedder.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java?view=diff&rev=447640&p1=incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenEmbedder.java&r1=447612&p2=incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java&r2=447640
==============================================================================
--- incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenEmbedder.java (original)
+++ incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java Mon Sep 18 16:39:25 2006
@@ -18,22 +18,204 @@
  */
 package org.apache.tuscany.services.maven;
 
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.DuplicateRealmException;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.embed.Embedder;
+
 /**
  * Utility class for embedding Maven.
  * 
  * @version $Rev$ $Date$
  */
-public class MavenEmbedder {
-    
+public class MavenHelper {
+
+    /** Local repository */
+    private static final File LOCAL_REPO = new File(System.getProperty("user.home") + File.separator + "m2" + File.separator + "repository");
+
     /** Remote repositories */
     private String[] remoteRepositoryUrls;
-    
+
+    /** Maven metadata source */
+    private ArtifactMetadataSource metadataSource;
+
+    /** Artifact factory */
+    private ArtifactFactory artifactFactory;
+
+    /** Local artifact repository */
+    private ArtifactRepository localRepository;
+
+    /** Remote artifact repositories */
+    private List<ArtifactRepository> remoteRepositories = new LinkedList<ArtifactRepository>();
+
+    /** Artifact resolver */
+    private ArtifactResolver artifactResolver;
+
     /**
-     * Initialize the remote 
+     * Initialize the remote repository URLs.
+     * 
      * @param remoteRepositoryUrls
+     *            Remote repository URLS.
      */
-    public MavenEmbedder(String[] remoteRepositoryUrls) {
+    public MavenHelper(String[] remoteRepositoryUrls) {
         this.remoteRepositoryUrls = remoteRepositoryUrls;
+    }
+
+    /**
+     * Starts the embedder.
+     * 
+     * @throws TuscanyMavenException
+     *             If unable to start the embedder.
+     */
+    public void start() throws TuscanyMavenException {
+
+        try {
+
+            Embedder embedder = new Embedder();
+            ClassWorld classWorld = new ClassWorld();
+            classWorld.newRealm("plexus.core", getClass().getClassLoader());
+
+            embedder.start(classWorld);
+
+            metadataSource = (ArtifactMetadataSource) embedder.lookup(ArtifactMetadataSource.ROLE);
+            artifactFactory = (ArtifactFactory) embedder.lookup(ArtifactFactory.ROLE);
+            artifactResolver = (ArtifactResolver) embedder.lookup(ArtifactResolver.ROLE);
+
+            setUpRepositories(embedder);
+
+        } catch (DuplicateRealmException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (PlexusContainerException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (ComponentLookupException ex) {
+            throw new TuscanyMavenException(ex);
+        }
+
+    }
+
+    /**
+     * Stops the embedder.
+     * 
+     * @throws TuscanyMavenException
+     *             If unable to stop the embedder.
+     */
+    public void stop() throws TuscanyMavenException {
+    }
+
+    /**
+     * Resolves the dependencies transitively.
+     * 
+     * @param artifact
+     *            Artifact whose dependencies need to be resolved.
+     * @throws TuscanyMavenException
+     *             If unable to resolve the dependencies.
+     */
+    public void resolveTransitively(Artifact rootArtifact) throws TuscanyMavenException {
+
+        org.apache.maven.artifact.Artifact mavenRootArtifact = artifactFactory.createArtifact(rootArtifact.getGroup(), rootArtifact.getName(),
+                rootArtifact.getVersion(), org.apache.maven.artifact.Artifact.SCOPE_RUNTIME, rootArtifact.getType());
+        try {
+
+            artifactResolver.resolve(mavenRootArtifact, remoteRepositories, localRepository);
+            rootArtifact.setUrl(mavenRootArtifact.getFile().toURL());
+
+            resolveDependencies(rootArtifact, mavenRootArtifact);
+
+        } catch (ArtifactResolutionException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (ArtifactNotFoundException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (MalformedURLException ex) {
+            throw new TuscanyMavenException(ex);
+        }
+
+    }
+
+    /*
+     * Sets up local and remote repositories.
+     */
+    private void setUpRepositories(Embedder embedder) {
+
+        try {
+
+            ArtifactRepositoryFactory artifactRepositoryFactory = (ArtifactRepositoryFactory) embedder.lookup(ArtifactRepositoryFactory.ROLE);
+
+            ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) embedder.lookup(ArtifactRepositoryLayout.ROLE, "default");
+
+            String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
+            String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+
+            ArtifactRepositoryPolicy snapshotsPolicy = new ArtifactRepositoryPolicy(true, updatePolicyFlag, checksumPolicyFlag);
+            ArtifactRepositoryPolicy releasesPolicy = new ArtifactRepositoryPolicy(true, updatePolicyFlag, checksumPolicyFlag);
+
+            localRepository = artifactRepositoryFactory.createArtifactRepository("local", LOCAL_REPO.toURL().toExternalForm(), layout,
+                    snapshotsPolicy, releasesPolicy);
+
+            for (String remoteRespositoryUrl : remoteRepositoryUrls) {
+                remoteRepositories.add(artifactRepositoryFactory.createArtifactRepository(remoteRespositoryUrl, remoteRespositoryUrl, layout,
+                        snapshotsPolicy, releasesPolicy));
+            }
+
+        } catch (MalformedURLException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (ComponentLookupException ex) {
+            throw new TuscanyMavenException(ex);
+        }
+
+    }
+
+    /*
+     * Resolves transitive dependencies.
+     */
+    private void resolveDependencies(Artifact rootArtifact, org.apache.maven.artifact.Artifact mavenRootArtifact) {
+
+        try {
+
+            ResolutionGroup resolutionGroup = metadataSource.retrieve(mavenRootArtifact, localRepository, remoteRepositories);
+            ArtifactResolutionResult result = artifactResolver.resolveTransitively(resolutionGroup.getArtifacts(), mavenRootArtifact,
+                    remoteRepositories, localRepository, metadataSource);
+
+            // Add the artifacts to the deployment unit
+            for (org.apache.maven.artifact.Artifact depArtifact : (Set<org.apache.maven.artifact.Artifact>) result.getArtifacts()) {
+                Artifact artifact = new Artifact();
+                artifact.setName(mavenRootArtifact.getArtifactId());
+                artifact.setGroup(mavenRootArtifact.getGroupId());
+                artifact.setType(mavenRootArtifact.getType());
+                artifact.setClassifier(mavenRootArtifact.getClassifier());
+                artifact.setUrl(depArtifact.getFile().toURL());
+                rootArtifact.addDependency(artifact);
+            }
+
+        } catch (ArtifactMetadataRetrievalException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (MalformedURLException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (ArtifactResolutionException ex) {
+            throw new TuscanyMavenException(ex);
+        } catch (ArtifactNotFoundException ex) {
+            throw new TuscanyMavenException(ex);
+        }
+
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org