Blame SOURCES/tycho-maven-delegation.patch

4c9427
From 824f4a6c2db4f229e43de0c217d00a0c2c5b723d Mon Sep 17 00:00:00 2001
4c9427
From: Roland Grunberg <rgrunber@redhat.com>
4c9427
Date: Wed, 18 Jun 2014 13:01:31 -0400
4c9427
Subject: [PATCH] Tycho should always delegate artifact resolution to Maven.
4c9427
4c9427
Maven resolves dependencies from the following locations in the
4c9427
following order:
4c9427
    * reactor,
4c9427
    * workspace (eg. XMvn),
4c9427
    * local repository,
4c9427
    * remote repositories.
4c9427
4c9427
Tycho assumes that all resolved artifacts are present within the reactor
4c9427
cache but this is not true for artifacts resolved from workspace
4c9427
locations.
4c9427
4c9427
Change-Id: Ia44969ed1064965a82c3507a63e54caeebb75b18
4c9427
---
4c9427
 .../META-INF/MANIFEST.MF                           |  1 +
4c9427
 .../eclipse/tycho/core/shared/MavenContext.java    |  2 +
4c9427
 .../tycho/core/shared/MavenContextImpl.java        | 10 ++++-
4c9427
 .../tycho/core/shared/MavenRepositorySystem.java   | 19 +++++++++
4c9427
 .../local/LocalArtifactRepositoryP2APITest.java    |  4 +-
4c9427
 .../local/LocalMetadataRepositoryTest.java         |  3 +-
4c9427
 .../repository/local/LocalArtifactRepository.java  |  8 ++--
4c9427
 .../local/LocalArtifactRepositoryFactory.java      |  3 +-
4c9427
 .../local/index/LocalRepositoryP2IndicesImpl.java  |  7 ++++
4c9427
 .../p2/remote/RemoteAgentMavenMirrorsTest.java     |  3 +-
4c9427
 .../RemoteAgentMetadataRepositoryCacheTest.java    |  5 ++-
4c9427
 .../target/TargetPlatformBundlePublisherTest.java  |  3 +-
4c9427
 .../tycho/p2/target/TestResolverFactory.java       |  5 ++-
4c9427
 .../tycho/p2/resolver/P2ResolverFactoryImpl.java   |  8 ++--
4c9427
 .../p2/target/PomDependencyCollectorImpl.java      |  2 +-
4c9427
 .../p2/target/TargetPlatformBundlePublisher.java   | 13 ++++--
4c9427
 .../p2/repository/LocalRepositoryP2Indices.java    |  4 ++
4c9427
 .../tycho/p2/repository/LocalRepositoryReader.java | 49 +++++-----------------
4c9427
 .../testutil/TemporaryLocalMavenRepository.java    |  4 +-
4c9427
 .../tycho/test/util/MavenRepositorySystemStub.java | 30 +++++++++++++
4c9427
 .../adapters/MavenRepositorySystemAdapter.java     | 37 ++++++++++++++++
4c9427
 .../configuration/MavenContextConfigurator.java    |  8 +++-
4c9427
 22 files changed, 166 insertions(+), 62 deletions(-)
4c9427
 create mode 100644 tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
4c9427
 create mode 100644 tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
4c9427
 create mode 100644 tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
4c9427
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared.tests/META-INF/MANIFEST.MF b/tycho-bundles/org.eclipse.tycho.core.shared.tests/META-INF/MANIFEST.MF
4c9427
index 9658fbc..efd0a2c 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.core.shared.tests/META-INF/MANIFEST.MF
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.core.shared.tests/META-INF/MANIFEST.MF
4c9427
@@ -7,3 +7,4 @@ Fragment-Host: org.eclipse.tycho.core.shared
4c9427
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
4c9427
 Require-Bundle: org.junit;bundle-version="4.8.2"
4c9427
 Bundle-Vendor: %providerName
4c9427
+Import-Package: org.eclipse.tycho.p2.repository
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
4c9427
index d63c1f1..cd8594d 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
4c9427
@@ -38,4 +38,6 @@ public interface MavenContext {
4c9427
      */
4c9427
     public Properties getSessionProperties();
4c9427
 
4c9427
+    public MavenRepositorySystem getRepositorySystem();
4c9427
+
4c9427
 }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
