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