diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/build.properties b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/build.properties
new file mode 100644
index 00000000..64f93a9f
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/feature.xml b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/feature.xml
new file mode 100644
index 00000000..9ac4ed4f
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/feature.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ [Enter Feature Description here.]
+
+
+
+ [Enter Copyright Description here.]
+
+
+
+ [Enter License Description here.]
+
+
+
+
+
diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/pom.xml b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/pom.xml
new file mode 100644
index 00000000..e8469cd7
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/feature/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+
+ tycho-its-project.pomDependencyConsider.p2Data.generate
+ parent
+ 0.0.1-SNAPSHOT
+
+ pomDependencyConsider.p2Data.generate.feature
+ eclipse-feature
+
+
diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/pom.xml b/tycho-its/projects/pomDependencyConsider.p2Data.generate/pom.xml
new file mode 100644
index 00000000..e86b400d
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ tycho-its-project.pomDependencyConsider.p2Data.generate
+ parent
+ 0.0.1-SNAPSHOT
+ pom
+
+
+ feature
+ repository
+
+
+
+
+
+ com.google.code.gson
+ gson
+ 1.6
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-maven-plugin
+ ${tycho-version}
+ true
+
+
+ org.eclipse.tycho
+ target-platform-configuration
+ ${tycho-version}
+
+ consider
+
+
+
+
+
diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/category.xml b/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/category.xml
new file mode 100644
index 00000000..c3223eb6
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/category.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/pom.xml b/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/pom.xml
new file mode 100644
index 00000000..69d9d494
--- /dev/null
+++ b/tycho-its/projects/pomDependencyConsider.p2Data.generate/repository/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+
+ tycho-its-project.pomDependencyConsider.p2Data.generate
+ parent
+ 0.0.1-SNAPSHOT
+
+ repository
+ eclipse-repository
+
+
diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/pomDependencyConsider/p2Data/generate/PomDependencyOnNonTychoArtifactTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/pomDependencyConsider/p2Data/generate/PomDependencyOnNonTychoArtifactTest.java
new file mode 100644
index 00000000..493e8fb5
--- /dev/null
+++ b/tycho-its/src/test/java/org/eclipse/tycho/test/pomDependencyConsider/p2Data/generate/PomDependencyOnNonTychoArtifactTest.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG and others.
+ * 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:
+ * SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.test.pomDependencyConsider.p2Data.generate;
+
+import java.io.File;
+
+import org.apache.maven.it.Verifier;
+import org.eclipse.tycho.test.AbstractTychoIntegrationTest;
+import org.eclipse.tycho.test.util.P2RepositoryTool;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PomDependencyOnNonTychoArtifactTest extends AbstractTychoIntegrationTest {
+ private static final String POM_DEPENDENCY_BUNDLE_ID = "com.google.gson";
+ private static final String POM_DEPENDENCY_BUNDLE_VERSION = "1.6.0";
+
+ @Test
+ public void testP2DataGeneratedForPomDependency() throws Exception {
+ // project with a POM dependency on a bundle not built by Tycho
+ Verifier verifier = getVerifier("pomDependencyConsider.p2Data.generate", false);
+
+ verifier.executeGoal("verify");
+ verifier.verifyErrorFreeLog();
+
+ String testProjectRoot = verifier.getBasedir();
+ P2RepositoryTool p2Repo = P2RepositoryTool.forEclipseRepositoryModule(new File(testProjectRoot, "repository"));
+
+ // this was bug TYCHO-570: the build passed, but the POM dependency bundle was missing
+ File expectedBundle = p2Repo.getBundleArtifact(POM_DEPENDENCY_BUNDLE_ID, POM_DEPENDENCY_BUNDLE_VERSION);
+ Assert.assertTrue(expectedBundle.isFile());
+ }
+}
diff --git a/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/META-INF/MANIFEST.MF b/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/META-INF/MANIFEST.MF
index e3eec567..b6d74376 100644
--- a/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/META-INF/MANIFEST.MF
+++ b/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/META-INF/MANIFEST.MF
@@ -2,7 +2,8 @@ Manifest-Version: 1.0
Export-Package: org.eclipse.tycho.core.facade,
org.eclipse.tycho.p2.metadata,
org.eclipse.tycho.p2.repository,
- org.eclipse.tycho.p2.resolver.facade
+ org.eclipse.tycho.p2.resolver.facade,
+ org.eclipse.tycho.repository.registry.facade
Bundle-Version: 0.13.0.qualifier
Bundle-Name: Tycho p2 Resolver Maven/OSGi Facade (Incubation)
Bundle-ManifestVersion: 2
diff --git a/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/src/main/java/org/eclipse/tycho/repository/registry/facade/RepositoryBlackboardKey.java b/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/src/main/java/org/eclipse/tycho/repository/registry/facade/RepositoryBlackboardKey.java
new file mode 100644
index 00000000..fa692ead
--- /dev/null
+++ b/tycho-p2-resolver/org.eclipse.tycho.p2.resolver.facade/src/main/java/org/eclipse/tycho/repository/registry/facade/RepositoryBlackboardKey.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG and others.
+ * 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:
+ * SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.repository.registry.facade;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class RepositoryBlackboardKey {
+
+ // TODO p2 bug 347319 prevents using a special scheme, that will ensure that only our p2 repository factory load the blackboard key URIs
+ //public static String SCHEME = "registry";
+ public static String SCHEME = "file";
+
+ private final URI uri;
+
+ private RepositoryBlackboardKey(URI uri) {
+ this.uri = uri;
+ }
+
+ public URI toURI() {
+ return uri;
+ }
+
+ /**
+ * Creates a key under which the POM dependency artifacts of the resolution context (which is a
+ * superset of the target platform) of a project are available as p2 repository.
+ */
+ public static RepositoryBlackboardKey forResolutionContextArtifacts(File projectLocation) {
+ try {
+ return new RepositoryBlackboardKey(
+ new URI(SCHEME, "/resolution-context-artifacts@" + projectLocation, null));
+ } catch (URISyntaxException e) {
+ // the used constructor escapes invalid characters, so I don't see this happening
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getName() + "(uri=" + uri + ")";
+ }
+}
diff --git a/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/META-INF/MANIFEST.MF b/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/META-INF/MANIFEST.MF
index ea835575..d483aad9 100644
--- a/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/META-INF/MANIFEST.MF
+++ b/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/META-INF/MANIFEST.MF
@@ -9,5 +9,6 @@ Export-Package: org.eclipse.tycho.p2.tools,
org.eclipse.tycho.p2.tools.director,
org.eclipse.tycho.p2.tools.mirroring,
org.eclipse.tycho.p2.tools.publisher
-Import-Package: org.eclipse.tycho.p2.repository
+Import-Package: org.eclipse.tycho.p2.repository,
+ org.eclipse.tycho.repository.registry.facade
Bundle-Vendor: %providerName
diff --git a/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/src/main/java/org/eclipse/tycho/p2/tools/RepositoryReferences.java b/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/src/main/java/org/eclipse/tycho/p2/tools/RepositoryReferences.java
index 333f4683..66ecdb6b 100644
--- a/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/src/main/java/org/eclipse/tycho/p2/tools/RepositoryReferences.java
+++ b/tycho-p2-resolver/org.eclipse.tycho.p2.tools.facade/src/main/java/org/eclipse/tycho/p2/tools/RepositoryReferences.java
@@ -16,6 +16,8 @@
import java.util.Collections;
import java.util.List;
+import org.eclipse.tycho.repository.registry.facade.RepositoryBlackboardKey;
+
/**
* List of p2 repositories for a p2 operation. Instances of this class store a list of metadata and
* artifact repositories each, preserving the order in which the repositories were added.
@@ -46,6 +48,16 @@ public void addArtifactRepository(File artifactRepositoryLocation) {
artifactRepos.add(artifactRepositoryLocation.toURI());
}
+ /**
+ * Adds the artifact repository which is stored in memory under the given key.
+ *
+ * @param artifactRepositoryLocation
+ * A key identifying a repository registered on the artifact repository blackboard.
+ */
+ public void addArtifactRepository(RepositoryBlackboardKey blackboardKey) {
+ artifactRepos.add(blackboardKey.toURI());
+ }
+
/**
* Returns the list of metadata repositories in the order in which they were added.
*
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/META-INF/MANIFEST.MF b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/META-INF/MANIFEST.MF
index c26de0b0..99e92dc3 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/META-INF/MANIFEST.MF
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/META-INF/MANIFEST.MF
@@ -14,8 +14,10 @@ Require-Bundle: org.eclipse.equinox.common;bundle-version="3.5.0",
org.eclipse.equinox.p2.artifact.repository;bundle-version="1.1.0"
Export-Package: org.eclipse.tycho.p2.maven.repository,
org.eclipse.tycho.p2.maven.repository.xmlio;x-friends:="org.eclipse.tycho.p2.maven.repository.tests",
- org.eclipse.tycho.p2.util
+ org.eclipse.tycho.p2.util,
+ org.eclipse.tycho.repository.registry.impl
Import-Package: org.eclipse.osgi.util,
org.eclipse.tycho.p2.repository,
+ org.eclipse.tycho.repository.registry.facade,
org.osgi.framework
Bundle-Activator: org.eclipse.tycho.p2.maven.repository.Activator
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/plugin.xml b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/plugin.xml
index 32992e0c..c40fdbb0 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/plugin.xml
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/plugin.xml
@@ -30,6 +30,15 @@
suffix="p2artifacts.xml">
+
+
+
+
+
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/registry/impl/ArtifactRepositoryBlackboard.java b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/registry/impl/ArtifactRepositoryBlackboard.java
new file mode 100644
index 00000000..e26af611
--- /dev/null
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/registry/impl/ArtifactRepositoryBlackboard.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG and others.
+ * 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:
+ * SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.repository.registry.impl;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+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.repository.registry.facade.RepositoryBlackboardKey;
+import org.eclipse.tycho.repository.util.RepositoryFactoryTools;
+
+public class ArtifactRepositoryBlackboard extends ArtifactRepositoryFactory {
+
+ private static HashMap registry = new HashMap();
+
+ public static synchronized void putRepository(RepositoryBlackboardKey key, IArtifactRepository repository) {
+ registry.put(key.toURI(), repository);
+ }
+
+ @Override
+ public IArtifactRepository create(URI location, String name, String type, Map properties)
+ throws ProvisionException {
+ throw RepositoryFactoryTools.unsupportedCreation(getClass());
+ }
+
+ @Override
+ public IArtifactRepository load(URI location, int flags, IProgressMonitor monitor) throws ProvisionException {
+ if (RepositoryBlackboardKey.SCHEME.equals(location.getScheme())) {
+ return getRegisteredRepositoryOrNull(location, getAgent());
+ }
+ return null;
+ }
+
+ private static synchronized IArtifactRepository getRegisteredRepositoryOrNull(URI location, IProvisioningAgent agent)
+ throws ProvisionException {
+ return registry.get(location);
+ }
+
+}
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/util/RepositoryFactoryTools.java b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/util/RepositoryFactoryTools.java
index 28ecfa78..966d5b8b 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/util/RepositoryFactoryTools.java
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/util/RepositoryFactoryTools.java
@@ -41,10 +41,18 @@ public static void verifyModifiableNotRequested(int flags, String repositoryType
}
public static ProvisionException unsupportedCreation(String repositoryType) {
+ String message = "Cannot create repositories of type " + repositoryType;
+ return new ProvisionException(newUnsupportedCreationStatus(message));
+ }
+
+ public static ProvisionException unsupportedCreation(Class> factoryClass) {
+ String message = "The factory " + factoryClass.getName() + " cannot create repositories";
+ return new ProvisionException(newUnsupportedCreationStatus(message));
+ }
+
+ private static Status newUnsupportedCreationStatus(String message) {
// none of the codes defined in ProvisionException really fit
int errorCode = 0;
- Status errorStatus = new Status(IStatus.ERROR, Activator.ID, errorCode, "Cannot create repositories of type "
- + repositoryType, null);
- return new ProvisionException(errorStatus);
+ return new Status(IStatus.ERROR, Activator.ID, errorCode, message, null);
}
}
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/META-INF/MANIFEST.MF b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/META-INF/MANIFEST.MF
index f2874e65..d82f47bc 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/META-INF/MANIFEST.MF
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/META-INF/MANIFEST.MF
@@ -32,7 +32,8 @@ Export-Package: org.eclipse.tycho.p2.impl;x-friends:="org.eclipse.tycho.p2.impl.
Import-Package: org.eclipse.tycho.core.facade,
org.eclipse.tycho.p2.metadata,
org.eclipse.tycho.p2.repository,
- org.eclipse.tycho.p2.resolver.facade
+ org.eclipse.tycho.p2.resolver.facade,
+ org.eclipse.tycho.repository.registry.facade
Service-Component: OSGI-INF/generator.xml,
OSGI-INF/metadataserializable.xml,
OSGI-INF/proxyfacade.xml,
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java
index d38419f8..3ee5a2d8 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java
@@ -25,6 +25,7 @@
import org.eclipse.equinox.p2.metadata.IRequirement;
import org.eclipse.equinox.p2.metadata.MetadataFactory;
import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
import org.eclipse.tycho.core.facade.MavenLogger;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
@@ -33,6 +34,8 @@
import org.eclipse.tycho.p2.resolver.facade.P2Resolver;
import org.eclipse.tycho.p2.resolver.facade.ResolutionContext;
import org.eclipse.tycho.p2.resolver.impl.ResolutionContextImpl;
+import org.eclipse.tycho.repository.registry.facade.RepositoryBlackboardKey;
+import org.eclipse.tycho.repository.registry.impl.ArtifactRepositoryBlackboard;
@SuppressWarnings("restriction")
public class P2ResolverImpl implements P2Resolver {
@@ -101,6 +104,12 @@ protected P2ResolutionResult resolveProject(File projectLocation, ResolutionStra
context.downloadArtifacts(newState);
+ // TODO check if needed by all callers
+ IArtifactRepository resolutionContextArtifactRepo = context.getSupplementaryArtifactRepository();
+ RepositoryBlackboardKey blackboardKey = RepositoryBlackboardKey.forResolutionContextArtifacts(projectLocation);
+ ArtifactRepositoryBlackboard.putRepository(blackboardKey, resolutionContextArtifactRepo);
+ logger.debug("Registered artifact repository " + blackboardKey);
+
return toResolutionResult(newState);
}
@@ -117,6 +126,7 @@ private P2ResolutionResult toResolutionResult(Collection newSt
}
}
+ // TODO instead of adding them to the TP, we could also register it in memory as metadata repo
collectNonReactorIUs(result, newState);
return result;
}
diff --git a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/impl/ResolutionContextImpl.java b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/impl/ResolutionContextImpl.java
index d7b089e8..3f25c86f 100644
--- a/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/impl/ResolutionContextImpl.java
+++ b/tycho-p2-resolver/tycho-p2-resolver-impl/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/impl/ResolutionContextImpl.java
@@ -97,6 +97,7 @@ public ResolutionContextImpl(File localMavenRepositoryRoot, MavenLogger logger)
this.monitor = new LoggingProgressMonitor(logger);
this.localMavenRepositoryRoot = localMavenRepositoryRoot;
+ this.bundlesPublisher = new ResolutionContextBundlePublisher(localMavenRepositoryRoot, logger);
}
// ---------------------------------------------------------------------
@@ -167,20 +168,19 @@ void addMavenArtifact(ClassifiedLocation key, IArtifactFacade artifact, Set