4c9427
index 7b39d58..a15354f 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
4c9427
@@ -19,18 +19,20 @@ public class MavenContextImpl implements MavenContext {
4c9427
     private MavenLogger mavenLogger;
4c9427
     private boolean offline;
4c9427
     private Properties mergedProperties;
4c9427
+    private MavenRepositorySystem repositorySystem;
4c9427
 
4c9427
     public MavenContextImpl(File localRepositoryRoot, boolean offline, MavenLogger mavenLogger,
4c9427
-            Properties mergedProperties) {
4c9427
+            Properties mergedProperties, MavenRepositorySystem repositorySystem) {
4c9427
         this.localRepositoryRoot = localRepositoryRoot;
4c9427
         this.offline = offline;
4c9427
         this.mavenLogger = mavenLogger;
4c9427
         this.mergedProperties = mergedProperties;
4c9427
+        this.repositorySystem = repositorySystem;
4c9427
     }
4c9427
 
4c9427
     // constructor for tests
4c9427
     public MavenContextImpl(File localRepositoryRoot, MavenLogger mavenLogger) {
4c9427
-        this(localRepositoryRoot, false, mavenLogger, new Properties());
4c9427
+        this(localRepositoryRoot, false, mavenLogger, new Properties(), null);
4c9427
     }
4c9427
 
4c9427
     @Override
4c9427
@@ -53,4 +55,8 @@ public class MavenContextImpl implements MavenContext {
4c9427
         return mergedProperties;
4c9427
     }
4c9427
 
4c9427
+    public MavenRepositorySystem getRepositorySystem() {
4c9427
+        return repositorySystem;
4c9427
+    }
4c9427
+
4c9427
 }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
4c9427
new file mode 100644
4c9427
index 0000000..965e5cd
4c9427
--- /dev/null
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
4c9427
@@ -0,0 +1,19 @@
4c9427
+/*******************************************************************************
4c9427
+ * Copyright (c) 2014 Red Hat Inc.
4c9427
+ * All rights reserved. This program and the accompanying materials
4c9427
+ * are made available under the terms of the Eclipse Public License v1.0
4c9427
+ * which accompanies this distribution, and is available at
4c9427
+ * http://www.eclipse.org/legal/epl-v10.html
4c9427
+ *
4c9427
+ * Contributors:
4c9427
+ *     Red Hat Inc. - initial API and implementation
4c9427
+ *******************************************************************************/
4c9427
+package org.eclipse.tycho.core.shared;
4c9427
+
4c9427
+import java.io.File;
4c9427
+
4c9427
+public interface MavenRepositorySystem {
4c9427
+
4c9427
+    public File resolve(String gid, String aid, String version, String type, String classifier);
4c9427
+
4c9427
+}
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
4c9427
index bedc5cb..7df3d17 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
4c9427
@@ -53,6 +53,7 @@ import org.eclipse.tycho.repository.p2base.artifact.repository.ArtifactRepositor
4c9427
 import org.eclipse.tycho.repository.streaming.testutil.ProbeArtifactSink;
4c9427
 import org.eclipse.tycho.repository.streaming.testutil.ProbeOutputStream;
4c9427
 import org.eclipse.tycho.repository.streaming.testutil.ProbeRawArtifactSink;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.junit.After;
4c9427
 import org.junit.Before;
4c9427
 import org.junit.Rule;
