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/18 22:38:05 UTC
svn commit: r447544 - in /incubator/tuscany/java/sca/services/maven: pom.xml
src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java
src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java
Author: meerajk
Date: Mon Sep 18 13:38:05 2006
New Revision: 447544
URL: http://svn.apache.org/viewvc?view=rev&rev=447544
Log:
Added first cut for transitive dependencies.
Modified:
incubator/tuscany/java/sca/services/maven/pom.xml
incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenArtifactRepository.java
incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java
Modified: incubator/tuscany/java/sca/services/maven/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/pom.xml?view=diff&rev=447544&r1=447543&r2=447544
==============================================================================
--- incubator/tuscany/java/sca/services/maven/pom.xml (original)
+++ incubator/tuscany/java/sca/services/maven/pom.xml Mon Sep 18 13:38:05 2006
@@ -37,13 +37,8 @@
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact</artifactId>
- <version>2.0</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>1.2</version>
+ <artifactId>maven-embedder</artifactId>
+ <version>2.0.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
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=447544&r1=447543&r2=447544
==============================================================================
--- 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 13:38:05 2006
@@ -19,20 +19,26 @@
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.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.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.annotation.Autowire;
+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;
/**
* Artifact repository used for resolving artifacts.
@@ -49,42 +55,37 @@
private org.apache.maven.artifact.repository.ArtifactRepository localRepository;
/** Remote repositories for resolving artifacts */
- private List remoteRepositories;
+ private List<org.apache.maven.artifact.repository.ArtifactRepository> remoteRepositories = new LinkedList<org.apache.maven.artifact.repository.ArtifactRepository>();
- /** Artifact metadata source */
- private ArtifactMetadataSource metadataSource;
-
- /** Artifact resolver */
- private ArtifactResolver artifactResolver;
+ /** Maven embedder */
+ private MavenEmbedder mavenEmbedder;
- /** Artifact factory */
- private ArtifactFactory artifactFactory;
+ /** Maven metadata source */
+ private ArtifactMetadataSource metadataSource;
/**
* Conctructs a new artifact repository.
- *
- * @param localRepository
- * Local Maven repository.
- * @param remoteRepositories
- * Remote maven repositories.
- * @param metadataSource
- * Artifact metadata source.
- * @param artifactResolver
- * Artifact resolver.
- * @param artifactFactory
- * Artifact factory.
- */
- public MavenArtifactRepository(@Autowire
- org.apache.maven.artifact.repository.ArtifactRepository localRepository, @Autowire
- List remoteRepositories, @Autowire
- ArtifactMetadataSource metadataSource, @Autowire
- ArtifactResolver artifactResolver, @Autowire
- ArtifactFactory artifactFactory) {
- this.localRepository = localRepository;
- this.remoteRepositories = remoteRepositories;
- this.metadataSource = metadataSource;
- this.artifactResolver = artifactResolver;
- this.artifactFactory = artifactFactory;
+ */
+ 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 MavenArtifactException(ex);
+ } catch (ComponentLookupException ex) {
+ throw new MavenArtifactException(ex);
+ }
+
}
/**
@@ -98,39 +99,46 @@
try {
- org.apache.maven.artifact.Artifact mavenRootArtifact = artifactFactory.createArtifact(rootArtifact.getGroup(), rootArtifact.getName(),
+ org.apache.maven.artifact.Artifact mavenRootArtifact = mavenEmbedder.createArtifact(rootArtifact.getGroup(), rootArtifact.getName(),
rootArtifact.getVersion(), org.apache.maven.artifact.Artifact.SCOPE_RUNTIME, rootArtifact.getType());
- artifactResolver.resolve(mavenRootArtifact, remoteRepositories, localRepository);
- rootArtifact.setUrl(mavenRootArtifact.getFile().toURL());
-
- 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 (Object depArtifact : result.getArtifacts()) {
- org.apache.maven.artifact.Artifact transitiveDependency = (org.apache.maven.artifact.Artifact) depArtifact;
- Artifact artifact = new Artifact();
- artifact.setName(transitiveDependency.getArtifactId());
- artifact.setGroup(transitiveDependency.getGroupId());
- artifact.setType(transitiveDependency.getType());
- artifact.setClassifier(transitiveDependency.getClassifier());
- artifact.setUrl(transitiveDependency.getFile().toURL());
- }
+ resolveTransitively(mavenRootArtifact, mavenEmbedder, rootArtifact);
} catch (ArtifactResolutionException ex) {
- // TODO Clarify the exception strategy with Jeremy
- throw new RuntimeException(ex);
+ throw new MavenArtifactException(ex);
} catch (ArtifactNotFoundException ex) {
- // TODO Clarify the exception strategy with Jeremy
- throw new RuntimeException(ex);
+ throw new MavenArtifactException(ex);
} catch (MalformedURLException ex) {
- // TODO Clarify the exception strategy with Jeremy
- throw new RuntimeException(ex);
+ throw new MavenArtifactException(ex);
} catch (ArtifactMetadataRetrievalException ex) {
- // TODO Clarify the exception strategy with Jeremy
- throw new RuntimeException(ex);
+ throw new MavenArtifactException(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);
}
}
@@ -145,6 +153,42 @@
for (Artifact artifact : artifacts) {
resolve(artifact);
}
+ }
+
+ /**
+ * Destroy method.
+ *
+ */
+ @Destroy
+ public void destroy() {
+ try {
+ mavenEmbedder.stop();
+ } catch (MavenEmbedderException ex) {
+ throw new MavenArtifactException(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 MavenArtifactException(ex);
+ } catch (PlexusContainerException ex) {
+ throw new MavenArtifactException(ex);
+ } catch (ComponentLookupException ex) {
+ throw new MavenArtifactException(ex);
+ }
+
}
}
Modified: incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java?view=diff&rev=447544&r1=447543&r2=447544
==============================================================================
--- incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java (original)
+++ incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTest.java Mon Sep 18 13:38:05 2006
@@ -18,6 +18,12 @@
*/
package org.apache.tuscany.services.maven;
+
+import java.net.URL;
+import java.util.Set;
+
+import org.apache.tuscany.spi.services.artifact.Artifact;
+
import junit.framework.TestCase;
/**
@@ -42,6 +48,21 @@
* Test method for 'org.apache.tuscany.services.maven.MavenArtifactRepository.resolve(Artifact)'
*/
public void testResolveArtifact() {
+
+ String[] remoteRepoUrls = {"http://www.ibiblio.org/maven/"};
+ MavenArtifactRepository repository = new MavenArtifactRepository(remoteRepoUrls);
+ Artifact artifact = new Artifact();
+ artifact.setGroup("org.apache.maven");
+ artifact.setName("maven-artifact");
+ artifact.setVersion("2.0.4");
+ artifact.setType("jar");
+
+ repository.resolve(artifact);
+
+ Set<URL> urls = artifact.getUrls();
+ assertEquals(2, urls.size());
+
+
}
@@ -49,6 +70,7 @@
* Test method for 'org.apache.tuscany.services.maven.MavenArtifactRepository.resolve(Collection<? extends Artifact>)'
*/
public void testResolveCollectionOfQextendsArtifact() {
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org