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