4c9427
@@ -114,7 +115,8 @@ public class LocalArtifactRepositoryP2APITest {
4c9427
     @Before
4c9427
     public void initSubject() throws Exception {
4c9427
         temporaryLocalMavenRepo.initContentFromResourceFolder(ResourceUtil.resourceFile("repositories/local"));
4c9427
-        subject = new LocalArtifactRepository(null, temporaryLocalMavenRepo.getLocalRepositoryIndex());
4c9427
+        subject = new LocalArtifactRepository(null, temporaryLocalMavenRepo.getLocalRepositoryIndex(),
4c9427
+                new MavenRepositorySystemStub(temporaryLocalMavenRepo.getLocalRepositoryRoot()));
4c9427
 
4c9427
         testOutputStream = new ProbeOutputStream();
4c9427
     }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
4c9427
index 9b6d270..8779841 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
4c9427
@@ -32,6 +32,7 @@ import org.eclipse.tycho.p2.repository.LocalRepositoryReader;
4c9427
 import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;
4c9427
 import org.eclipse.tycho.p2.repository.TychoRepositoryIndex;
4c9427
 import org.eclipse.tycho.repository.local.index.FileBasedTychoRepositoryIndex;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.junit.Test;
4c9427
 
4c9427
 public class LocalMetadataRepositoryTest extends BaseMavenRepositoryTest {
4c9427
@@ -48,7 +49,7 @@ public class LocalMetadataRepositoryTest extends BaseMavenRepositoryTest {
4c9427
 
4c9427
     protected IMetadataRepository loadRepository(File location) throws ProvisionException {
4c9427
         return new LocalMetadataRepository(location.toURI(), createMetadataIndex(location), new LocalRepositoryReader(
4c9427
-                location));
4c9427
+                location, new MavenRepositorySystemStub(location)));
4c9427
     }
4c9427
 
4c9427
     private LocalMetadataRepository createRepository(File location) throws ProvisionException {
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
4c9427
index 36946bf..0e2d330 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
4c9427
@@ -23,6 +23,7 @@ import java.util.Set;
4c9427
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
4c9427
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
4c9427
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
 import org.eclipse.tycho.p2.maven.repository.Activator;
4c9427
 import org.eclipse.tycho.p2.maven.repository.xmlio.ArtifactsIO;
4c9427
 import org.eclipse.tycho.p2.repository.GAV;
4c9427
@@ -42,15 +43,16 @@ public class LocalArtifactRepository extends ArtifactRepositoryBaseImpl
4c9427
 
4c9427
     // TODO what is the agent needed for? does using the default agent harm?
4c9427
     public LocalArtifactRepository(LocalRepositoryP2Indices localRepoIndices) {
4c9427
-        this(Activator.getProvisioningAgent(), localRepoIndices);
4c9427
+        this(Activator.getProvisioningAgent(), localRepoIndices, (MavenRepositorySystem) null);
4c9427
     }
4c9427
 
4c9427
     public LocalArtifactRepository(LocalRepositoryP2Indices localRepoIndices, RepositoryReader contentLocator) {
4c9427
         this(Activator.getProvisioningAgent(), localRepoIndices, contentLocator);
4c9427
     }
4c9427
 
4c9427
-    public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices) {
4c9427
-        this(agent, localRepoIndices, new LocalRepositoryReader(localRepoIndices.getBasedir()));
4c9427
+    public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices,
4c9427
+            MavenRepositorySystem repositorySystem) {
4c9427
+        this(agent, localRepoIndices, new LocalRepositoryReader(localRepoIndices.getBasedir(), repositorySystem));
4c9427
     }
4c9427
 
4c9427
     public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices,
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
4c9427
index fc99483..be2ce88 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
4c9427
@@ -18,6 +18,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
4c9427
 import org.eclipse.equinox.p2.core.ProvisionException;
4c9427
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
4c9427
 import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactRepositoryFactory;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
 import org.eclipse.tycho.p2.maven.repository.Activator;
4c9427
 import org.eclipse.tycho.p2.repository.LocalRepositoryP2Indices;
4c9427
 import org.eclipse.tycho.repository.util.internal.RepositoryFactoryTools;
4c9427
@@ -41,7 +42,7 @@ public class LocalArtifactRepositoryFactory extends ArtifactRepositoryFactory {
4c9427
             if (localRepositoryDirectory.isDirectory()
4c9427
                     && new File(localRepositoryDirectory, ".meta/p2-artifacts.properties").exists()) {
4c9427
                 // see FileBasedTychoRepositoryIndex#ARTIFACTS_INDEX_RELPATH
4c9427
-                return new LocalArtifactRepository(getAgent(), lookupLocalRepoIndices());
4c9427
+                return new LocalArtifactRepository(getAgent(), lookupLocalRepoIndices(), lookupLocalRepoIndices().getRepositorySystem());
4c9427
             }
4c9427
         }
4c9427
         return null;
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
4c9427
index 2a746f2..7b9983a 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
4c9427
@@ -15,6 +15,7 @@ package org.eclipse.tycho.repository.local.index;
4c9427
 
4c9427
 import org.eclipse.tycho.core.shared.MavenContext;
4c9427
 import org.eclipse.tycho.core.shared.MavenLogger;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
 import org.eclipse.tycho.locking.facade.FileLockService;
4c9427
 import org.eclipse.tycho.p2.repository.LocalRepositoryP2Indices;
4c9427
 import org.eclipse.tycho.p2.repository.TychoRepositoryIndex;
4c9427
@@ -25,6 +26,7 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
4c9427
     private FileLockService fileLockService;
4c9427
     private File localRepositoryRoot;
4c9427
     private MavenLogger logger;
4c9427
+    private MavenRepositorySystem repoSystem;
4c9427
 
4c9427
     // derived members
4c9427
     private boolean initialized = false;
4c9427
@@ -39,6 +41,7 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
4c9427
     public void setMavenContext(MavenContext mavenContext) {
4c9427
         this.localRepositoryRoot = mavenContext.getLocalRepositoryRoot();
4c9427
         this.logger = mavenContext.getLogger();
4c9427
+        this.repoSystem = mavenContext.getRepositorySystem();
4c9427
     }
4c9427
 
4c9427
     // injected by DS runtime
4c9427
@@ -80,4 +83,8 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
4c9427
         return localRepositoryRoot;
4c9427
     }
4c9427
 
4c9427
+    public MavenRepositorySystem getRepositorySystem() {
4c9427
+        return repoSystem;
4c9427
+    }
4c9427
+
4c9427
 }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
4c9427
index 432ec09..4e5566a 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
4c9427
@@ -29,6 +29,7 @@ import org.eclipse.tycho.p2.impl.test.ResourceUtil;
4c9427
 import org.eclipse.tycho.p2.remote.testutil.MavenRepositorySettingsStub;
