Projects
Mega:24.03:SP1:Everything
tycho
_service:tar_scm:0006-Tycho-should-always-deleg...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:0006-Tycho-should-always-delegate-artifact-resolution-to-.patch of Package tycho
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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- /dev/null +++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- 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 @@ -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 --- /dev/null +++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java @@ -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 --- /dev/null +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java @@ -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 --- 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 @@ -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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2