Use fedoraproject-p2 to do OSGi bundle discovery.

This commit is contained in:
Roland Grunberg 2014-09-03 16:38:59 -04:00
parent c7cad093f3
commit b31d03ca43
2 changed files with 67 additions and 49 deletions

View File

@ -1,4 +1,4 @@
From c6cfa4c4e6ce97cc634694987d9f87a032808e15 Mon Sep 17 00:00:00 2001 From d194350892237fe41982ab85e2a6e49df778c181 Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com> From: Roland Grunberg <rgrunber@redhat.com>
Date: Tue, 12 Jun 2012 10:38:51 -0400 Date: Tue, 12 Jun 2012 10:38:51 -0400
Subject: [PATCH] Implement a custom resolver for Tycho in local mode. Subject: [PATCH] Implement a custom resolver for Tycho in local mode.
@ -7,9 +7,7 @@ When running in local mode, dependencies should be resolved by looking
on the local system. Remote repositories should be ignored unless on the local system. Remote repositories should be ignored unless
offline mode is disabled. offline mode is disabled.
Automatically create a local p2 repository of all bundles on the system Use fedoraproject-p2 to resolve bundles from their system location.
so that they may be used for local dependency resolution. This is done
using a modified version of Eclipse's copy-platform script.
Since Fedora 17, we need an Execution Environment of at least JavaSE-1.6 Since Fedora 17, we need an Execution Environment of at least JavaSE-1.6
for Eclipse bundles. Eclipse Juno platform bundles depend on for Eclipse bundles. Eclipse Juno platform bundles depend on
@ -29,18 +27,19 @@ Change-Id: Ia1ece07ece2412bc4a88901631f3f651ad2b634b
--- ---
.../p2/remote/RemoteRepositoryCacheManager.java | 14 +++++++ .../p2/remote/RemoteRepositoryCacheManager.java | 14 +++++++
.../tycho/p2/target/TargetDefinitionResolver.java | 12 ++++-- .../tycho/p2/target/TargetDefinitionResolver.java | 12 ++++--
.../p2/target/TargetPlatformBundlePublisher.java | 15 ++----- .../p2/target/TargetPlatformBundlePublisher.java | 15 ++------
.../tycho/p2/target/TargetPlatformFactoryImpl.java | 45 ++++++++++++++++++-- .../tycho/p2/target/TargetPlatformFactoryImpl.java | 45 ++++++++++++++++++++--
.../tycho/p2/repository/LocalRepositoryReader.java | 44 +++++++++++++++++++- .../tycho/p2/repository/LocalRepositoryReader.java | 44 ++++++++++++++++++++-
.../facade/TargetPlatformConfigurationStub.java | 6 ++- .../facade/TargetPlatformConfigurationStub.java | 6 ++-
.../tycho-bundles-external.product | 1 + .../tycho-bundles-external.product | 1 +
.../eclipse/tycho/core/locking/FileLockerImpl.java | 26 +++++++++--- .../eclipse/tycho/core/locking/FileLockerImpl.java | 26 ++++++++++---
.../core/maven/TychoMavenLifecycleParticipant.java | 13 ++++++ .../core/maven/TychoMavenLifecycleParticipant.java | 13 +++++++
.../tycho/core/osgitools/AbstractTychoProject.java | 23 +++++++++++ .../tycho/core/osgitools/AbstractTychoProject.java | 23 +++++++++++
.../tycho/core/osgitools/OsgiBundleProject.java | 29 ++++++++++++- .../tycho/core/osgitools/OsgiBundleProject.java | 29 +++++++++++++-
.../DefaultTargetPlatformConfigurationReader.java | 6 ++- .../DefaultTargetPlatformConfigurationReader.java | 6 ++-
.../tycho/p2/resolver/P2DependencyResolver.java | 48 ++++++++++++++++++++++ tycho-p2/tycho-p2-facade/pom.xml | 5 +++
13 files changed, 253 insertions(+), 29 deletions(-) .../tycho/p2/resolver/P2DependencyResolver.java | 30 +++++++++++++++
14 files changed, 240 insertions(+), 29 deletions(-)
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java
index 707b1c5..c8c4152 100644 index 707b1c5..c8c4152 100644
@ -511,8 +510,24 @@ index 4a1f157..65cbf47 100644
setTargetPlatformResolver(result, configuration); setTargetPlatformResolver(result, configuration);
diff --git a/tycho-p2/tycho-p2-facade/pom.xml b/tycho-p2/tycho-p2-facade/pom.xml
index dc1941f..0e84b5b 100644
--- a/tycho-p2/tycho-p2-facade/pom.xml
+++ b/tycho-p2/tycho-p2-facade/pom.xml
@@ -57,6 +57,11 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.fedoraproject.p2</groupId>
+ <artifactId>org.fedoraproject.p2</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
</dependencies>
<build>
diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
index 255df24..554702d 100644 index 255df24..2e4e113 100644
--- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java --- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
+++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java +++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
@@ -15,6 +15,7 @@ import java.net.MalformedURLException; @@ -15,6 +15,7 @@ import java.net.MalformedURLException;
@ -523,49 +538,38 @@ index 255df24..554702d 100644
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@@ -201,6 +202,53 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen @@ -85,6 +86,7 @@ import org.eclipse.tycho.p2.resolver.facade.P2ResolverFactory;
import org.eclipse.tycho.p2.target.facade.PomDependencyCollector;
import org.eclipse.tycho.p2.target.facade.TargetPlatformConfigurationStub;
import org.eclipse.tycho.repository.registry.facade.ReactorRepositoryManagerFacade;
+import org.fedoraproject.p2.EclipseSystemLayout;
@Component(role = DependencyResolver.class, hint = P2DependencyResolver.ROLE_HINT, instantiationStrategy = "per-lookup")
public class P2DependencyResolver extends AbstractLogEnabled implements DependencyResolver, Initializable {
@@ -201,6 +203,34 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen
pomDependencies.setProjectLocation(project.getBasedir()); pomDependencies.setProjectLocation(project.getBasedir());
} }
+ // Add Fedora Local P2 Repository when running in local mode + // Add Fedora Local P2 Repository when running in local mode
+ if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) { + if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
+ +
+ // Find all SCL roots + Set<String> allLocations = new HashSet<String>();
+ String jconfdirs = System.getProperty("JAVACONFDIRS"); + final Set<String> roots = EclipseSystemLayout.getSCLRoots();
+ List<String> roots = new ArrayList<String>();
+ roots.add("/");
+ if (jconfdirs != null && !jconfdirs.isEmpty()) {
+ String[] jconfRoots = jconfdirs.split(":");
+ for (String jconfRoot : jconfRoots) {
+ roots.add(jconfRoot.replace("etc/java", ""));
+ }
+ }
+ +
+ String is64 = System.getProperty("os.arch").contains("64") ? "64" : ""; + Set<String> platformDirs = new HashSet<String>();
+ // Locations for all OSGi bundles + Set<String> internalDirs = new HashSet<String>();
+ final String[] locations = new String[] { "usr/lib" + is64 + "/eclipse/plugins", "usr/lib" + is64 + "/eclipse/features", + Set<String> externalDirs = new HashSet<String>();
+ "usr/share/eclipse/dropins/", "usr/lib" + is64 + "/eclipse/dropins/", "usr/share/java/",
+ "usr/lib/java/" };
+
+ List<String> uris = new ArrayList<String>();
+ for (String root : roots) { + for (String root : roots) {
+ for (String loc : locations) { + EclipseSystemLayout.initLocations(Paths.get(root), platformDirs, internalDirs, externalDirs, false);
+ if (Paths.get(root, loc).toFile().exists()) {
+ uris.add("fedora:" + root + loc);
+ }
+ }
+ }
+ String value = System.getProperty("fedora.p2.repos");
+ if (value != null) {
+ String[] paths = value.split(",");
+ for (String path : paths) {
+ if (Paths.get(path).toFile().exists()) {
+ uris.add("fedora:" + path);
+ }
+ }
+ } + }
+ +
+ for (String uri : uris) { + allLocations.addAll(platformDirs);
+ allLocations.addAll(internalDirs);
+ allLocations.addAll(externalDirs);
+ allLocations.addAll(EclipseSystemLayout.getUserDefinedBundleLocations());
+
+ for (String loc : allLocations) {
+ String uri = "fedora:" + loc;
+ try { + try {
+ tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri, new URI(uri))); + tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri, new URI(uri)));
+ } catch (URISyntaxException e) { + } catch (URISyntaxException e) {

View File

@ -23,7 +23,7 @@
Name: tycho Name: tycho
Version: 0.21.0 Version: 0.21.0
Release: 5%{?dist} Release: 6%{?dist}
Summary: Plugins and extensions for building Eclipse plugins and OSGI bundles with Maven Summary: Plugins and extensions for building Eclipse plugins and OSGI bundles with Maven
Group: Development/Libraries Group: Development/Libraries
@ -168,6 +168,8 @@ This package contains the API documentation for %{name}.
# Prepare fedoraproject-p2 # Prepare fedoraproject-p2
tar -xf %{SOURCE5} tar -xf %{SOURCE5}
%pom_disable_module org.fedoraproject.p2.tests fedoraproject-p2
%patch0 -p1 %patch0 -p1
%patch1 -p1 %patch1 -p1
%patch2 -p1 %patch2 -p1
@ -234,7 +236,10 @@ mkdir boot
# Copy Tycho POMs from system repo and set their versions to %%{version}-SNAPSHOT. # Copy Tycho POMs from system repo and set their versions to %%{version}-SNAPSHOT.
for pom in $(grep 'pom</ns1:path>' $medadataFile | sed 's|.*>\(.*\)<.*|\1|'); do for pom in $(grep 'pom</ns1:path>' $medadataFile | sed 's|.*>\(.*\)<.*|\1|'); do
sed s/$sysVer/%{version}-SNAPSHOT/g <$pom >boot/$(basename $pom) sed '
s/$sysVer/%{version}-SNAPSHOT/g
s/%{fp_p2_version}%{fp_p2_snap}/%{fp_p2_version}/
' <$pom >boot/$(basename $pom)
done done
# Update Maven lifecycle mappings for Tycho packaging types provided by tycho-maven-plugin. # Update Maven lifecycle mappings for Tycho packaging types provided by tycho-maven-plugin.
@ -247,6 +252,7 @@ jar uf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
sed ' sed '
s|>/[^<]*/\([^/]*\.pom\)</ns1:path>|>'$PWD'/boot/\1</ns1:path>| s|>/[^<]*/\([^/]*\.pom\)</ns1:path>|>'$PWD'/boot/\1</ns1:path>|
s|>'$sysVer'</ns1:version>|>%{version}-SNAPSHOT</ns1:version><ns1:compatVersions><ns1:version>%{version}-SNAPSHOT</ns1:version></ns1:compatVersions>| s|>'$sysVer'</ns1:version>|>%{version}-SNAPSHOT</ns1:version><ns1:compatVersions><ns1:version>%{version}-SNAPSHOT</ns1:version></ns1:compatVersions>|
s|>'%{fp_p2_version}%{fp_p2_snap}'</ns1:version>|>%{fp_p2_version}</ns1:version><ns1:compatVersions><ns1:version>%{fp_p2_version}</ns1:version></ns1:compatVersions>|
s|%{_javadir}/tycho/tycho-maven-plugin.jar|'$PWD'/boot/tycho-maven-plugin.jar| s|%{_javadir}/tycho/tycho-maven-plugin.jar|'$PWD'/boot/tycho-maven-plugin.jar|
' $medadataFile >boot/tycho-metadata.xml ' $medadataFile >boot/tycho-metadata.xml
%mvn_config resolverSettings/metadataRepositories/repository $PWD/boot/tycho-metadata.xml %mvn_config resolverSettings/metadataRepositories/repository $PWD/boot/tycho-metadata.xml
@ -260,7 +266,7 @@ sed '
%build %build
xmvn -o -Dtycho-version=%{version}-SNAPSHOT -Dmaven.test.skip=true \ xmvn -o -Dtycho-version=%{version}-SNAPSHOT -Dmaven.test.skip=true \
-Dmaven.repo.local=$(pwd)/.m2 -Dfedora.p2.repos=$(pwd)/bootstrap \ -Dmaven.repo.local=$(pwd)/.m2 -Dfedora.p2.repos=$(pwd)/bootstrap \
-f fedoraproject-p2/org.fedoraproject.p2/pom.xml \ -f fedoraproject-p2/pom.xml \
clean install org.apache.maven.plugins:maven-javadoc-plugin:aggregate clean install org.apache.maven.plugins:maven-javadoc-plugin:aggregate
xmvn -o -DtychoBootstrapVersion=%{version}-SNAPSHOT -Dmaven.test.skip=true \ xmvn -o -DtychoBootstrapVersion=%{version}-SNAPSHOT -Dmaven.test.skip=true \
@ -272,6 +278,11 @@ clean install org.apache.maven.plugins:maven-javadoc-plugin:aggregate
mkdir -p $RPM_BUILD_ROOT%{_javadir}/%{name} mkdir -p $RPM_BUILD_ROOT%{_javadir}/%{name}
install -d -m 755 $RPM_BUILD_ROOT%{_mavenpomdir} install -d -m 755 $RPM_BUILD_ROOT%{_mavenpomdir}
# fedoraproject-p2 parent
mod=fedoraproject-p2
install -pm 644 $mod/pom.xml $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-$mod.pom
%add_maven_depmap JPP.%{name}-$mod.pom
# org.fedoraproject.p2 # org.fedoraproject.p2
mod=fedoraproject-p2/org.fedoraproject.p2 mod=fedoraproject-p2/org.fedoraproject.p2
aid=`basename $mod` aid=`basename $mod`
@ -368,6 +379,9 @@ install -m 644 $osgiStateJarPath $RPM_BUILD_ROOT%{_javadir}/%{name}/osgi.compati
%{_javadocdir}/%{name} %{_javadocdir}/%{name}
%changelog %changelog
* Thu Sep 04 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-6
- Use fedoraproject-p2 to do OSGi bundle discovery.
* Wed Sep 03 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-5 * Wed Sep 03 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-5
- Include eclipse features dir in custom resolver - Include eclipse features dir in custom resolver