4c9427
 import org.eclipse.tycho.test.util.HttpServer;
4c9427
 import org.eclipse.tycho.test.util.LogVerifier;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.junit.Before;
4c9427
 import org.junit.Rule;
4c9427
 import org.junit.Test;
4c9427
@@ -52,7 +53,7 @@ public class RemoteAgentMavenMirrorsTest {
4c9427
     public void initSubject() throws Exception {
4c9427
         File localRepository = tempManager.newFolder("localRepo");
4c9427
         MavenContext mavenContext = new MavenContextImpl(localRepository, OFFLINE, logVerifier.getLogger(),
4c9427
-                new Properties());
4c9427
+                new Properties(), new MavenRepositorySystemStub(localRepository));
4c9427
 
4c9427
         mavenRepositorySettings = new MavenRepositorySettingsStub();
4c9427
         subject = new RemoteAgent(mavenContext, mavenRepositorySettings, OFFLINE);
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
4c9427
index ae31862..14b8f85 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
4c9427
@@ -26,6 +26,7 @@ import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
4c9427
 import org.eclipse.tycho.core.shared.MavenContextImpl;
4c9427
 import org.eclipse.tycho.test.util.HttpServer;
4c9427
 import org.eclipse.tycho.test.util.LogVerifier;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.junit.Before;
4c9427
 import org.junit.Rule;
4c9427
 import org.junit.Test;
4c9427
@@ -126,12 +127,12 @@ public class RemoteAgentMetadataRepositoryCacheTest {
4c9427
 
4c9427
     private RemoteAgent newOnlineAgent() throws Exception {
4c9427
         return new RemoteAgent(new MavenContextImpl(localMavenRepository, false, logVerifier.getLogger(),
4c9427
-                new Properties()));
4c9427
+                new Properties(), new MavenRepositorySystemStub(localMavenRepository)));
4c9427
     }
4c9427
 
4c9427
     private RemoteAgent newOfflineAgent() throws Exception {
4c9427
         return new RemoteAgent(new MavenContextImpl(localMavenRepository, true, logVerifier.getLogger(),
4c9427
-                new Properties()));
4c9427
+                new Properties(), new MavenRepositorySystemStub(localMavenRepository)));
4c9427
     }
4c9427
 
4c9427
     private IMetadataRepository loadHttpRepository(RemoteAgent agent) throws ProvisionException {
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
4c9427
index 50fe92f..3044e97 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
4c9427
@@ -31,6 +31,7 @@ import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;
4c9427
 import org.eclipse.tycho.repository.p2base.artifact.provider.IRawArtifactProvider;
4c9427
 import org.eclipse.tycho.repository.streaming.testutil.ProbeRawArtifactSink;
4c9427
 import org.eclipse.tycho.test.util.LogVerifier;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.junit.Before;
4c9427
 import org.junit.Rule;
4c9427
 import org.junit.Test;
4c9427
@@ -56,7 +57,7 @@ public class TargetPlatformBundlePublisherTest {
4c9427
         logVerifier.expectNoWarnings();
4c9427
 
4c9427
         localRepositoryRoot = tempFolder.getRoot();
4c9427
-        subject = new TargetPlatformBundlePublisher(localRepositoryRoot, logVerifier.getLogger());
4c9427
+        subject = new TargetPlatformBundlePublisher(localRepositoryRoot, logVerifier.getLogger(), new MavenRepositorySystemStub(localRepositoryRoot));
4c9427
     }
4c9427
 
4c9427
     @Test
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
4c9427
index d982042..127ae11 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
4c9427
@@ -28,6 +28,7 @@ import org.eclipse.tycho.p2.target.facade.TargetPlatformFactory;
4c9427
 import org.eclipse.tycho.repository.local.LocalArtifactRepository;
4c9427
 import org.eclipse.tycho.repository.local.LocalMetadataRepository;
4c9427
 import org.eclipse.tycho.repository.local.index.LocalRepositoryP2IndicesImpl;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.eclipse.tycho.test.util.NoopFileLockService;
4c9427
 
4c9427
 public class TestResolverFactory implements P2ResolverFactory {
4c9427
@@ -45,7 +46,7 @@ public class TestResolverFactory implements P2ResolverFactory {
4c9427
 
4c9427
         File localMavenRepoRoot = mavenContext.getLocalRepositoryRoot();
4c9427
         LocalRepositoryP2Indices localRepoIndices = createLocalRepoIndices(mavenContext);
4c9427
-        LocalRepositoryReader localRepositoryReader = new LocalRepositoryReader(localMavenRepoRoot);
4c9427
+        LocalRepositoryReader localRepositoryReader = new LocalRepositoryReader(localMavenRepoRoot, mavenContext.getRepositorySystem());
4c9427
         localMetadataRepo = new LocalMetadataRepository(localMavenRepoRoot.toURI(),
4c9427
                 localRepoIndices.getMetadataIndex(), localRepositoryReader);
4c9427
         localArtifactRepo = new LocalArtifactRepository(localRepoIndices, localRepositoryReader);
4c9427
@@ -56,7 +57,7 @@ public class TestResolverFactory implements P2ResolverFactory {
4c9427
     }
4c9427
 
4c9427
     private MavenContext createMavenContext(boolean offline, MavenLogger logger) {
4c9427
-        return new MavenContextImpl(getLocalRepositoryLocation(), offline, logger, new Properties());
4c9427
+        return new MavenContextImpl(getLocalRepositoryLocation(), offline, logger, new Properties(), new MavenRepositorySystemStub(getLocalRepositoryLocation()));
4c9427
     }
4c9427
 
4c9427
     // TODO use TemporaryLocalMavenRepository
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
4c9427
index a74d4d5..2f903a1 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
4c9427
@@ -33,7 +33,7 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
4c9427
     private static LocalMetadataRepository localMetadataRepository;
4c9427
     private static LocalArtifactRepository localArtifactRepository;
4c9427
 
4c9427
-    private MavenContext mavenContext;
4c9427
+    private static MavenContext mavenContext;
4c9427
     private LocalRepositoryP2Indices localRepoIndices;
4c9427
     private RemoteAgentManager remoteAgentManager;
4c9427
     private TargetDefinitionResolverService targetDefinitionResolverService;
4c9427
@@ -42,7 +42,8 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
4c9427
             LocalRepositoryP2Indices localRepoIndices) {
4c9427
         if (localMetadataRepository == null) {
4c9427
             File localMavenRepoRoot = context.getLocalRepositoryRoot();
4c9427
-            RepositoryReader contentLocator = new LocalRepositoryReader(localMavenRepoRoot);
4c9427
+            RepositoryReader contentLocator = new LocalRepositoryReader(localMavenRepoRoot,
4c9427
+                    mavenContext.getRepositorySystem());
4c9427
             localMetadataRepository = new LocalMetadataRepository(localMavenRepoRoot.toURI(),
4c9427
                     localRepoIndices.getMetadataIndex(), contentLocator);
4c9427
 
4c9427
@@ -53,7 +54,8 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
4c9427
     private static synchronized LocalArtifactRepository getLocalArtifactRepository(MavenContext mavenContext,
4c9427
             LocalRepositoryP2Indices localRepoIndices) {
4c9427
         if (localArtifactRepository == null) {
4c9427
-            RepositoryReader contentLocator = new LocalRepositoryReader(mavenContext.getLocalRepositoryRoot());
4c9427
+            RepositoryReader contentLocator = new LocalRepositoryReader(mavenContext.getLocalRepositoryRoot(),
4c9427
+                    mavenContext.getRepositorySystem());
4c9427
             localArtifactRepository = new LocalArtifactRepository(localRepoIndices, contentLocator);
4c9427
         }
4c9427
         return localArtifactRepository;
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
4c9427
index 8bee7ba..f2b07a5 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
4c9427
@@ -44,7 +44,7 @@ public class PomDependencyCollectorImpl implements PomDependencyCollector {
4c9427
         this.logger = mavenContext.getLogger();
4c9427
 
4c9427
         File localRepositoryRoot = mavenContext.getLocalRepositoryRoot();
4c9427
-        this.bundlesPublisher = new TargetPlatformBundlePublisher(localRepositoryRoot, mavenContext.getLogger());
4c9427
+        this.bundlesPublisher = new TargetPlatformBundlePublisher(localRepositoryRoot, mavenContext.getLogger(), mavenContext.getRepositorySystem());
4c9427
     }
4c9427
 
4c9427
     @Override
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
4c9427
index 0195871..44a0f30 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
4c9427
@@ -25,6 +25,7 @@ import org.eclipse.equinox.p2.publisher.PublisherResult;
4c9427
 import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
4c9427
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
4c9427
 import org.eclipse.tycho.core.shared.MavenLogger;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
 import org.eclipse.tycho.p2.impl.publisher.MavenPropertiesAdvice;
4c9427
 import org.eclipse.tycho.p2.impl.publisher.repo.TransientArtifactRepository;
4c9427
 import org.eclipse.tycho.p2.metadata.IArtifactFacade;
4c9427
@@ -42,8 +43,9 @@ public class TargetPlatformBundlePublisher {
4c9427
     private final MavenLogger logger;
4c9427
     private final PublishedBundlesArtifactRepository publishedArtifacts;
4c9427
 
4c9427
-    public TargetPlatformBundlePublisher(File localMavenRepositoryRoot, MavenLogger logger) {
4c9427
-        this.publishedArtifacts = new PublishedBundlesArtifactRepository(localMavenRepositoryRoot);
4c9427
+    public TargetPlatformBundlePublisher(File localMavenRepositoryRoot, MavenLogger logger,
4c9427
+            MavenRepositorySystem repositorySystem) {
4c9427
+        this.publishedArtifacts = new PublishedBundlesArtifactRepository(localMavenRepositoryRoot, repositorySystem);
4c9427
         this.logger = logger;
4c9427
     }
4c9427
 
4c9427
@@ -206,8 +208,11 @@ public class TargetPlatformBundlePublisher {
4c9427
      */
4c9427
     private static class PublishedBundlesArtifactRepository extends ArtifactRepositoryBaseImpl<GAVArtifactDescriptor> {
4c9427
 
4c9427
-        PublishedBundlesArtifactRepository(File localMavenRepositoryRoot) {
4c9427
+        private MavenRepositorySystem repositorySystem;
4c9427
+
4c9427
+        PublishedBundlesArtifactRepository(File localMavenRepositoryRoot, MavenRepositorySystem repositorySystem) {
4c9427
             super(null, localMavenRepositoryRoot.toURI(), ArtifactTransferPolicies.forLocalArtifacts());
4c9427
+            this.repositorySystem = repositorySystem;
4c9427
         }
4c9427
 
4c9427
         void addPublishedArtifact(IArtifactDescriptor baseDescriptor, IArtifactFacade mavenArtifact) {
4c9427
@@ -252,7 +257,7 @@ public class TargetPlatformBundlePublisher {
4c9427
         @Override
4c9427
         protected File internalGetArtifactStorageLocation(IArtifactDescriptor descriptor) {
4c9427
             MavenRepositoryCoordinates coord = toInternalDescriptor(descriptor).getMavenCoordinates();
4c9427
-            LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir());
4c9427
+            LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir(), repositorySystem);
4c9427
             return reader.getLocalArtifactLocation(coord.getGav(), coord.getClassifier(), coord.getExtensionOrDefault());
4c9427
         }
4c9427
 
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
4c9427
index 2122578..5e4a01e 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
4c9427
@@ -13,6 +13,8 @@ package org.eclipse.tycho.p2.repository;
4c9427
 
4c9427
 import java.io.File;
4c9427
 
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
+
4c9427
 /**
4c9427
  * This service provides access to the tycho p2 index files of the local maven repository.
4c9427
  */
4c9427
@@ -24,4 +26,6 @@ public interface LocalRepositoryP2Indices {
4c9427
 
4c9427
     public File getBasedir();
4c9427
 
4c9427
+    public MavenRepositorySystem getRepositorySystem();
4c9427
+
4c9427
 }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
4c9427
index b5c8c55..8842af3 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
4c9427
@@ -14,55 +14,28 @@ import java.io.File;
4c9427
 import java.lang.reflect.Constructor;
4c9427
 import java.lang.reflect.Method;
4c9427
 
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
+
4c9427
 public class LocalRepositoryReader implements RepositoryReader {
4c9427
 
4c9427
     private final File localMavenRepositoryRoot;
4c9427
+    private final MavenRepositorySystem repositorySystem;
4c9427
 
4c9427
-    public LocalRepositoryReader(File localMavenRepositoryRoot) {
4c9427
+    public LocalRepositoryReader(File localMavenRepositoryRoot, MavenRepositorySystem repositorySystem) {
4c9427
         this.localMavenRepositoryRoot = localMavenRepositoryRoot;
4c9427
+        this.repositorySystem = repositorySystem;
4c9427
     }
4c9427
 
4c9427
     @Override
4c9427
     @SuppressWarnings({ "unchecked", "rawtypes" })
4c9427
     public File getLocalArtifactLocation(GAV gav, String classifier, String extension) {
4c9427
-        File file = new File(localMavenRepositoryRoot, RepositoryLayoutHelper.getRelativePath(gav, classifier,
4c9427
-                extension));
4c9427
-        // In Fedora the artifact may be in an XMvn-defined repository location (not in reactor cache)
4c9427
-        if (!file.exists()) {
4c9427
-            try {
4c9427
-                // Create Plexus config
4c9427
-                Class pcclazz = Class.forName("org.codehaus.plexus.ContainerConfiguration");
4c9427
-                Object conf = Class.forName("org.codehaus.plexus.DefaultContainerConfiguration").newInstance();
4c9427
-                pcclazz.getMethod("setAutoWiring", boolean.class).invoke(conf, true);
4c9427
-                pcclazz.getMethod("setClassPathScanning", String.class).invoke(conf, "index");
4c9427
-
4c9427
-                // Use plexus container to lookup the reader
4c9427
-                Class pclazz = Class.forName("org.codehaus.plexus.DefaultPlexusContainer");
4c9427
-                Object plexus = pclazz.getConstructor(pcclazz).newInstance(conf);
4c9427
-
4c9427
-                // Retrieve the workspace reader from the plexus container
4c9427
-                Method mLookup = pclazz.getMethod("lookup", String.class, String.class);
4c9427
-                Object reader = mLookup.invoke(plexus, "org.eclipse.aether.repository.WorkspaceReader", "ide");
4c9427
-
4c9427
-                // Create an Aether Artifact based on GAV, classifier, and extension
4c9427
-                Class iartclazz = Class.forName("org.eclipse.aether.artifact.Artifact");
4c9427
-                Class artclazz = Class.forName("org.eclipse.aether.artifact.DefaultArtifact");
4c9427
-                Constructor cNew = artclazz.getConstructor(String.class, String.class, String.class, String.class,
4c9427
-                        String.class);
4c9427
-                Object artifact = cNew.newInstance(gav.getGroupId(), gav.getArtifactId(), classifier, extension,
4c9427
-                        gav.getVersion());
4c9427
-
4c9427
-                // Invoke "findArtifact" method of the workspace reader on the artifact
4c9427
-                Method mfindArtifact = reader.getClass().getMethod("findArtifact", iartclazz);
4c9427
-                File newFile = (File) mfindArtifact.invoke(reader, artifact);
4c9427
-                if (newFile != null) {
4c9427
-                    file = newFile;
4c9427
-                }
4c9427
-            } catch (Exception e) {
4c9427
-                e.printStackTrace();
4c9427
+        File ret = new File(localMavenRepositoryRoot, RepositoryLayoutHelper.getRelativePath(gav, classifier, extension));
4c9427
+        if (repositorySystem != null) {
4c9427
+            File tmp = repositorySystem.resolve(gav.getGroupId(), gav.getArtifactId(), gav.getVersion(), extension, classifier);
4c9427
+            if (tmp != null) {
4c9427
+                ret = tmp;
4c9427
             }
4c9427
         }
4c9427
-        return file;
4c9427
-
4c9427
+        return ret;
4c9427
     }
4c9427
 }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
4c9427
index f7cc92c..7bc8a95 100644
4c9427
--- a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
4c9427
@@ -14,9 +14,11 @@ import java.io.File;
4c9427
 import java.io.IOException;
4c9427
 
4c9427
 import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
 import org.eclipse.tycho.p2.repository.LocalRepositoryP2Indices;
4c9427
 import org.eclipse.tycho.repository.local.LocalArtifactRepository;
4c9427
 import org.eclipse.tycho.repository.local.index.LocalRepositoryP2IndicesImpl;
4c9427
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
4c9427
 import org.eclipse.tycho.test.util.NoopFileLockService;
4c9427
 import org.junit.Rule;
4c9427
 import org.junit.rules.ExternalResource;
4c9427
@@ -72,7 +74,7 @@ public class TemporaryLocalMavenRepository extends ExternalResource {
4c9427
 
4c9427
     public LocalArtifactRepository getLocalArtifactRepository() {
4c9427
         if (repo == null) {
4c9427
-            repo = new LocalArtifactRepository(null, getLocalRepositoryIndex());
4c9427
+            repo = new LocalArtifactRepository(null, getLocalRepositoryIndex(), new MavenRepositorySystemStub(getLocalRepositoryRoot()));
4c9427
         }
4c9427
         return repo;
4c9427
     }
4c9427
diff --git a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
4c9427
new file mode 100644
4c9427
index 0000000..7e020da
4c9427
--- /dev/null
4c9427
+++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
4c9427
@@ -0,0 +1,30 @@
4c9427
+/*******************************************************************************
4c9427
+ * Copyright (c) 2014 Red Hat Inc.
4c9427
+ * All rights reserved. This program and the accompanying materials
4c9427
+ * are made available under the terms of the Eclipse Public License v1.0
4c9427
+ * which accompanies this distribution, and is available at
4c9427
+ * http://www.eclipse.org/legal/epl-v10.html
4c9427
+ *
4c9427
+ * Contributors:
4c9427
+ *     Red Hat Inc. - initial API and implementation
4c9427
+ *******************************************************************************/
4c9427
+package org.eclipse.tycho.test.util;
4c9427
+
4c9427
+import java.io.File;
4c9427
+
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
+import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;
4c9427
+
4c9427
+public class MavenRepositorySystemStub implements MavenRepositorySystem {
4c9427
+
4c9427
+    private File localMavenRepositoryRoot;
4c9427
+
4c9427
+    public MavenRepositorySystemStub(File localMavenRepositoryRoot) {
4c9427
+        this.localMavenRepositoryRoot = localMavenRepositoryRoot;
4c9427
+    }
4c9427
+
4c9427
+    public File resolve(String gid, String aid, String version, String type, String classifier) {
4c9427
+        return new File(localMavenRepositoryRoot, RepositoryLayoutHelper.getRelativePath(gid, aid, version, classifier,
4c9427
+                type));
4c9427
+    }
4c9427
+}
4c9427
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
4c9427
new file mode 100644
4c9427
index 0000000..e1d46fa
4c9427
--- /dev/null
4c9427
+++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
4c9427
@@ -0,0 +1,37 @@
4c9427
+/*******************************************************************************
4c9427
+ * Copyright (c) 2014 Red Hat Inc.
4c9427
+ * All rights reserved. This program and the accompanying materials
4c9427
+ * are made available under the terms of the Eclipse Public License v1.0
4c9427
+ * which accompanies this distribution, and is available at
4c9427
+ * http://www.eclipse.org/legal/epl-v10.html
4c9427
+ *
4c9427
+ * Contributors:
4c9427
+ *     Red Hat Inc. - initial API and implementation
4c9427
+ *******************************************************************************/
4c9427
+package org.eclipse.tycho.osgi.adapters;
4c9427
+
4c9427
+import java.io.File;
4c9427
+
4c9427
+import org.apache.maven.artifact.Artifact;
4c9427
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
4c9427
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
4c9427
+import org.apache.maven.repository.RepositorySystem;
4c9427
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
4c9427
+
4c9427
+public class MavenRepositorySystemAdapter implements MavenRepositorySystem {
4c9427
+
4c9427
+    private RepositorySystem repoSystem;
4c9427
+
4c9427
+    public MavenRepositorySystemAdapter(RepositorySystem repoSystem) {
4c9427
+        this.repoSystem = repoSystem;
4c9427
+    }
4c9427
+
4c9427
+    public File resolve(String gid, String aid, String version, String type, String classifier) {
4c9427
+        ArtifactResolutionRequest req = new ArtifactResolutionRequest();
4c9427
+        Artifact art = repoSystem.createArtifactWithClassifier(gid, aid, version, type, classifier);
4c9427
+        req.setArtifact(art);
4c9427
+        ArtifactResolutionResult res = repoSystem.resolve(req);
4c9427
+        return res.getArtifacts().size() > 0 ? res.getArtifacts().toArray(new Artifact[0])[0].getFile() : null;
4c9427
+    }
4c9427
+
4c9427
+}
4c9427
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
4c9427
index e5837e2..137dcb1 100644
4c9427
--- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
4c9427
+++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
4c9427
@@ -16,6 +16,7 @@ import java.util.Properties;
4c9427
 
4c9427
 import org.apache.maven.execution.MavenSession;
4c9427
 import org.apache.maven.plugin.LegacySupport;
4c9427
+import org.apache.maven.repository.RepositorySystem;
4c9427
 import org.apache.maven.settings.Profile;
4c9427
 import org.apache.maven.settings.Settings;
4c9427
 import org.codehaus.plexus.component.annotations.Component;
4c9427
@@ -26,6 +27,7 @@ import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener;
4c9427
 import org.eclipse.tycho.core.shared.MavenContext;
4c9427
 import org.eclipse.tycho.core.shared.MavenContextImpl;
4c9427
 import org.eclipse.tycho.osgi.adapters.MavenLoggerAdapter;
4c9427
+import org.eclipse.tycho.osgi.adapters.MavenRepositorySystemAdapter;
4c9427
 
4c9427
 @Component(role = EquinoxLifecycleListener.class, hint = "MavenContextConfigurator")
4c9427
 public class MavenContextConfigurator extends EquinoxLifecycleListener {
4c9427
@@ -36,13 +38,17 @@ public class MavenContextConfigurator extends EquinoxLifecycleListener {
4c9427
     @Requirement
4c9427
     private LegacySupport context;
4c9427
 
4c9427
+    @Requirement
4c9427
+    private RepositorySystem repositorySystem;
4c9427
+
4c9427
     @Override
4c9427
     public void afterFrameworkStarted(EmbeddedEquinox framework) {
4c9427
         MavenSession session = context.getSession();
4c9427
         File localRepoRoot = new File(session.getLocalRepository().getBasedir());
4c9427
         MavenLoggerAdapter mavenLogger = new MavenLoggerAdapter(logger, false);
4c9427
         Properties globalProps = getGlobalProperties(session);
4c9427
-        MavenContext mavenContext = new MavenContextImpl(localRepoRoot, session.isOffline(), mavenLogger, globalProps);
4c9427
+        MavenContext mavenContext = new MavenContextImpl(localRepoRoot, session.isOffline(), mavenLogger, globalProps,
4c9427
+                new MavenRepositorySystemAdapter(repositorySystem));
4c9427
         framework.registerService(MavenContext.class, mavenContext);
4c9427
     }
4c9427
 
4c9427
-- 
4c9427
1.9.3
4c9427