diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..888737e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/fedoraproject-p2-290f67a4c717599b2f5166ea89aa5365571314b1.tar.gz
+SOURCES/org.eclipse.tycho-tycho-1.4.0.tar.xz
diff --git a/.tycho.metadata b/.tycho.metadata
new file mode 100644
index 0000000..04cc225
--- /dev/null
+++ b/.tycho.metadata
@@ -0,0 +1,2 @@
+95db40ba7632e9d1cc78b1aef59440a1f7bea532 SOURCES/fedoraproject-p2-290f67a4c717599b2f5166ea89aa5365571314b1.tar.gz
+5f0700a1da64982e9e700372a57a084c4f6b0447 SOURCES/org.eclipse.tycho-tycho-1.4.0.tar.xz
diff --git a/SOURCES/0001-Fix-the-Tycho-build-to-work-on-Fedora.patch b/SOURCES/0001-Fix-the-Tycho-build-to-work-on-Fedora.patch
new file mode 100644
index 0000000..2ff8a53
--- /dev/null
+++ b/SOURCES/0001-Fix-the-Tycho-build-to-work-on-Fedora.patch
@@ -0,0 +1,53 @@
+From f4cc3361a141ac14556a956745bd0488bee2420d Mon Sep 17 00:00:00 2001
+From: Roland Grunberg <rgrunber@redhat.com>
+Date: Tue, 12 Jun 2012 09:56:38 -0400
+Subject: [PATCH 1/6] Fix the Tycho build to work on Fedora.
+
+Minor fixes of limited scope needed to have Tycho building on Fedora.
+
+Change-Id: Ic8c0514c1fa10ee53580d2654ac6a363ccd66814
+---
+ .../core/maven/TychoMavenLifecycleParticipant.java    |  4 +++-
+ .../tycho/test/AbstractTychoIntegrationTest.java      | 11 +++++------
+ 2 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+index 3cba466..f733774 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+@@ -102,7 +102,9 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic
+     }
+ 
+     private void validate(List<MavenProject> projects) throws MavenExecutionException {
+-        validateConsistentTychoVersion(projects);
++        if (System.getProperty("tycho.enableVersionCheck") != null) {
++            validateConsistentTychoVersion(projects);
++        }
+         validateUniqueBaseDirs(projects);
+     }
+ 
+diff --git a/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java b/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
+index 475afe2..2295d66 100644
+--- a/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
++++ b/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
+@@ -114,12 +114,11 @@ public abstract class AbstractTychoIntegrationTest {
+             verifier.getCliOptions().add(customOptions);
+         }
+ 
+-        if (System.getProperty(SYSPROP_STATELOCATION) != null) {
+-            verifier.setForkJvm(false);
+-            String m2eresolver = System.getProperty("tychodev-maven.ext.class.path"); // XXX
+-            if (m2eresolver != null) {
+-                verifier.addCliOption("-Dmaven.ext.class.path=" + m2eresolver);
+-            }
++        String m2eState = System.getProperty("m2eclipse.workspace.state");
++        String m2eResolver = System.getProperty("m2eclipse.workspace.resolver");
++
++        if (m2eState != null && m2eResolver != null) {
++            verifier.getVerifierProperties().put("m2eclipse.workspace.state", m2eState);
+         }
+ 
+         return verifier;
+-- 
+2.20.1
+
diff --git a/SOURCES/0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch b/SOURCES/0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch
new file mode 100644
index 0000000..fc1cc2b
--- /dev/null
+++ b/SOURCES/0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch
@@ -0,0 +1,649 @@
+From 623916240bd0626e7fd5146bfb2acfe9c77502da Mon Sep 17 00:00:00 2001
+From: Roland Grunberg <rgrunber@redhat.com>
+Date: Tue, 12 Jun 2012 10:38:51 -0400
+Subject: [PATCH 2/6] Implement a custom resolver for Tycho in local mode.
+
+When running in local mode, dependencies should be resolved by looking
+on the local system. Remote repositories should be ignored unless
+offline mode is disabled.
+
+Use fedoraproject-p2 to resolve bundles from their system location.
+
+Relax constraints for bundles used in Tycho's Equinox runtime.
+
+Since Fedora 17, we need an Execution Environment of at least JavaSE-1.6
+for Eclipse bundles. Eclipse Juno platform bundles depend on
+javax.annotation. In Fedora this is provided by geronimo-annotation, but
+has a dependency on javax.lang.model (since 1.6).
+
+Use the defined target environments in local mode when the property
+tycho.local.keepTarget is set.
+
+In situations where Tycho must resolve maven artifacts, upstream's
+implementation only looks in the reactor cache. In Fedora, maven
+artifacts may be located on the system using repository layouts
+understood by XMvn. Therefore, when an artifact is not found in the
+reactor cache, resolution should be attempted using the XMvn Resolver.
+
+Upstream/Fedora Tycho differ in the kind of OSGi Runtime used
+(org.eclipse.tycho:tycho-bundles-external:zip) so use separate location
+for our runtime (fedora-eclipse) to avoid collisions.
+
+Change-Id: Ia1ece07ece2412bc4a88901631f3f651ad2b634b
+---
+ .../internal/DefaultEquinoxEmbedder.java      | 11 ++++-
+ .../remote/RemoteRepositoryCacheManager.java  | 11 +++++
+ .../p2/target/TargetDefinitionResolver.java   | 17 +++++--
+ .../target/TargetPlatformBundlePublisher.java | 15 ++-----
+ .../p2/target/TargetPlatformFactoryImpl.java  | 45 +++++++++++++++++--
+ .../p2/repository/LocalRepositoryReader.java  | 44 +++++++++++++++++-
+ .../TargetPlatformConfigurationStub.java      |  6 ++-
+ .../tycho-bundles-external.product            |  3 ++
+ .../tycho/core/locking/FileLockerImpl.java    | 26 ++++++++---
+ .../maven/TychoMavenLifecycleParticipant.java | 13 ++++++
+ .../core/osgitools/AbstractTychoProject.java  | 23 ++++++++++
+ .../core/osgitools/OsgiBundleProject.java     |  5 ++-
+ ...aultTargetPlatformConfigurationReader.java |  6 ++-
+ .../osgi/runtime/TychoOsgiRuntimeLocator.java | 27 ++++++++---
+ tycho-p2/tycho-p2-facade/pom.xml              |  5 +++
+ .../p2/resolver/P2DependencyResolver.java     |  8 ++++
+ 16 files changed, 227 insertions(+), 38 deletions(-)
+
+diff --git a/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java b/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
+index 359c464..b644539 100644
+--- a/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
++++ b/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
+@@ -240,7 +240,14 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled
+                     if (verIdx > 0) {
+                         bundles.append(name.substring(0, verIdx));
+                     } else {
+-                        throw new EquinoxEmbedderException("File name doesn't match expected pattern: " + file);
++                        // In Fedora, NAME_VERSION.QUALIFIER.jar is too fragile.
++                        // Let's also accept NAME.jar
++                        verIdx = name.lastIndexOf(".jar");
++                        if (verIdx > 0) {
++                            bundles.append(name.substring(0, verIdx));
++                        } else {
++                            throw new EquinoxEmbedderException("File name doesn't match expected pattern: " + file);
++                        }
+                     }
+                 }
+             }
+@@ -248,7 +255,7 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled
+     }
+ 
+     protected boolean isFrameworkBundle(File file) {
+-        return file.getName().startsWith("org.eclipse.osgi_");
++        return file.getName().startsWith("org.eclipse.osgi_") || file.getName().equals("org.eclipse.osgi.jar");
+     }
+ 
+     String getReferenceUrl(File file) {
+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 1f233e1..c9a6dc1 100644
+--- 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
+@@ -12,14 +12,18 @@ package org.eclipse.tycho.p2.remote;
+ 
+ import java.io.File;
+ import java.io.IOException;
++import java.net.MalformedURLException;
+ import java.net.URI;
++import java.net.URL;
+ 
+ import org.eclipse.core.runtime.IProgressMonitor;
+ import org.eclipse.core.runtime.IStatus;
+ import org.eclipse.core.runtime.Status;
+ import org.eclipse.equinox.internal.p2.repository.CacheManager;
++import org.eclipse.equinox.internal.p2.repository.Messages;
+ import org.eclipse.equinox.internal.p2.repository.Transport;
+ import org.eclipse.equinox.p2.core.ProvisionException;
++import org.eclipse.osgi.util.NLS;
+ import org.eclipse.tycho.core.shared.MavenContext;
+ import org.eclipse.tycho.core.shared.MavenLogger;
+ import org.eclipse.tycho.p2.impl.Activator;
+@@ -51,6 +55,13 @@ class RemoteRepositoryCacheManager extends CacheManager {
+     @Override
+     public File createCache(URI repositoryLocation, String prefix, IProgressMonitor monitor)
+             throws IOException, ProvisionException {
++        try {
++            new URL(repositoryLocation.toASCIIString());
++        } catch (MalformedURLException e) {
++            throw new ProvisionException(new Status(IStatus.ERROR, org.eclipse.equinox.internal.p2.repository.Activator.ID,
++                    ProvisionException.REPOSITORY_NOT_FOUND, NLS.bind(Messages.CacheManager_CannotLoadNonUrlLocation,
++                            repositoryLocation), null));
++        }
+         File cacheFile = getCache(repositoryLocation, prefix);
+         if (offline) {
+             if (cacheFile != null) {
+diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
+index e5e99a1..1cf8089 100644
+--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
++++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
+@@ -20,6 +20,7 @@ import java.util.Set;
+ 
+ import org.eclipse.core.runtime.IProgressMonitor;
+ import org.eclipse.core.runtime.NullProgressMonitor;
++import org.eclipse.core.runtime.URIUtil;
+ import org.eclipse.equinox.p2.core.IProvisioningAgent;
+ import org.eclipse.equinox.p2.core.ProvisionException;
+ import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+@@ -121,7 +122,12 @@ public final class TargetDefinitionResolver {
+                 resolverRun.addLocation((InstallableUnitLocation) locationDefinition);
+ 
+                 for (Repository repository : ((InstallableUnitLocation) locationDefinition).getRepositories()) {
+-                    artifactRepositories.add(repository.getLocation());
++                    // We cannot resolve a non-file URI in local mode
++                    if ((System.getProperty("TYCHO_MVN_LOCAL") == null && System.getProperty("TYCHO_MVN_RPMBUILD") == null)
++                            || URIUtil.isFileURI(repository.getLocation())
++                            || "fedora".equals(repository.getLocation().getScheme())) {
++                        artifactRepositories.add(repository.getLocation());
++                    }
+                 }
+             } else {
+                 logger.warn("Target location type '" + locationDefinition.getTypeDescription() + "' is not supported");
+@@ -278,8 +284,13 @@ public final class TargetDefinitionResolver {
+ 
+             loadedRepositories = new ArrayList<>();
+             for (Repository repository : locationDefinition.getRepositories()) {
+-                repositoryIdManager.addMapping(repository.getId(), repository.getLocation());
+-                loadedRepositories.add(loadRepository(repository));
++                // We cannot resolve a non-file URI in local mode
++                if ((System.getProperty("TYCHO_MVN_LOCAL") == null && System.getProperty("TYCHO_MVN_RPMBUILD") == null)
++                        || URIUtil.isFileURI(repository.getLocation())
++                        || "fedora".equals(repository.getLocation().getScheme())) {
++                    repositoryIdManager.addMapping(repository.getId(), repository.getLocation());
++                    loadedRepositories.add(loadRepository(repository));
++                }
+             }
+         }
+ 
+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 6a59c2a..0d15db9 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
+@@ -28,6 +28,7 @@ import org.eclipse.tycho.core.shared.MavenLogger;
+ import org.eclipse.tycho.p2.impl.publisher.MavenPropertiesAdvice;
+ import org.eclipse.tycho.p2.impl.publisher.repo.TransientArtifactRepository;
+ import org.eclipse.tycho.p2.metadata.IArtifactFacade;
++import org.eclipse.tycho.p2.repository.LocalRepositoryReader;
+ import org.eclipse.tycho.p2.repository.MavenRepositoryCoordinates;
+ import org.eclipse.tycho.repository.local.GAVArtifactDescriptor;
+ import org.eclipse.tycho.repository.p2base.artifact.provider.IRawArtifactFileProvider;
+@@ -216,15 +217,6 @@ public class TargetPlatformBundlePublisher {
+             GAVArtifactDescriptor descriptorForRepository = new GAVArtifactDescriptor(baseDescriptor,
+                     repositoryCoordinates);
+ 
+-            File requiredArtifactLocation = new File(getBaseDir(),
+-                    descriptorForRepository.getMavenCoordinates().getLocalRepositoryPath());
+-            File actualArtifactLocation = mavenArtifact.getLocation();
+-            if (!equivalentPaths(requiredArtifactLocation, actualArtifactLocation)) {
+-                throw new AssertionFailedException(
+-                        "The Maven artifact to be added to the target platform is not stored at the required location on disk: required \""
+-                                + requiredArtifactLocation + "\" but was \"" + actualArtifactLocation + "\"");
+-            }
+-
+             internalAddInternalDescriptor(descriptorForRepository);
+         }
+ 
+@@ -257,8 +249,9 @@ public class TargetPlatformBundlePublisher {
+ 
+         @Override
+         protected File internalGetArtifactStorageLocation(IArtifactDescriptor descriptor) {
+-            String relativePath = toInternalDescriptor(descriptor).getMavenCoordinates().getLocalRepositoryPath();
+-            return new File(getBaseDir(), relativePath);
++            MavenRepositoryCoordinates coord = toInternalDescriptor(descriptor).getMavenCoordinates();
++            LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir());
++            return reader.getLocalArtifactLocation(coord.getGav(), coord.getClassifier(), coord.getExtensionOrDefault());
+         }
+ 
+         private File getBaseDir() {
+diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
+index 7854bca..2247be6 100644
+--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
++++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
+@@ -32,6 +32,9 @@ import org.eclipse.core.runtime.URIUtil;
+ import org.eclipse.equinox.p2.core.IProvisioningAgent;
+ import org.eclipse.equinox.p2.core.ProvisionException;
+ import org.eclipse.equinox.p2.metadata.IInstallableUnit;
++import org.eclipse.equinox.p2.metadata.expression.ExpressionUtil;
++import org.eclipse.equinox.p2.metadata.expression.IExpression;
++import org.eclipse.equinox.p2.query.IQuery;
+ import org.eclipse.equinox.p2.query.IQueryResult;
+ import org.eclipse.equinox.p2.query.QueryUtil;
+ import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
+@@ -273,9 +276,43 @@ public class TargetPlatformFactoryImpl implements TargetPlatformFactory {
+             metadataRepositories.add(localMetadataRepository);
+         }
+ 
+-        for (IMetadataRepository repository : metadataRepositories) {
+-            IQueryResult<IInstallableUnit> matches = repository.query(QueryUtil.ALL_UNITS, monitor);
+-            result.addAll(matches.toUnmodifiableSet());
++        if (System.getProperty("TYCHO_MVN_LOCAL") != null) {
++            final IExpression notmatchIU_ID = ExpressionUtil.parse("id != $0");
++            Set<IMetadataRepository> fedoraRepos = new HashSet<IMetadataRepository> ();
++
++            // Sanity check even though the repo we want should be at index 1
++            for (IMetadataRepository repository : metadataRepositories) {
++                if ("fedora".equals(repository.getLocation().getScheme())) {
++                    fedoraRepos.add(repository);
++                }
++            }
++
++            IQuery<IInstallableUnit> noLocalIUs = QueryUtil.createIUAnyQuery();
++
++            // Create a conjunction query that negates all IUs on the local system
++            for (IMetadataRepository repo : fedoraRepos) {
++                for (IInstallableUnit unit : repo.query(QueryUtil.ALL_UNITS, null).toUnmodifiableSet()) {
++                    noLocalIUs = QueryUtil.createCompoundQuery(noLocalIUs,
++                            QueryUtil.createMatchQuery(notmatchIU_ID, unit.getId()), true);
++                }
++            }
++
++            for (IMetadataRepository repository : metadataRepositories) {
++                IQueryResult<IInstallableUnit> matches;
++                if ("fedora".equals(repository.getLocation().getScheme())) {
++                    matches = repository.query(QueryUtil.ALL_UNITS, monitor);
++                } else {
++                    // Don't collect any remote IUs that can be found on the system
++                    // This will favour IUs in the system local p2 repository
++                    matches = repository.query(noLocalIUs, monitor);
++                }
++                result.addAll(matches.toUnmodifiableSet());
++            }
++        } else {
++            for (IMetadataRepository repository : metadataRepositories) {
++                IQueryResult<IInstallableUnit> matches = repository.query(QueryUtil.ALL_UNITS, monitor);
++                result.addAll(matches.toUnmodifiableSet());
++            }
+         }
+ 
+         result.addAll(pomDependenciesContent.gatherMavenInstallableUnits());
+@@ -329,7 +366,7 @@ public class TargetPlatformFactoryImpl implements TargetPlatformFactory {
+         List<URI> allRemoteArtifactRepositories = new ArrayList<>();
+ 
+         for (MavenRepositoryLocation location : completeRepositories) {
+-            if (!offline || URIUtil.isFileURI(location.getURL())) {
++            if (!offline || URIUtil.isFileURI(location.getURL()) || "fedora".equals(location.getURL().getScheme())) {
+                 allRemoteArtifactRepositories.add(location.getURL());
+             }
+         }
+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 e05f871..74b8028 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
+@@ -11,6 +11,8 @@
+ package org.eclipse.tycho.p2.repository;
+ 
+ import java.io.File;
++import java.lang.reflect.Constructor;
++import java.lang.reflect.Method;
+ 
+ public class LocalRepositoryReader implements RepositoryReader {
+ 
+@@ -21,8 +23,46 @@ public class LocalRepositoryReader implements RepositoryReader {
+     }
+ 
+     @Override
++    @SuppressWarnings({ "unchecked", "rawtypes" })
+     public File getLocalArtifactLocation(GAV gav, String classifier, String extension) {
+-        return new File(localMavenRepositoryRoot, RepositoryLayoutHelper.getRelativePath(gav, classifier, 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();
++            }
++        }
++        return file;
++
++    }
+ }
+diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
+index 19d12c6..abe89e8 100644
+--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
++++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
+@@ -56,7 +56,11 @@ public class TargetPlatformConfigurationStub {
+     }
+ 
+     public void addP2Repository(MavenRepositoryLocation location) {
+-        this.repositories.add(location);
++        // We cannot resolve a non-file URI in local mode while offline
++        if (System.getProperty("TYCHO_MVN_RPMBUILD") == null || "file".equalsIgnoreCase(location.getURL().getScheme())
++                || "fedora".equalsIgnoreCase(location.getURL().getScheme())) {
++            this.repositories.add(location);
++        }
+     }
+ 
+     // convenience method for tests
+diff --git a/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product b/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
+index 11b7c8b..182122d 100644
+--- a/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
++++ b/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
+@@ -79,6 +79,9 @@
+       <plugin id="org.sat4j.core"/>
+       <plugin id="org.sat4j.pb"/>
+       <plugin id="org.tukaani.xz"/>
++      <plugin id="org.kxml2"/>
++      <plugin id="org.xmlpull"/>
++      <plugin id="org.fedoraproject.p2"/>
+    </plugins>
+ 
+    <configurations>
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java b/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
+index e4612c3..3abcc5d 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
+@@ -27,22 +27,36 @@ public class FileLockerImpl implements FileLocker {
+     final File lockMarkerFile;
+ 
+     public FileLockerImpl(File file, Location anyLocation) {
++        File lockFileCandidate = null;
+         try {
+             if (file.isDirectory()) {
+-                this.lockMarkerFile = new File(file, LOCKFILE_SUFFIX).getCanonicalFile();
++                lockFileCandidate = new File(file, LOCKFILE_SUFFIX).getCanonicalFile();
+             } else {
+-                this.lockMarkerFile = new File(file.getParentFile(), file.getName() + LOCKFILE_SUFFIX)
+-                        .getCanonicalFile();
++                lockFileCandidate = new File(file.getParentFile(), file.getName() + LOCKFILE_SUFFIX).getCanonicalFile();
+             }
+-            if (lockMarkerFile.isDirectory()) {
+-                throw new RuntimeException("Lock marker file " + lockMarkerFile + " already exists and is a directory");
++
++            if (lockFileCandidate.isDirectory()) {
++                throw new RuntimeException("Lock marker file " + lockFileCandidate + " already exists and is a directory");
+             }
+-            File parentDir = lockMarkerFile.getParentFile();
++            File parentDir = lockFileCandidate.getParentFile();
+             if (!parentDir.isDirectory() && !parentDir.mkdirs()) {
+                 throw new RuntimeException("Could not create parent directory " + parentDir + " of lock marker file");
+             }
++
++            String baseDir = System.getProperty("user.dir");
++            String reactorCache = baseDir + "/.m2/";
++            // In Fedora we can only assume reactor cache is safe for read/write.
++            if (!lockFileCandidate.getAbsolutePath().startsWith(reactorCache)) {
++                String lockFileDir = reactorCache + LOCKFILE_SUFFIX;
++                // If the file is located within baseDir, no need to repeat
++                String lockFileName = file.getAbsolutePath().replace(baseDir, "").replace("/", "-").replaceFirst("-", "/") + LOCKFILE_SUFFIX;
++                lockFileCandidate = new File(lockFileDir, lockFileName);
++            }
++
++            this.lockMarkerFile = lockFileCandidate;
+             this.lockFileLocation = anyLocation.createLocation(null, null, false);
+             this.lockFileLocation.set(lockMarkerFile.toURL(), false, lockMarkerFile.getAbsolutePath());
++
+         } catch (MalformedURLException e) {
+             throw new RuntimeException(e);
+         } catch (IOException e) {
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+index f733774..1bd97e6 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+@@ -30,6 +30,7 @@ import org.apache.maven.project.MavenProject;
+ import org.codehaus.plexus.PlexusContainer;
+ import org.codehaus.plexus.component.annotations.Component;
+ import org.codehaus.plexus.component.annotations.Requirement;
++import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+ import org.codehaus.plexus.logging.Logger;
+ import org.eclipse.tycho.ReactorProject;
+ import org.eclipse.tycho.core.osgitools.BundleReader;
+@@ -86,6 +87,18 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic
+ 
+             configureComponents(session);
+ 
++            try {
++                if (plexus.lookup("org.fedoraproject.xmvn.resolver.Resolver") != null) {
++                    if (session.isOffline()) {
++                        System.setProperty("TYCHO_MVN_RPMBUILD", "");
++                    } else {
++                        System.setProperty("TYCHO_MVN_LOCAL", "");
++                    }
++                }
++            } catch (ComponentLookupException e) {
++                // No XMvn (Upstream Maven in use)
++            }
++
+             for (MavenProject project : projects) {
+                 resolver.setupProject(session, project, DefaultReactorProject.adapt(project));
+             }
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
+index 94b02f1..f833854 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
+@@ -19,6 +19,9 @@ import org.eclipse.tycho.artifacts.DependencyArtifacts;
+ import org.eclipse.tycho.core.TargetPlatformConfiguration;
+ import org.eclipse.tycho.core.TychoConstants;
+ import org.eclipse.tycho.core.TychoProject;
++import org.eclipse.tycho.core.ee.ExecutionEnvironmentUtils;
++import org.eclipse.tycho.core.ee.UnknownEnvironmentException;
++import org.eclipse.tycho.core.ee.shared.ExecutionEnvironment;
+ import org.eclipse.tycho.core.ee.shared.ExecutionEnvironmentConfiguration;
+ import org.eclipse.tycho.core.osgitools.targetplatform.LocalDependencyResolver;
+ import org.eclipse.tycho.core.osgitools.targetplatform.MultiEnvironmentDependencyArtifacts;
+@@ -94,15 +97,35 @@ public abstract class AbstractTychoProject extends AbstractLogEnabled implements
+ 
+         String configuredForcedProfile = tpConfiguration.getExecutionEnvironment();
+         if (configuredForcedProfile != null) {
++            configuredForcedProfile = overrideToAtLeastJavaSE16(configuredForcedProfile);
+             sink.overrideProfileConfiguration(configuredForcedProfile,
+                     "target-platform-configuration <executionEnvironment>");
+         }
+ 
+         String configuredDefaultProfile = tpConfiguration.getExecutionEnvironmentDefault();
+         if (configuredDefaultProfile != null) {
++            configuredDefaultProfile = overrideToAtLeastJavaSE16(configuredDefaultProfile);
+             sink.setProfileConfiguration(configuredDefaultProfile,
+                     "target-platform-configuration <executionEnvironmentDefault>");
+         }
+     }
+ 
++    public String overrideToAtLeastJavaSE16 (String profile) {
++        try {
++            ExecutionEnvironment ee = ExecutionEnvironmentUtils.getExecutionEnvironment(profile);
++
++            if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
++                // EE must be at least JavaSE-1.6
++                final ExecutionEnvironment javaSE16 = ExecutionEnvironmentUtils.getExecutionEnvironment("JavaSE-1.6");
++                if (! ee.isCompatibleCompilerTargetLevel(javaSE16.getCompilerTargetLevelDefault())) {
++                    ee = javaSE16;
++                }
++            }
++
++            return ee.getProfileName();
++        } catch (UnknownEnvironmentException e) {
++            // can't happen, ee is validated during configuration parsing
++            return null;
++        }
++    }
+ }
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
+index 13ed51d..bd21204 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
+@@ -504,6 +504,7 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro
+         String pdeProfile = getEclipsePluginProject(DefaultReactorProject.adapt(project)).getBuildProperties()
+                 .getJreCompilationProfile();
+         if (pdeProfile != null) {
++            pdeProfile = overrideToAtLeastJavaSE16(pdeProfile);
+             sink.setProfileConfiguration(pdeProfile.trim(), "build.properties");
+ 
+         } else {
+@@ -514,13 +515,13 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro
+ 
+                 switch (tpConfiguration.getBREEHeaderSelectionPolicy()) {
+                 case first:
+-                    sink.setProfileConfiguration(manifestBREEs[0].getProfileName(),
++                    sink.setProfileConfiguration(overrideToAtLeastJavaSE16(manifestBREEs[0].getProfileName()),
+                             "Bundle-RequiredExecutionEnvironment (first entry)");
+                     break;
+ 
+                 case minimal:
+                     ExecutionEnvironment manifestMinimalEE = Collections.min(Arrays.asList(manifestBREEs));
+-                    sink.setProfileConfiguration(manifestMinimalEE.getProfileName(),
++                    sink.setProfileConfiguration(overrideToAtLeastJavaSE16(manifestMinimalEE.getProfileName()),
+                             "Bundle-RequiredExecutionEnvironment (minimal entry)");
+                 }
+ 
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java b/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
+index ed413e1..0b89bae 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
+@@ -68,7 +68,11 @@ public class DefaultTargetPlatformConfigurationReader {
+                             + configuration.toString());
+                 }
+ 
+-                addTargetEnvironments(result, project, configuration);
++                // Use the defined environments only in local mode with tycho.local.keepTarget
++                if ((System.getProperty("TYCHO_MVN_LOCAL") == null && System.getProperty("TYCHO_MVN_RPMBUILD") == null)
++                        || System.getProperty("tycho.local.keepTarget") != null) {
++                    addTargetEnvironments(result, project, configuration);
++                }
+ 
+                 setTargetPlatformResolver(result, configuration);
+ 
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
+index 35f1b6b..b64653e 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
+@@ -12,6 +12,8 @@ package org.eclipse.tycho.osgi.runtime;
+ 
+ import java.io.File;
+ import java.io.IOException;
++import java.nio.file.Files;
++import java.nio.file.StandardCopyOption;
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Map;
+@@ -163,36 +165,49 @@ public class TychoOsgiRuntimeLocator implements EquinoxRuntimeLocator {
+             File artifactFile = new File(session.getLocalRepository().getBasedir(), session.getLocalRepository()
+                     .pathOf(artifact));
+             File eclipseDir = new File(artifactFile.getParentFile(), "eclipse");
++            File eclipseSaveDir = new File(artifactFile.getParentFile(), "eclipse-save");
++            File fedoraDir = new File(artifactFile.getParentFile(), "fedora-eclipse");
+ 
+             FileLocker locker = fileLockService.getFileLocker(artifactFile);
+             locker.lock();
+             try {
+-                if (!eclipseDir.exists() || artifact.isSnapshot()) {
++                if (!fedoraDir.exists() || artifact.isSnapshot()) {
+                     logger.debug("Extracting Tycho's OSGi runtime");
+ 
+-                    if (artifact.getFile().lastModified() > eclipseDir.lastModified()) {
++                    if (artifact.getFile().lastModified() > fedoraDir.lastModified()) {
+                         logger.debug("Unpacking Tycho's OSGi runtime to " + eclipseDir);
+                         try {
+-                            FileUtils.deleteDirectory(eclipseDir);
++                            FileUtils.deleteDirectory(fedoraDir);
++                            if (eclipseDir.exists()) {
++                                FileUtils.rename(eclipseDir, eclipseSaveDir);
++                            }
+                         } catch (IOException e) {
+-                            logger.warn("Failed to delete Tycho's OSGi runtime " + eclipseDir + ": " + e.getMessage());
++                            logger.warn("Failed to delete Tycho's OSGi runtime " + fedoraDir + ": " + e.getMessage());
+                         }
+                         unArchiver.setSourceFile(artifact.getFile());
+                         unArchiver.setDestDirectory(eclipseDir.getParentFile());
+                         try {
+                             unArchiver.extract();
++                            logger.debug("Moving Tycho's OSGi runtime to " + fedoraDir);
++                            FileUtils.rename(eclipseDir, fedoraDir);
++                            if (eclipseSaveDir.exists()) {
++                                FileUtils.rename(eclipseSaveDir, eclipseDir);
++                            }
+                         } catch (ArchiverException e) {
+                             throw new MavenExecutionException("Failed to unpack Tycho's OSGi runtime: "
+                                     + e.getMessage(), e);
++                        } catch (IOException e) {
++                            throw new MavenExecutionException("Failed to move Tycho's OSGi runtime: " + e.getMessage(),
++                                    e);
+                         }
+ 
+-                        eclipseDir.setLastModified(artifact.getFile().lastModified());
++                        fedoraDir.setLastModified(artifact.getFile().lastModified());
+                     }
+                 }
+             } finally {
+                 locker.release();
+             }
+-            description.addInstallation(eclipseDir);
++            description.addInstallation(fedoraDir);
+         } else {
+             description.addBundle(artifact.getFile());
+         }
+diff --git a/tycho-p2/tycho-p2-facade/pom.xml b/tycho-p2/tycho-p2-facade/pom.xml
+index 9c59b14..54cc384 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
+index d5be20c..8405058 100644
+--- 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
+@@ -89,6 +89,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 {
+@@ -209,6 +210,13 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen
+             pomDependencies.setProjectLocation(project.getBasedir());
+         }
+ 
++        // Add Fedora Local P2 Repository when running in local mode
++        if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
++            for (URI uri : EclipseSystemLayout.getRepositories()) {
++                tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri.getPath(), uri));
++            }
++        }
++
+         for (ArtifactRepository repository : project.getRemoteArtifactRepositories()) {
+             addEntireP2RepositoryToTargetPlatform(repository, tpConfiguration);
+         }
+-- 
+2.20.1
+
diff --git a/SOURCES/0003-Tycho-should-always-delegate-artifact-resolution-to-.patch b/SOURCES/0003-Tycho-should-always-delegate-artifact-resolution-to-.patch
new file mode 100644
index 0000000..87b88ad
--- /dev/null
+++ b/SOURCES/0003-Tycho-should-always-delegate-artifact-resolution-to-.patch
@@ -0,0 +1,688 @@
+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
+
diff --git a/SOURCES/0004-Bug-537963-Make-the-default-EE-Java-1.8.patch b/SOURCES/0004-Bug-537963-Make-the-default-EE-Java-1.8.patch
new file mode 100644
index 0000000..1db821f
--- /dev/null
+++ b/SOURCES/0004-Bug-537963-Make-the-default-EE-Java-1.8.patch
@@ -0,0 +1,183 @@
+From b7dae094376ab642339d5bcbe52e16cba0fa11f1 Mon Sep 17 00:00:00 2001
+From: Mat Booth <mat.booth@redhat.com>
+Date: Wed, 15 Aug 2018 15:58:10 +0100
+Subject: [PATCH 4/6] Bug 537963 - Make the default EE Java 1.8
+
+This allows bundles that don't otherwise specify an EE (for example
+if the bundle contains only a plugin.xml, or is a documentation only
+bundle, or otherwise does not contain any bytecode) to continue
+working in environments that are supported by the latest release
+of Eclipse.
+
+Change-Id: Ic6e41c3000c85e2e4222e8153e84b7701ab0e750
+Signed-off-by: Mat Booth <mat.booth@redhat.com>
+---
+ .../tycho/osgicompiler/test/OsgiCompilerTest.java |  6 +++---
+ .../ee/ExecutionEnvironmentConfigurationImpl.java |  6 +++---
+ .../ee/ExecutionEnvironmentConfigurationTest.java |  4 ++--
+ .../tycho/core/osgitools/EquinoxResolverTest.java |  2 +-
+ .../org/eclipse/tycho/core/test/TychoTest.java    |  5 ++++-
+ .../src/test/resources/projects/bree/pom.xml      |  1 +
+ .../bree/tycho-default/META-INF/MANIFEST.MF       |  5 +++++
+ .../projects/bree/tycho-default/build.properties  |  2 ++
+ .../resources/projects/bree/tycho-default/pom.xml | 15 +++++++++++++++
+ 9 files changed, 36 insertions(+), 10 deletions(-)
+ create mode 100644 tycho-core/src/test/resources/projects/bree/tycho-default/META-INF/MANIFEST.MF
+ create mode 100644 tycho-core/src/test/resources/projects/bree/tycho-default/build.properties
+ create mode 100644 tycho-core/src/test/resources/projects/bree/tycho-default/pom.xml
+
+diff --git a/tycho-compiler-plugin/src/test/java/org/eclipse/tycho/osgicompiler/test/OsgiCompilerTest.java b/tycho-compiler-plugin/src/test/java/org/eclipse/tycho/osgicompiler/test/OsgiCompilerTest.java
+index 7451d97..a0dae08 100644
+--- a/tycho-compiler-plugin/src/test/java/org/eclipse/tycho/osgicompiler/test/OsgiCompilerTest.java
++++ b/tycho-compiler-plugin/src/test/java/org/eclipse/tycho/osgicompiler/test/OsgiCompilerTest.java
+@@ -37,7 +37,7 @@ import copied.org.apache.maven.plugin.CompilationFailureException;
+ public class OsgiCompilerTest extends AbstractTychoMojoTestCase {
+ 
+     private static final int TARGET_1_4 = 48;
+-    private static final int TARGET_9 = 53;
++    private static final int TARGET_8 = 52;
+ 
+     protected File storage;
+ 
+@@ -235,10 +235,10 @@ public class OsgiCompilerTest extends AbstractTychoMojoTestCase {
+         List<MavenProject> projects = getSortedProjects(basedir, null);
+         MavenProject project;
+         // project with neither POM nor MANIFEST configuration => must fallback to 
+-        // source/target level == 9
++        // source/target level == 8
+         project = projects.get(1);
+         getMojo(projects, project).execute();
+-        assertBytecodeMajorLevel(TARGET_9, new File(project.getBasedir(), "target/classes/Generic.class"));
++        assertBytecodeMajorLevel(TARGET_8, new File(project.getBasedir(), "target/classes/Generic.class"));
+ 
+         // project with multiple execution envs.
+         // Minimum source and target level must be taken
+diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationImpl.java b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationImpl.java
+index 11f0ccf..ea67379 100644
+--- a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationImpl.java
++++ b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationImpl.java
+@@ -1,5 +1,5 @@
+ /*******************************************************************************
+- * Copyright (c) 2012, 2014 SAP SE and others.
++ * Copyright (c) 2012, 2018 SAP SE 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
+@@ -19,8 +19,8 @@ import org.eclipse.tycho.core.ee.shared.SystemCapability;
+ import org.eclipse.tycho.core.shared.BuildFailureException;
+ 
+ public class ExecutionEnvironmentConfigurationImpl implements ExecutionEnvironmentConfiguration {
+-    // Most likely best to always be the latest known supported EE
+-    private static final String DEFAULT_EXECUTION_ENVIRONMENT = "JavaSE-9";
++    // Most likely best to always be the latest known supported long-term supported EE
++    private static final String DEFAULT_EXECUTION_ENVIRONMENT = "JavaSE-1.8";
+ 
+     private static final int PRIMARY = 0;
+     private static final int SECONDARY = 1;
+diff --git a/tycho-core/src/test/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationTest.java b/tycho-core/src/test/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationTest.java
+index 5391eb2..f04fa21 100644
+--- a/tycho-core/src/test/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationTest.java
++++ b/tycho-core/src/test/java/org/eclipse/tycho/core/ee/ExecutionEnvironmentConfigurationTest.java
+@@ -45,9 +45,9 @@ public class ExecutionEnvironmentConfigurationTest {
+ 
+     @Test
+     public void testDefaults() {
+-        assertThat(subject.getProfileName(), is("JavaSE-9"));
++        assertThat(subject.getProfileName(), is("JavaSE-1.8"));
+         assertThat(subject.isCustomProfile(), is(false));
+-        assertThat(subject.getFullSpecification().getProfileName(), is("JavaSE-9"));
++        assertThat(subject.getFullSpecification().getProfileName(), is("JavaSE-1.8"));
+     }
+ 
+     @Test
+diff --git a/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/EquinoxResolverTest.java b/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/EquinoxResolverTest.java
+index 54f1134..fa2ce8d 100644
+--- a/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/EquinoxResolverTest.java
++++ b/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/EquinoxResolverTest.java
+@@ -61,7 +61,7 @@ public class EquinoxResolverTest extends AbstractTychoMojoTestCase {
+         properties.put("tycho-version", TychoVersion.getTychoVersion());
+ 
+         List<MavenProject> projects = getSortedProjects(basedir, properties, null);
+-        assertEquals(6, projects.size());
++        assertEquals(7, projects.size());
+ 
+         assertEquals("executionenvironment.manifest-minimal", projects.get(2).getArtifactId());
+         ExecutionEnvironment ee = TychoProjectUtils.getExecutionEnvironmentConfiguration(projects.get(2))
+diff --git a/tycho-core/src/test/java/org/eclipse/tycho/core/test/TychoTest.java b/tycho-core/src/test/java/org/eclipse/tycho/core/test/TychoTest.java
+index e8eb7ad..a88e2e4 100644
+--- a/tycho-core/src/test/java/org/eclipse/tycho/core/test/TychoTest.java
++++ b/tycho-core/src/test/java/org/eclipse/tycho/core/test/TychoTest.java
+@@ -360,7 +360,7 @@ public class TychoTest extends AbstractTychoMojoTestCase {
+         properties.put("tycho-version", TychoVersion.getTychoVersion());
+ 
+         List<MavenProject> projects = getSortedProjects(basedir, properties, null);
+-        assertEquals(6, projects.size());
++        assertEquals(7, projects.size());
+         int i = 0;
+ 
+         assertEquals("executionenvironment.manifest", projects.get(++i).getArtifactId());
+@@ -377,6 +377,9 @@ public class TychoTest extends AbstractTychoMojoTestCase {
+ 
+         assertEquals("executionenvironment.pom-default", projects.get(++i).getArtifactId());
+         assertEquals("OSGi/Minimum-1.2", getActiveEEProfile(projects.get(i)));
++
++        assertEquals("executionenvironment.tycho-default", projects.get(++i).getArtifactId());
++        assertEquals("JavaSE-1.8", getActiveEEProfile(projects.get(i)));
+     }
+ 
+     public void testWithProjectReferencesItself() throws Exception {
+diff --git a/tycho-core/src/test/resources/projects/bree/pom.xml b/tycho-core/src/test/resources/projects/bree/pom.xml
+index 1ddff1d..18c5885 100644
+--- a/tycho-core/src/test/resources/projects/bree/pom.xml
++++ b/tycho-core/src/test/resources/projects/bree/pom.xml
+@@ -14,6 +14,7 @@
+ 		<module>pom-hard</module>
+ 		<module>buildproperties</module>
+ 		<module>pom-default</module>
++		<module>tycho-default</module>
+ 	</modules>
+ 
+ </project>
+diff --git a/tycho-core/src/test/resources/projects/bree/tycho-default/META-INF/MANIFEST.MF b/tycho-core/src/test/resources/projects/bree/tycho-default/META-INF/MANIFEST.MF
+new file mode 100644
+index 0000000..e6d85c6
+--- /dev/null
++++ b/tycho-core/src/test/resources/projects/bree/tycho-default/META-INF/MANIFEST.MF
+@@ -0,0 +1,5 @@
++Manifest-Version: 1.0
++Bundle-ManifestVersion: 2
++Bundle-Name: A bundle that specifies no EE at all and relies on Tycho to set one.
++Bundle-SymbolicName: executionenvironment.tycho-default
++Bundle-Version: 1.0.0
+diff --git a/tycho-core/src/test/resources/projects/bree/tycho-default/build.properties b/tycho-core/src/test/resources/projects/bree/tycho-default/build.properties
+new file mode 100644
+index 0000000..7b02ed4
+--- /dev/null
++++ b/tycho-core/src/test/resources/projects/bree/tycho-default/build.properties
+@@ -0,0 +1,2 @@
++bin.includes = META-INF/
++
+diff --git a/tycho-core/src/test/resources/projects/bree/tycho-default/pom.xml b/tycho-core/src/test/resources/projects/bree/tycho-default/pom.xml
+new file mode 100644
+index 0000000..f538f5e
+--- /dev/null
++++ b/tycho-core/src/test/resources/projects/bree/tycho-default/pom.xml
+@@ -0,0 +1,15 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
++	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
++	<modelVersion>4.0.0</modelVersion>
++
++	<parent>
++		<groupId>executionenvironment</groupId>
++		<artifactId>parent</artifactId>
++		<version>1.0.0</version>
++	</parent>
++
++	<artifactId>executionenvironment.tycho-default</artifactId>
++	<version>1.0.0</version>
++	<packaging>eclipse-plugin</packaging>
++
++</project>
+-- 
+2.20.1
+
diff --git a/SOURCES/EmptyMojo.java b/SOURCES/EmptyMojo.java
new file mode 100644
index 0000000..84d970f
--- /dev/null
+++ b/SOURCES/EmptyMojo.java
@@ -0,0 +1,19 @@
+package org.fedoraproject;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.AbstractMojo;
+
+/**
+ * Empty goal to fix
+ * @goal empty
+ * @phase clean
+ */
+public class EmptyMojo
+    extends AbstractMojo
+{
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+    }
+}
diff --git a/SOURCES/p2-install.sh b/SOURCES/p2-install.sh
new file mode 100755
index 0000000..e04cb9d
--- /dev/null
+++ b/SOURCES/p2-install.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+set -e
+
+_prefer_jre="true"
+. /usr/share/java-utils/java-functions
+
+set_jvm
+
+set_classpath \
+    beust-jcommander \
+    eclipse/osgi \
+    slf4j/api \
+    slf4j/simple \
+    tycho/org.fedoraproject.p2 \
+    tycho/xmvn-p2-installer-plugin \
+    xmvn/xmvn-api \
+    xmvn/xmvn-core \
+
+MAIN_CLASS=org.fedoraproject.p2.app.P2InstallerApp
+run "$@"
diff --git a/SOURCES/tycho-bootstrap.sh b/SOURCES/tycho-bootstrap.sh
new file mode 100755
index 0000000..0340fdd
--- /dev/null
+++ b/SOURCES/tycho-bootstrap.sh
@@ -0,0 +1,115 @@
+#! /bin/bash -e
+
+. $(pwd)/tycho-scripts.sh
+
+preV=$1
+v="$preV-SNAPSHOT"
+osgiV='3.13.0.v20180428-1222'
+osgiCompatV='1.1.100.v20180428-1222'
+fp2V='0.0.1-SNAPSHOT'
+bundles=()
+bundles[0]='tycho-bundles/org.eclipse.tycho.embedder.shared'
+bundles[1]='tycho-bundles/org.eclipse.tycho.core.shared'
+bundles[2]='tycho-bundles/org.eclipse.tycho.p2.resolver.shared'
+bundles[3]='tycho-bundles/org.eclipse.tycho.p2.tools.shared'
+bundles[4]='tycho-bundles/org.eclipse.tycho.p2.maven.repository'
+bundles[5]='tycho-bundles/org.eclipse.tycho.p2.resolver.impl'
+bundles[6]='tycho-bundles/org.eclipse.tycho.p2.tools.impl'
+
+xtraBundles[0]='fedoraproject-p2/org.fedoraproject.p2'
+
+deps[0]=""
+deps[1]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar"
+deps[2]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar"
+deps[3]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar"
+deps[4]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar"
+deps[5]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.maven.repository/target/org.eclipse.tycho.p2.maven.repository-${v}.jar:fedoraproject-p2/org.fedoraproject.p2/target/org.fedoraproject.p2-${fp2V}.jar"
+deps[6]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.tools.shared/target/org.eclipse.tycho.p2.tools.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.maven.repository/target/org.eclipse.tycho.p2.maven.repository-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.impl/target/org.eclipse.tycho.p2.resolver.impl-${v}.jar"
+
+xtraDeps[0]=""
+
+externalDeps[4]="org.eclipse.equinox.common,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.artifact.repository,org.eclipse.osgi"
+externalDeps[5]="org.eclipse.core.runtime,org.eclipse.equinox.security,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.director,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.updatesite,org.eclipse.core.net,org.eclipse.equinox.common,org.eclipse.osgi,org.eclipse.equinox.preferences"
+externalDeps[6]="org.eclipse.equinox.p2.director.app,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.updatesite,org.eclipse.core.runtime,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.director,org.eclipse.osgi,org.eclipse.equinox.common,org.eclipse.equinox.app,org.eclipse.equinox.registry"
+
+xtraExternalDeps[0]="org.eclipse.osgi,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.app,slf4j.api"
+
+reactorprojs=( 'tycho-embedder-api' 'tycho-metadata-model' 'sisu-equinox/sisu-equinox-api' 'sisu-equinox/sisu-equinox-embedder' 'tycho-core' 'tycho-packaging-plugin' 'tycho-p2/tycho-p2-facade' 'tycho-maven-plugin' 'tycho-p2/tycho-p2-repository-plugin' 'tycho-p2/tycho-p2-publisher-plugin' 'target-platform-configuration' 'tycho-artifactcomparator' 'sisu-equinox/sisu-equinox-launching' 'tycho-p2/tycho-p2-plugin' 'tycho-lib-detector' 'tycho-compiler-jdt' 'tycho-compiler-plugin' )
+
+for ((i=0; i < ${#xtraBundles[@]}; i++)) ;do
+  echo ''
+  echo 'Building ' ${xtraBundles[${i}]} '...'
+  echo ''
+  isolateProject ${xtraBundles[${i}]} ${fp2V}
+  minibuild ${xtraBundles[${i}]} "${xtraDeps[${i}]}" ${xtraExternalDeps[${i}]}
+  unifyProject ${xtraBundles[${i}]}
+done
+
+# TODO: stop minibuild function from hard-coding org/eclipse/tycho GID path
+dir=$(pwd)/.m2/org/fedoraproject/p2/org.fedoraproject.p2/
+mkdir -p ${dir}
+ln -s $(pwd)/.m2/org/eclipse/tycho/org.fedoraproject.p2/${fp2V} ${dir}
+
+for ((i=0; i < ${#bundles[@]}; i++)) ;do
+  echo ''
+  echo 'Building ' ${bundles[${i}]} '...'
+  echo ''
+  isolateProject ${bundles[${i}]}
+  minibuild ${bundles[${i}]} "${deps[${i}]}" ${externalDeps[${i}]}
+  unifyProject ${bundles[${i}]}
+done
+
+# Run the build on this maven reactor project
+for proj in ${reactorprojs[@]} ; do
+  isolateProject ${proj}
+  xmvn -B -o -e -f "${proj}/pom.xml" -Dmaven.repo.local=$(pwd)/.m2 -Dmaven.test.skip=true \
+    -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8 -Dproject.build.sourceEncoding=UTF-8 \
+    clean install
+  unifyProject ${proj}
+done
+
+# Add org.fedoraproject.p2 to target platform for tycho-bundles-external
+extras='bootstrap/extras'
+mkdir -p ${extras}
+fp2Loc=`find .m2 -name "org.fedoraproject.p2-*.jar"`
+cp ${fp2Loc} ${extras}
+
+# Tycho Bundles External (needed for Tycho's OSGi Runtime)
+tbeDir='tycho-bundles/tycho-bundles-external'
+tbeTargetDir="${tbeDir}/target"
+wantedBundles=`sed 's/ fragment=\"true\"//' "${tbeDir}/tycho-bundles-external.product" | sed -n 's/.*<plugin id=\"\(.*\)\"\/>.*/\1/ p'`
+
+mkdir -p ${tbeTargetDir}'/eclipse/plugins'
+copyBundles "${wantedBundles}" "${tbeTargetDir}/eclipse/plugins"
+
+pushd ${tbeTargetDir}
+
+echo "#Eclipse Product File
+#Thu Dec 19 21:40:37 EST 2013
+version=${v}
+name=org.eclipse.tycho.p2
+id=tycho-bundles-external" > 'eclipse/.eclipseproduct'
+
+mkdir -p 'eclipse/configuration'
+
+echo '#Product Runtime Configuration File
+#Thu Dec 19 21:40:37 EST 2013
+osgi.bundles=org.apache.commons.codec,org.apache.commons.logging,org.apache.httpcomponents.httpclient,org.apache.httpcomponents.httpcore,org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.net,org.eclipse.core.runtime@4\:start,org.eclipse.core.runtime.compatibility.registry,org.eclipse.ecf,org.eclipse.ecf.filetransfer,org.eclipse.ecf.identity,org.eclipse.ecf.provider.filetransfer,org.eclipse.ecf.provider.filetransfer.httpclient4,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl,org.eclipse.ecf.provider.filetransfer.ssl,org.eclipse.ecf.ssl,org.eclipse.equinox.app,org.eclipse.equinox.common@2\:start,org.eclipse.equinox.concurrent,org.eclipse.equinox.ds@2\:start,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.launcher,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.director,org.eclipse.equinox.p2.director.app,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.garbagecollector,org.eclipse.equinox.p2.jarprocessor,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.touchpoint.natives,org.eclipse.equinox.p2.transport.ecf,org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.equinox.security,org.eclipse.equinox.simpleconfigurator,org.eclipse.equinox.simpleconfigurator.manipulator,org.eclipse.equinox.util,org.eclipse.osgi.services,org.eclipse.osgi.compatibility.state,org.eclipse.tycho.noopsecurity,org.sat4j.core,org.sat4j.pb,org.eclipse.osgi.util,org.apache.felix.scr,org.kxml2,org.xmlpull,org.fedoraproject.p2
+osgi.bundles.defaultStartLevel=4
+eclipse.product=org.eclipse.equinox.p2.director.app.product
+osgi.splashPath=platform\:/base/plugins/org' > 'eclipse/configuration/config.ini'
+
+zip -r "tycho-bundles-external-${v}.zip" 'eclipse'
+
+popd
+
+loc=".m2/org/eclipse/tycho/tycho-bundles-external/${v}"
+
+mkdir -p ${loc}
+cp "${tbeTargetDir}/tycho-bundles-external-${v}.zip" ${loc}
+cp 'tycho-bundles/tycho-bundles-external/pom.xml' "${loc}/tycho-bundles-external-${v}.pom"
+
+sed -i "s/<equinoxVersionMaven>.*<\/equinoxVersionMaven>/<equinoxVersionMaven>${osgiV}<\/equinoxVersionMaven>/" pom.xml
+sed -i "s/<equinoxCompatVersionMaven>.*<\/equinoxCompatVersionMaven>/<equinoxCompatVersionMaven>${osgiCompatV}<\/equinoxCompatVersionMaven>/" pom.xml
+# xmvn-p2-installer-plugin needs to find the org.eclipse.osgi bundle
+sed -i "s/>\${equinox-version}</>${osgiV}</" fedoraproject-p2/xmvn-p2-installer-plugin/pom.xml
diff --git a/SOURCES/tycho-debundle.sh b/SOURCES/tycho-debundle.sh
new file mode 100755
index 0000000..b7255f1
--- /dev/null
+++ b/SOURCES/tycho-debundle.sh
@@ -0,0 +1,25 @@
+#! /bin/bash
+
+. $(pwd)/tycho-scripts.sh
+
+projLoc=$1
+zipLoc=$projLoc/target/*.zip
+mfLoc=$2
+
+zipDir=`dirname ${zipLoc}`
+zipFile=`basename ${zipLoc}`
+tmpDir=${zipDir}/tmp
+[ -z "$mfLoc" ] && mfLoc=/dev/null
+
+mkdir -p ${tmpDir}
+unzip -d ${tmpDir} ${zipLoc}
+wantedBundles=`sed 's/ fragment=\"true\"//' ${projLoc}/*.product | sed -n 's/.*<plugin id=\"\(.*\)\"\/>.*/\1/ p'`
+pushd ${tmpDir}
+pluginsDir=`find . -type d -name plugins`
+pushd ${pluginsDir} && rm -rf *
+symlinkBundles "${wantedBundles}"
+for b in *; do readlink $b; done >$mfLoc
+popd
+zip -ry ${zipFile} *
+popd
+mv ${tmpDir}/${zipFile} ${zipLoc}
diff --git a/SOURCES/tycho-scripts.sh b/SOURCES/tycho-scripts.sh
new file mode 100755
index 0000000..25ed6af
--- /dev/null
+++ b/SOURCES/tycho-scripts.sh
@@ -0,0 +1,181 @@
+#! /bin/bash
+
+function minibuild () {
+
+basedir=$1
+
+src=$(cat "${basedir}/build.properties" | grep 'source..' | cut -d'=' -f2 | sed -e 's/ //g')
+output=$(cat "${basedir}/build.properties" | grep 'output..' | cut -d'=' -f2 | sed -e 's/ //g')
+bName=$(cat "${basedir}/META-INF/MANIFEST.MF" | grep 'Bundle-SymbolicName:' | sed 's/Bundle-SymbolicName: \([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/')
+artifactId=$(cat "${basedir}/pom.xml" | sed '/<parent>/,/<\/parent>/ d' | grep "<artifactId>" | sed 's/.*<artifactId>\(.*\)<\/artifactId>.*/\1/')
+version=$(cat "${basedir}/pom.xml" | grep "<version>" | sed 's/.*<version>\(.*\)<\/version>.*/\1/')
+
+# External (System) dependencies
+if [ $# -eq 3 ]; then
+  mkdir -p "${basedir}/target/externalDeps"
+  copyBundles $3 "${basedir}/target/externalDeps"
+else
+  mkdir -p "${basedir}/target"
+fi
+
+mkdir -p "${basedir}/${output}"
+
+# Compile
+cp=
+if [ $# -gt 1 ]; then
+  cp='-classpath '$2':'"${basedir}"'/target/externalDeps/*'
+fi
+
+javac -d "${basedir}/${output}" -encoding utf8 \
+  $(for file in `find "${basedir}/${src}" -name "*.java"`; \
+    do echo -n "${file} "; \
+  done;) \
+  ${cp}
+
+# Package
+pushd ${basedir}
+pushd ${output}
+classfiles=`for file in $(find . -name "*.class"); do echo -n ' -C '${output} ${file} ; done;`
+popd
+packagefiles="${classfiles}"
+[ -e about.html ] && packagefiles="about.html $packagefiles"
+[ -e plugin.properties ] && packagefiles="plugin.properties $packagefiles"
+[ -e plugin.xml ] && packagefiles="plugin.xml $packagefiles"
+[ -e OSGI-INF ] && packagefiles="OSGI-INF $packagefiles"
+jar -cfmv "target/${bName}-${version}.jar" 'META-INF/MANIFEST.MF' ${packagefiles}
+popd
+
+# Install
+loc=".m2/org/eclipse/tycho/${artifactId}/${version}"
+mkdir -p ${loc}
+cp "${basedir}/target/${bName}-${version}.jar" ${loc}
+cp "${basedir}/pom.xml" "${loc}/${bName}-${version}.pom"
+
+}
+
+
+function copyBundles () {
+
+# X_SCLS expands to list of currently enabled SCLs, in the order they were enabled, if any
+scls="$X_SCLS"
+baseLocations=( '/usr/share/java' '/usr/lib/java' '/usr/lib/eclipse' )
+osgiLocations=(${baseLocations[@]} ${osgiLocations[@]} )
+for scl in ${scls} ; do
+  osgiLocations=( ${baseLocations[@]/#//opt/rh/${scl}/root} ${osgiLocations[@]} )
+done
+
+prefix="$(pwd)/bootstrap"
+osgiLocations=( ${osgiLocations[@]/#/${prefix}} )
+osgiLocations+=( ${osgiLocations[@]/${prefix}/} )
+osgiLocations=( ${prefix}/extras ${osgiLocations[@]} )
+
+wantedBundles=`echo $1 | tr ',' ' '`
+destDir=$2
+
+for loc in ${osgiLocations[@]} ; do
+  for jar in `find ${loc} -name "*.jar" 2>/dev/null`; do
+    bsn=`readBSN ${jar}`
+    if [ -n "${bsn}" ]; then
+      versionline=`unzip -p ${jar} 'META-INF/MANIFEST.MF' | grep 'Bundle-Version:'`
+      vers=`echo "${versionline}" | sed 's/Bundle-Version: \([a-zA-Z0-9_.-]*\).*/\1/'`
+      if echo ${wantedBundles} | grep "${bsn}" ; then
+        cp ${jar} "${destDir}/${bsn}_${vers}.jar"
+        wantedBundles=`removeFromList "${wantedBundles}" "${bsn}"`
+      fi
+    fi
+  done
+done
+
+}
+
+function symlinkBundles () {
+
+# Bootstrap Built Tycho provides some Eclipse bundles
+# Prevent non-bootstrap build's de-bundling from symlinking to them
+# SCL priority is from right to left.
+# X_SCLS expands to list of currently enabled SCLs, in the order they were enabled, if any
+scls="$X_SCLS"
+baseLocations=( '/usr/share/java/eclipse' '/usr/share/java' '/usr/lib/java' )
+osgiLocations=(${baseLocations[@]} ${osgiLocations[@]} )
+for scl in ${scls} ; do
+  osgiLocations=( ${baseLocations[@]/#//opt/rh/${scl}/root} ${osgiLocations[@]} )
+done
+
+
+wantedBundles=`echo $1 | tr ',' ' '`
+
+for loc in ${osgiLocations[@]} ; do
+  for jar in `find ${loc} -name "*.jar" 2>/dev/null`; do
+    bsn=`readBSN ${jar}`
+    if [ -n "${bsn}" ]; then
+      echo ${wantedBundles} | grep -q "${bsn}"
+      if [ $? -eq 0 ]; then
+        ln -s ${jar} "${bsn}.jar"
+        wantedBundles=`removeFromList "${wantedBundles}" "${bsn}"`
+      fi
+    fi
+  done
+done
+}
+
+function removeFromList () {
+arr=( ${1} )
+for (( i=0; i < ${#arr[@]}; i++ )); do
+  if [ "${arr[${i}]}" = "$2" ]; then
+    arr[${i}]=
+  fi
+done
+echo ${arr[@]}
+}
+
+function isolateProject () {
+  cp $1/pom.xml $1/pom.xml.boot
+
+  sed -i -e "/<artifactId>org.eclipse.osgi</ a <version>${osgiV}</version>" \
+         -e "/<artifactId>org.eclipse.osgi.compatibility.state</ a <version>${osgiCompatV}</version>" \
+         -e '/<parent>/,/<\/parent>/ d' "$1/pom.xml"
+  if ! grep -q generate-metadata "$1/pom.xml" ; then
+    sed -i -e "/<artifactId>plexus-component-metadata</ a <version>1.5.5</version><executions><execution><goals><goal>generate-metadata</goal></goals></execution></executions>" "$1/pom.xml"
+  fi
+
+  if [ $# -eq 2 ]; then
+    sed -i "/<modelVersion>/ a <groupId>org.eclipse.tycho<\/groupId><version>$2<\/version>" "$1/pom.xml"
+  else
+    sed -i "/<modelVersion>/ a <groupId>org.eclipse.tycho<\/groupId><version>${v}<\/version>" "$1/pom.xml"
+  fi
+}
+
+function unifyProject () {
+  cp $1/pom.xml.boot $1/pom.xml
+}
+
+function readBSN () {
+
+bsn=
+manEntryPat="^[a-zA-Z-]*:"
+foundBSNLine=0
+
+while read line; do
+if [ ${foundBSNLine} -eq 1 ]; then
+  echo ${line} | grep -qE ${manEntryPat}
+  if [ $? -eq 0 ]; then
+    break
+  else
+    bsn=${bsn}"`echo ${line} | sed 's/\([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/'`"
+  fi
+fi
+
+echo ${line} | grep -q "Bundle-SymbolicName:"
+if [ $? -eq 0 ]; then
+  bsn=`echo ${line} | grep 'Bundle-SymbolicName:' | sed 's/Bundle-SymbolicName: \([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/'`
+  echo ${line} | grep "Bundle-SymbolicName:" | grep -q ";"
+  if [ $? -eq 0 ]; then
+    break
+  fi
+  foundBSNLine=1
+fi
+done < <(unzip -p $1 'META-INF/MANIFEST.MF')
+
+echo ${bsn}
+
+}
diff --git a/SPECS/tycho.spec b/SPECS/tycho.spec
new file mode 100644
index 0000000..85558b2
--- /dev/null
+++ b/SPECS/tycho.spec
@@ -0,0 +1,1149 @@
+# Tycho depends on itself, and Eclipse to build but in certain cases these
+# requirements may not be satisfiable then building Tycho becomes problematic.
+# For example:
+# * A library (in Fedora) used by Tycho's runtime broke API and so Tycho
+#   from the buildroot is broken
+# * Building into a new distro or buildroot, where neither Tycho nor Eclipse
+#   is available yet and we need to build Tycho before building Eclipse
+# In bootstrap mode, javac and plain xmvn are used to build a subset of
+# Tycho such that it can build a bootstrap mode Eclipse and subsequently
+# fully rebuild itself. In this mode, there may be reduced functionality,
+# so a full non-bootstrap mode build should always be done afterwards.
+%bcond_with bootstrap
+
+# Allow conditionally building without Junit 5 support
+%bcond_without junit5
+
+# Release tags or git SHAs
+%global git_tag tycho-%{version}
+%global fp_p2_git_tag 290f67a4c717599b2f5166ea89aa5365571314b1
+
+%global fp_p2_version 0.0.1
+%global fp_p2_snap -SNAPSHOT
+
+# The location of the xmvn dir into which we need to install the xmvn plugin
+%global xmvn_libdir %(realpath $(dirname $(readlink -f $(which xmvn)))/../lib)
+
+%define __requires_exclude osgi*
+
+Name:           tycho
+Version:        1.4.0
+Release:        2%{?dist}
+Summary:        Plugins and extensions for building Eclipse plugins and OSGI bundles with Maven
+
+# license file is missing but all files having some licensing information are ASL 2.0
+License:        ASL 2.0 and EPL-1.0
+URL:            http://eclipse.org/tycho
+
+# Tycho project source
+Source0:        http://git.eclipse.org/c/tycho/org.eclipse.tycho.git/snapshot/org.eclipse.tycho-%{git_tag}.tar.xz
+# Eclipse Plugin Project supporting filesystem as p2 repository
+Source1:        https://github.com/rgrunber/fedoraproject-p2/archive/%{fp_p2_git_tag}/fedoraproject-p2-%{fp_p2_git_tag}.tar.gz
+
+# this is a workaround for maven-plugin-plugin changes that happened after
+# version 2.4.3 (impossible to have empty mojo created as aggregate). This
+# should be fixed upstream properly
+Source2:        EmptyMojo.java
+Source3:        tycho-scripts.sh
+Source4:        tycho-bootstrap.sh
+Source5:        tycho-debundle.sh
+# Script that can be used to install or simulate installation of P2
+# artifacts. It is used in OSGi requires generation.
+Source6:        p2-install.sh
+
+# Fedora Eclipse bundles needed to build Tycho when Eclipse is not present
+# or when the Eclipse that is present is not compatible
+%if %{with bootstrap}
+Source10:       eclipse-bootstrap-photon.tar.xz
+%endif
+
+# Fedora-specific patches
+Patch0:         0001-Fix-the-Tycho-build-to-work-on-Fedora.patch
+Patch1:         0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch
+Patch2:         0003-Tycho-should-always-delegate-artifact-resolution-to-.patch
+# Submitted upstream: https://bugs.eclipse.org/bugs/show_bug.cgi?id=537963
+Patch3:         0004-Bug-537963-Make-the-default-EE-Java-1.8.patch
+
+ExclusiveArch:  x86_64
+
+BuildArch:      noarch
+
+BuildRequires:  maven-local
+BuildRequires:  mvn(biz.aQute.bnd:bnd-maven-plugin)
+BuildRequires:  mvn(com.beust:jcommander)
+BuildRequires:  mvn(de.pdark:decentxml)
+BuildRequires:  mvn(junit:junit)
+BuildRequires:  mvn(org.apache.commons:commons-compress)
+BuildRequires:  mvn(org.apache.commons:commons-exec)
+BuildRequires:  mvn(org.apache.commons:commons-lang3)
+BuildRequires:  mvn(org.apache.felix:maven-bundle-plugin)
+BuildRequires:  mvn(org.apache.maven:maven-archiver)
+BuildRequires:  mvn(org.apache.maven:maven-compat)
+BuildRequires:  mvn(org.apache.maven:maven-core)
+BuildRequires:  mvn(org.apache.maven:maven-plugin-api)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-clean-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-dependency-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-install-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-plugin-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-source-plugin)
+BuildRequires:  mvn(org.apache.maven.plugin-testing:maven-plugin-testing-harness)
+BuildRequires:  mvn(org.apache.maven.plugin-tools:maven-plugin-annotations)
+BuildRequires:  mvn(org.apache.maven.shared:maven-verifier)
+BuildRequires:  mvn(org.apache.maven.surefire:maven-surefire-common)
+BuildRequires:  mvn(org.apache.maven.surefire:surefire-api)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-archiver)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-compiler-api)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-compiler-manager)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-component-annotations)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-component-metadata)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-container-default)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-utils)
+BuildRequires:  mvn(org.eclipse.jdt:ecj)
+BuildRequires:  mvn(org.fedoraproject.xmvn:xmvn-api)
+BuildRequires:  mvn(org.fedoraproject.xmvn:xmvn-core)
+BuildRequires:  mvn(org.fedoraproject.xmvn:xmvn-install)
+BuildRequires:  mvn(org.fedoraproject.xmvn:xmvn-parent:pom:)
+BuildRequires:  mvn(org.hamcrest:hamcrest-core)
+BuildRequires:  mvn(org.mockito:mockito-core)
+BuildRequires:  mvn(org.ow2.asm:asm-tree)
+BuildRequires:  mvn(org.ow2.asm:asm-util)
+BuildRequires:  mvn(org.slf4j:slf4j-api)
+BuildRequires:  mvn(org.slf4j:slf4j-simple)
+%if %{with junit5}
+BuildRequires:  mvn(org.apache.maven.surefire:surefire-junit-platform)
+BuildRequires:  mvn(org.apiguardian:apiguardian-api)
+BuildRequires:  mvn(org.opentest4j:opentest4j)
+%endif
+
+%if ! %{with bootstrap}
+# Ordinarily Tycho additionally requires itself and Eclipse to build
+BuildRequires:  %{name}
+BuildRequires:  eclipse-platform >= 1:4.11
+%else
+# For bootstrapping, we just need the dependencies of the Eclipse bundles we use
+BuildRequires:  osgi(com.ibm.icu)
+BuildRequires:  osgi(org.apache.commons.jxpath)
+BuildRequires:  osgi(org.apache.batik.css)
+BuildRequires:  osgi(org.kxml2)
+BuildRequires:  osgi(org.sat4j.core)
+BuildRequires:  osgi(org.sat4j.pb)
+BuildRequires:  osgi(org.w3c.css.sac)
+BuildRequires:  osgi(javax.servlet-api)
+BuildRequires:  osgi(javax.servlet.jsp)
+%endif
+
+Requires:       maven-local
+Requires:       xmvn-minimal >= 3
+Requires:       ecj >= 1:4.7.3a-1
+
+%if ! %{with bootstrap}
+Requires:       eclipse-platform >= 1:4.11
+%endif
+
+# maven-clean-plugin is bound to "initialize" Maven phase for
+# "eclipse-repository" projects
+Requires:       maven-clean-plugin
+
+%description
+Tycho is a set of Maven plugins and extensions for building Eclipse
+plugins and OSGI bundles with Maven. Eclipse plugins and OSGI bundles
+have their own metadata for expressing dependencies, source folder
+locations, etc. that are normally found in a Maven POM. Tycho uses
+native metadata for Eclipse plugins and OSGi bundles and uses the POM
+to configure and drive the build. Tycho supports bundles, fragments,
+features, update site projects and RCP applications. Tycho also knows
+how to run JUnit test plugins using OSGi runtime and there is also
+support for sharing build results using Maven artifact repositories.
+
+Tycho plugins introduce new packaging types and the corresponding
+lifecycle bindings that allow Maven to use OSGi and Eclipse metadata
+during a Maven build. OSGi rules are used to resolve project
+dependencies and package visibility restrictions are honored by the
+OSGi-aware JDT-based compiler plugin. Tycho will use OSGi metadata and
+OSGi rules to calculate project dependencies dynamically and injects
+them into the Maven project model at build time. Tycho supports all
+attributes supported by the Eclipse OSGi resolver (Require-Bundle,
+Import-Package, Eclipse-GenericRequire, etc). Tycho will use proper
+classpath access rules during compilation. Tycho supports all project
+types supported by PDE and will use PDE/JDT project metadata where
+possible. One important design goal in Tycho is to make sure there is
+no duplication of metadata between POM and OSGi metadata.
+
+%package javadoc
+Summary: Javadocs for %{name}
+
+%description javadoc
+This package contains the API documentation for %{name}.
+
+%prep
+%setup -q -n org.eclipse.tycho-%{git_tag} -a 1
+mv fedoraproject-p2-%{fp_p2_git_tag} fedoraproject-p2
+
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+
+# Unneeded for RPM builds
+%pom_remove_plugin :maven-site-plugin
+
+%if %{without junit5}
+%pom_disable_module org.eclipse.tycho.surefire.junit5 tycho-surefire
+%pom_remove_dep ":org.eclipse.tycho.surefire.junit5" tycho-surefire/tycho-surefire-plugin
+%endif
+
+# Move from org.sonatype.aether to org.eclipse.aether
+find . -name "*.java" | xargs sed -i 's/org.sonatype.aether/org.eclipse.aether/g'
+find . -name "*.java" | xargs sed -i 's/org.eclipse.aether.util.DefaultRepositorySystemSession/org.eclipse.aether.DefaultRepositorySystemSession/g'
+sed -i 's/public int getPriority/public float getPriority/g' tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnectorFactory.java
+
+# place empty mojo in place
+mkdir -p tycho-maven-plugin/src/main/java/org/fedoraproject
+pushd tycho-maven-plugin/src/main/java/org/fedoraproject
+cp %{SOURCE2} .
+popd
+
+# Homogenise requirement on OSGi bundle
+%if %{with bootstrap}
+sed -i -e "s/>org.eclipse.platform</>org.eclipse.tycho</" pom.xml tycho-core/pom.xml sisu-equinox/sisu-equinox-embedder/pom.xml
+%else
+sed -i -e "s/>org.eclipse.tycho</>org.eclipse.platform</" fedoraproject-p2/xmvn-p2-installer-plugin/pom.xml
+%endif
+
+# Allow building againt older ASMs
+sed -i -e 's/Opcodes\.ASM7/Opcodes.ASM6/' tycho-artifactcomparator/src/main/java/org/eclipse/tycho/zipcomparator/internal/ClassfileComparator.java
+
+# Target platform does not really apply to RPM builds
+%pom_disable_module tycho-bundles-target tycho-bundles
+%pom_xpath_remove "pom:target" tycho-bundles
+
+# we don't have org.apache.commons:commons-compress:jar:sources
+%pom_xpath_remove "pom:dependency[pom:classifier='sources' and pom:artifactId='commons-compress']" tycho-p2/tycho-p2-director-plugin
+
+# Use tycho-testing-harness from the reactor
+sed -i -e '/tycho-testing-harness/a<version>${project.version}</version>' tycho-surefire/tycho-surefire-plugin/pom.xml
+
+# Don't build tests
+for b in core.shared.tests p2.resolver.impl.test p2.resolver.shared.tests p2.maven.repository.tests p2.tools.tests test.utils ; do
+  %pom_disable_module org.eclipse.tycho.$b tycho-bundles
+done
+%pom_disable_module org.fedoraproject.p2.tests fedoraproject-p2
+%pom_xpath_remove "pom:requirement[pom:id='org.hamcrest']" tycho-bundles
+%pom_remove_dep -r :::test
+
+# Bootstrap Build
+%if %{with bootstrap}
+
+# Break circular dep between tycho-lib-detector and tycho-compiler-jdt for bootstrapping
+%pom_xpath_remove "pom:compilerId" tycho-lib-detector
+%pom_remove_dep "org.eclipse.tycho:tycho-compiler-jdt" tycho-lib-detector
+
+# Unpack a compatible version of Eclipse we can use to build against
+tar -xf %{SOURCE10}
+# Install OSGi bundles into local repo to override any incompatible system version
+# that may be already installed
+pushd bootstrap
+for f in usr/lib/eclipse/plugins/org.eclipse.osgi.compatibility.state_*.jar \
+         usr/lib/eclipse/plugins/org.eclipse.osgi.services_*.jar \
+         usr/lib/eclipse/plugins/org.eclipse.osgi.util_*.jar \
+         usr/lib/eclipse/plugins/org.eclipse.osgi_*.jar ; do
+  xmvn -o install:install-file -Dfile=$f -Dpackaging=jar -DgroupId=org.eclipse.tycho -Dmaven.repo.local=$(pwd)/../.m2 \
+    -DartifactId=$(echo $(basename $f) | cut -d_ -f1) -Dversion=$(echo "${f%.jar}" | cut -d_ -f2)
+done
+popd
+
+# Perform the 'minimal' (bootstrap) build of Tycho
+cp %{SOURCE3} %{SOURCE4} .
+./tycho-bootstrap.sh %{version}
+
+# Non-Bootstrap Build
+%else
+
+# Set some temporary build version so that the bootstrapped build has
+# a different version from the nonbootstrapped. Otherwise there will
+# be cyclic dependencies.
+
+sysVer=`grep -C 1 "<artifactId>tycho</artifactId>" %{_mavenpomdir}/tycho/tycho.pom | grep "version" | sed 's/.*>\(.*\)<.*/\1/'`
+mkdir boot
+sed -e 's/ns[0-9]://g' %{_datadir}/maven-metadata/tycho.xml > boot/tycho-metadata.xml
+
+# Copy Tycho POMs from system repo and set their versions to %%{version}-SNAPSHOT.
+for pom in $(grep 'pom</path>' boot/tycho-metadata.xml | sed 's|.*>\(.*\)<.*|\1|'); do
+    sed -e "s/>$sysVer/>%{version}-SNAPSHOT/g" -e "s/%{fp_p2_version}%{fp_p2_snap}/%{fp_p2_version}/" <$pom >boot/$(basename $pom)
+done
+
+# Update Maven lifecycle mappings for Tycho packaging types provided by tycho-maven-plugin.
+cp -p $(build-classpath tycho/tycho-maven-plugin) boot/tycho-maven-plugin.jar
+jar xf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
+sed -i s/$sysVer/%{version}-SNAPSHOT/ META-INF/plexus/components.xml
+jar uf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
+
+# Create XMvn metadata for the new JARs and POMs by customizing system Tycho metadata.
+sed -i -e 's/xmlns=".*"//' boot/tycho-metadata.xml
+%pom_xpath_remove -f "metadata/artifacts/artifact[artifactId='org.eclipse.osgi']" boot/tycho-metadata.xml
+%pom_xpath_remove -f "metadata/artifacts/artifact[artifactId='org.eclipse.osgi.util']" boot/tycho-metadata.xml
+%pom_xpath_remove -f "metadata/artifacts/artifact[artifactId='org.eclipse.osgi.services']" boot/tycho-metadata.xml
+%pom_xpath_remove -f "metadata/artifacts/artifact[artifactId='org.eclipse.osgi.compatibility.state']" boot/tycho-metadata.xml
+sed -i '
+  s|>/[^<]*/\([^/]*\.pom\)</path>|>'$PWD'/boot/\1</path>|
+  s|>'$sysVer'</version>|>%{version}-SNAPSHOT</version><compatVersions><version>%{version}-SNAPSHOT</version></compatVersions>|
+  s|>'%{fp_p2_version}%{fp_p2_snap}'</version>|>%{fp_p2_version}</version><compatVersions><version>%{fp_p2_version}</version></compatVersions>|
+  s|%{_javadir}/tycho/tycho-maven-plugin.jar|'$PWD'/boot/tycho-maven-plugin.jar|
+' boot/tycho-metadata.xml
+%mvn_config resolverSettings/metadataRepositories/repository $PWD/boot/tycho-metadata.xml
+%endif
+
+# Avoid duplicate execution of clean when generating javadocs, see ebz#399756
+%pom_add_plugin :maven-clean-plugin tycho-bundles/tycho-standalone-p2-director "
+<executions>
+  <execution>
+    <id>default-clean-1</id>
+    <phase>initialize</phase>
+    <configuration>
+      <skip>true</skip>
+    </configuration>
+  </execution>
+</executions>"
+
+# Add fp-p2 to main build
+%pom_xpath_inject "pom:modules" "<module>fedoraproject-p2</module>"
+
+%build
+%mvn_build -f -- \
+  -Dtycho-version=%{version}-SNAPSHOT -DtychoBootstrapVersion=%{version}-SNAPSHOT \
+  -Dmaven.repo.local=$(pwd)/.m2 -Dfedora.p2.repos=$(pwd)/bootstrap
+
+%mvn_artifact fedoraproject-p2/org.fedoraproject.p2/pom.xml
+
+# Relying on xmvn p2 plugin being present would be a circular dep
+# So install as if all artifacts are normal jar files
+sed -i -e 's|type>eclipse.*<|type>jar<|' .xmvn-reactor
+
+# Don't package target platform definition files
+%mvn_package "::target::" __noinstall
+
+%install
+# Get debundling scripts
+cp %{SOURCE3} %{SOURCE5} .
+
+%if ! %{with bootstrap}
+# Debundle p2 runtime
+./tycho-debundle.sh $(pwd)/tycho-bundles/tycho-bundles-external \
+  $(pwd)/tycho-bundles/tycho-bundles-external/target/tycho-bundles-external-manifest.txt
+
+# Debundle standalone p2 director
+./tycho-debundle.sh $(pwd)/tycho-bundles/tycho-standalone-p2-director
+%endif
+
+%if %{with bootstrap}
+# Install our own copy of OSGi runtime when bootstrapping to avoid external dep on Eclipse
+for b in org.eclipse.osgi \
+         org.eclipse.osgi.util \
+         org.eclipse.osgi.services \
+         org.eclipse.osgi.compatibility.state ; do
+  osgiJarPath=$(find .m2/org/eclipse/tycho/$b/*/ -name "*.jar")
+  osgiPomPath=$(find .m2/org/eclipse/tycho/$b/*/ -name "*.pom")
+  %mvn_artifact $osgiPomPath $osgiJarPath
+done
+%endif
+
+%mvn_install
+
+%if ! %{with bootstrap}
+install -pm 644 tycho-bundles/tycho-bundles-external/target/tycho-bundles-external-manifest.txt %{buildroot}%{_javadir}/tycho
+%add_maven_depmap org.eclipse.tycho:tycho-bundles-external:txt:manifest:%{version} tycho/tycho-bundles-external-manifest.txt
+%endif
+
+%if %{with bootstrap}
+# Misc other bundles needed for bootstrapping
+for bnd in \
+  core.contenttype \
+  core.expressions \
+  core.filesystem \
+  core.jobs \
+  core.net \
+  core.resources \
+  core.runtime \
+  equinox.app \
+  equinox.common \
+  equinox.concurrent \
+  equinox.preferences \
+  equinox.registry \
+  equinox.security ; do
+bndJarPath=$(find bootstrap -name "org.eclipse.${bnd}_*.jar")
+install -m 644 -T $bndJarPath $RPM_BUILD_ROOT%{_javadir}/tycho/$bnd.jar
+done
+%endif
+
+# For some reason fp-p2 is treated as a compat version, this prevents that
+# TODO: figure out why
+sed -i '/<resolvedVersion>/d' %{buildroot}%{_datadir}/maven-metadata/tycho.xml
+
+# p2-install script
+install -dm 755 %{buildroot}%{_javadir}-utils/
+install -pm 755 %{SOURCE6} %{buildroot}%{_javadir}-utils/
+
+# Symlink XMvn P2 plugin with all dependencies so that it can be loaded by XMvn
+install -dm 755 %{buildroot}%{xmvn_libdir}/installer/
+%if %{with bootstrap}
+ln -s %{_javadir}/tycho/org.eclipse.osgi.jar %{buildroot}%{xmvn_libdir}/installer/
+%else
+ln -s %{_javadir}/eclipse/osgi.jar %{buildroot}%{xmvn_libdir}/installer/
+%endif
+ln -s %{_javadir}/tycho/xmvn-p2-installer-plugin.jar %{buildroot}%{xmvn_libdir}/installer/
+ln -s %{_javadir}/tycho/org.fedoraproject.p2.jar %{buildroot}%{xmvn_libdir}/installer/
+
+%files -f .mfiles
+%{xmvn_libdir}/installer/*
+%{_javadir}-utils/p2-install.sh
+%if %{with bootstrap}
+%{_javadir}/tycho/core.*.jar
+%{_javadir}/tycho/equinox.*.jar
+%endif
+%doc README.md
+
+%files javadoc -f .mfiles-javadoc
+
+%changelog
+* Fri Aug 09 2019 Mat Booth <mat.booth@redhat.com> - 1.4.0-2
+- Fix bootstrapping with new ECF
+
+* Fri May 24 2019 Mat Booth <mat.booth@redhat.com> - 1.4.0-1
+- Update to latest upstream release
+
+* Tue May 07 2019 Mat Booth <mat.booth@redhat.com> - 1.3.0-5
+- Don't build tests, they are not being run anyway
+
+* Mon Mar 11 2019 Mat Booth <mat.booth@redhat.com> - 1.3.0-4
+- Debootstrap build
+- Restrict to the same architectures as Eclipse itself
+
+* Mon Mar 11 2019 Mat Booth <mat.booth@redhat.com> - 1.3.0-3
+- Bootstrap with new felix-scr
+
+* Tue Feb 19 2019 Mat Booth <mat.booth@redhat.com> - 1.3.0-2
+- Allow building against ASM 6
+
+* Mon Feb 18 2019 Mat Booth <mat.booth@redhat.com> - 1.3.0-1
+- Update to latest upstream release
+- Allow conditionally building Junit5 support
+
+* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Dec 13 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-7
+- Fix build against newest Mockito and ASM
+
+* Mon Aug 20 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-6
+- Rebuild against Eclipse 2018-09
+
+* Fri Aug 17 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-5
+- Bootstrap mode improvements
+- Patch to use Java 8 as the default target EE, prevents unnecessary dep
+  on Java 9
+
+* Wed Jul 25 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-4
+- Fix build against new surefire
+
+* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Thu Jul 12 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-2
+- Bootstrap build
+
+* Tue Jun 05 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-1
+- Update to latest release for Java 10 support
+- Drop upstreamed patch
+
+* Wed May 09 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-0.5.git5d018bb
+- Surefure now used maven-shared-utils instead of plexus-utils, fixes test runs
+  in other packages
+
+* Thu May 03 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-0.4.git5d018bb
+- Add a proper patch for ebz#534255
+
+* Wed May 02 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-0.3.git5d018bb
+- Update tycho snapshot and simplify bootstrapping
+
+* Wed May 02 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-0.2.gitd9ce75d
+- Non-bootstrap build
+
+* Mon Apr 30 2018 Mat Booth <mat.booth@redhat.com> - 1.2.0-0.1.gitd9ce75d
+- Update to latest tycho snapshot
+- Bootstrap build
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.0-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Fri Dec 08 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-10
+- Calculate xmvn/lib path, allow building against older and newer surefire
+
+* Wed Oct 11 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-9
+- Port to latest surefire
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Jun 21 2017 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.0.0-7
+- Update to latest fp-p2 snapshot for XMvn 3.0.0 support
+
+* Tue Jun 20 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-6
+- Improve bootstrap mode
+
+* Sat Jun 17 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-5
+- Debootstrap build
+
+* Sat Jun 17 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-4
+- Add osgi.util bundle to tycho runtime
+
+* Wed May 24 2017 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.0.0-3
+- Remove no longer needed requires on Maven plugins
+
+* Wed Apr 26 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-2
+- Debootstrap build
+
+* Thu Apr 20 2017 Mat Booth <mat.booth@redhat.com> - 1.0.0-1
+- Update to 1.0.0
+- Simplify artifact installation
+- Tycho 1.0 requires Eclipse Oxygen
+- Add felix-scr and deps to tycho-bundles-external
+
+* Thu Apr 20 2017 Mat Booth <mat.booth@redhat.com> - 0.26.0-3
+- Fix and enable bootstrap mode
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.26.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Nov 02 2016 Mat Booth <mat.booth@redhat.com> - 0.26.0-1
+- Update to latest upstream
+
+* Mon Jul 25 2016 Mat Booth <mat.booth@redhat.com> - 0.25.0-7
+- Remove incomplete SCL macros
+
+* Thu Jun 30 2016 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.25.0-6
+- Add missing requires on maven-plugin-testing-harness
+
+* Thu Jun 30 2016 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.25.0-5
+- Require full xmvn
+
+* Wed Jun 15 2016 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.25.0-4
+- Add missing requires on maven-source-plugin
+
+* Fri Apr 22 2016 Mat Booth <mat.booth@redhat.com> - 0.25.0-3
+- Require newer ECJ with correct aliases
+
+* Thu Apr 21 2016 Mat Booth <mat.booth@redhat.com> - 0.25.0-2
+- Non-bootstrap build against Eclipse Neon
+
+* Wed Apr 20 2016 Mat Booth <mat.booth@redhat.com> - 0.25.0-1
+- Update to latest upstream release
+- Full bootstrap mode due to incompatibility with Eclipse Mars
+
+* Thu Apr 14 2016 Mat Booth <mat.booth@redhat.com> - 0.23.0-17
+- Fix build against new maven-archiver, which removed some deprecated methods
+  that tycho was using
+
+* Tue Mar 15 2016 Mat Booth <mat.booth@redhat.com> - 0.23.0-16
+- Update to latest fp-p2 snapshot
+
+* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.23.0-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Mon Jan 25 2016 Mat Booth <mat.booth@redhat.com> - 0.23.0-14
+- Updates to latest version of fedoraproject-p2.
+- fedoraproject-p2: Fix a concurrent modification exception when feature
+  plugins have circular deps
+
+* Mon Jan 11 2016 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-13
+- Updated to latest version of fedoraproject-p2.
+- fedoraproject-p2: Correctly handle splitting virtual packages.
+
+* Mon Jan  4 2016 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.23.0-12
+- Update for maven-surefire 2.19.1
+
+* Mon Oct 26 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-11
+- Fix bug in org.eclipse.tycho.surefire.junit4 provider.
+
+* Tue Oct 20 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-10
+- Update to work with maven-surefire 2.19.
+
+* Thu Aug 27 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-9
+- fedoraproject-p2: Enable support for p2 Droplets.
+
+* Tue Jul 28 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-8
+- fedoraproject-p2: Single IU resolving requirements with multiple matches.
+
+* Fri Jul 17 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-7
+- fedoraproject-p2: Remove host localization fragments from reactor units.
+
+* Tue Jun 30 2015 Mat Booth <mat.booth@redhat.com> - 0.23.0-6
+- Fix bootstrap build
+- fedoraproject-p2: Allow xmvn-p2-installer to work in bootstrap mode
+
+* Thu Jun 25 2015 Roland Grunberg <rgrunber@redhat.com> - 0.23.0-5
+- fedoraproject-p2: Do not generate requires for fragments.
+- Update to work with maven-surefire 2.18.
+
+* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.23.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Tue Jun 09 2015 Mat Booth <mat.booth@redhat.com> - 0.23.0-3
+- Fix bootstrap build
+
+* Tue Jun  9 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.23.0-2
+- Port to Plexus Archiver 3.0.1
+
+* Fri Jun 05 2015 Mat Booth <mat.booth@redhat.com> - 0.23.0-1
+- Update to 0.23.0 release
+- Allow tycho-bootstrap.sh to work with "set -e" to fail faster
+  and see errors more easily
+
+* Sat May 30 2015 Alexander Kurtakov <akurtako@redhat.com> 0.22.0-18
+- Fix build with no tomcat servlet.
+
+* Thu May 07 2015 Mat Booth <mat.booth@redhat.com> - 0.22.0-17
+- Add org.tukaani.xz to tycho-bundles-external
+
+* Tue Apr 28 2015 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-16
+- Fix resolution issues when upstream version in local repository.
+- Resolves: rhbz#1216170
+
+* Thu Apr 23 2015 Mat Booth <mat.booth@redhat.com> - 0.22.0-15
+- fedoraproject-p2: Add support for archful dropins
+
+* Mon Apr 20 2015 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-14
+- Handle possible changes to metadata namespace (ns[0-9]).
+
+* Fri Apr 17 2015 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-13
+- fedoraproject-p2: Subpackages '*-tests' should not be in dropins.
+
+* Sun Mar 29 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-12
+- Port to Jetty 9.3.0
+
+* Thu Feb  5 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-11
+- fedoraproject-p2: Fix support for shallow dropin directory layout
+
+* Wed Feb  4 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-10
+- fedoraproject-p2: Bump BREE to JavaSE-1.8
+- fedoraproject-p2: Fix installing of virtual bundles provided by p2.inf
+
+* Wed Jan 28 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-9
+- fedoraproject-p2: Allow installation of bundles not built with tycho
+
+* Mon Jan 19 2015 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-8
+- Introduce basic SCL support.
+- Minor changes for bootstrap build.
+- Suppress failed lookups on non-existing paths in scripts.
+- Explicitly depend on org.hamcrest.core where necessary.
+
+* Thu Dec 11 2014 Mat Booth <mat.booth@redhat.com> - 0.22.0-7
+- fedoraproject-p2: Fix for bundles containing underscores
+
+* Wed Dec 10 2014 Mat Booth <mat.booth@redhat.com> - 0.22.0-6
+- fedoraproject-p2: Update to latest snapshot
+
+* Wed Dec 10 2014 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-5
+- Rebuild to pick up arch-independent ECF bundle locations.
+
+* Mon Dec 08 2014 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-4
+- fedoraproject-p2: Permit installation of tycho-generated source features.
+
+* Thu Dec  4 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-3
+- Non-bootstrap build
+
+* Thu Dec  4 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.22.0-2.1
+- fedoraproject-p2: Add support for installation into SCLs
+- Bootstrap build
+
+* Thu Dec 04 2014 Mat Booth <mat.booth@redhat.com> - 0.22.0-2
+- Fix osgi.jar symlink when in eclipse-bootstrap mode
+- Remove no longer needed workaround for rhbz#1139180
+- Tidy up and remove unneeded R/BRs
+- Also reduce number of changes needed to SCL-ise package
+
+* Mon Dec 01 2014 Mat Booth <mat.booth@redhat.com> - 0.22.0-1
+- Update to tagged release
+
+* Thu Nov 27 2014 Roland Grunberg <rgrunber@redhat.com> - 0.22.0-0.1.gitb1051d
+- Update to 0.22.0 pre-release.
+
+* Thu Nov 27 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-23
+- fedoraproject-p2: Obtain SCL roots by parsing Java conf files
+- fedoraproject-p2: Add support for installing into SCL root
+
+* Thu Nov 27 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-22
+- Install p2-install.sh script in java-utils/
+
+* Thu Nov 27 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-21
+- fedoraproject-p2: Implement installer application
+
+* Tue Nov 25 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-20
+- fedoraproject-p2: Update to latest snapshot (SCL improvements)
+
+* Thu Nov 06 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-19
+- fedoraproject-p2: Fix occasionally failing to generate metadata
+
+* Tue Oct 28 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-18
+- Fixes to bootstrap build.
+- Package com.ibm.icu (icu4j-eclipse) for bootstrap build.
+- Resolves: rhbz#1129801
+
+* Thu Oct 09 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-17
+- fedoraproject-p2: Fix incorrect metadata generation bugs
+
+* Tue Oct 07 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-16
+- fedoraproject-p2: Update to latest snapshot
+
+* Thu Oct 02 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-15
+- Update to build against plexus-archiver 2.6.
+
+* Thu Sep 25 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-14
+- fedoraproject-p2: Fix requires generation bug
+
+* Wed Sep 24 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-13
+- fedoraproject-p2: Allow installation of source bundles
+
+* Mon Sep 22 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-12
+- Add Fedora system repos to target definition resolver.
+- Look for any IU if IU/Version query fails in target definition resolver.
+
+* Fri Sep 12 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-11
+- fedoraproject-p2: Allow installing the same symlink into separate dropins
+
+* Wed Sep 10 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-10
+- Fix tycho-bundles-external-manifest.txt generation
+
+* Wed Sep 10 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-9
+- fedoraproject-p2: Fix self-dependencies failing builds
+
+* Tue Sep 9 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-8
+- Make debundling more resilient to changes.
+- fedoraproject-p2: Update to latest (Fix metapackage merging).
+
+* Mon Sep  8 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.21.0-8
+- fedoraproject-p2: Import XMvn P2 plugin
+- fedoraproject-p2: Fix NPE bug
+- fedoraproject-p2: Avoid extracting tycho-bundles-external.zip
+
+* Fri Sep 05 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-7
+- Debundle tycho-bundles-external and tycho-standalone-p2-director.
+- Resolves: rhbz#789272
+
+* 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
+- Include eclipse features dir in custom resolver
+
+* Wed Sep 03 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-4
+- fedoraproject-p2: Do not regenerate IU metadata on every query.
+
+* Thu Aug 28 2014 Mat Booth <mat.booth@redhat.com> - 0.21.0-3
+- Perform non-bootstrap build
+- Update running-env-only patch
+
+* Wed Aug 27 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-2.1
+- fedoraproject-p2: Fix issues with creation of feature IUs.
+- fedoraproject-p2: Fix jar corruption bug.
+
+* Thu Aug 21 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-2
+- Integrate fedoraproject-p2 into Tycho.
+
+* Thu Jul 24 2014 Roland Grunberg <rgrunber@redhat.com> - 0.21.0-1
+- Update to 0.21.0 Release.
+
+* Fri Jul 11 2014 Mat Booth <mat.booth@redhat.com> - 0.20.0-18
+- Allow director plugin to only assemble products for the current arch
+- Drop some unneeded BR/Rs on surefire (maven-local pulls these in)
+
+* Wed Jul 02 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-17
+- Return non-existant expected local path when resolution fails.
+- Resolves: rhbz#1114120
+
+* Fri Jun 27 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-16
+- Tycho should always delegate artifact resolution to Maven.
+
+* Wed Jun 25 2014 Alexander Kurtakov <akurtako@redhat.com> 0.20.0-15
+- Non-bootstrap build now that aarch64 is done.
+
+* Tue Jun 24 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-14.1
+- Add swt aarch64 fragment to bootstrap repo.
+
+* Tue Jun 24 2014 Alexander Kurtakov <akurtako@redhat.com> 0.20.0-14
+- Full bootstrap build for secondary archs.
+
+* Thu Jun 12 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-13
+- Restore runtime dependencies on XMvn
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.20.0-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Tue Jun  3 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-11
+- Skip intermediary build in non-bootstrap mode
+- Resolves: rhbz#1103839
+- Remove unneeded XMvn bits
+
+* Fri May 30 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-10
+- Fix runtime dependencies on XMvn in POMs
+- Use custom Plexus config to lookup XMvn classes
+- Lookup Aether WorkspaceReader using role hint "ide"
+
+* Thu May 29 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-9
+- Don'n install duplicate Maven metadata for sisu-equinox
+
+* Wed May 21 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-8
+- Use .mfiles generated during build
+
+* Fri May 16 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.20.0-7
+- Add support for XMvn 2.0
+
+* Tue May 13 2014 Alexander Kurtakov <akurtako@redhat.com> 0.20.0-6
+- Make tycho copy licence feature to the system repo.
+
+* Wed Apr 30 2014 Alexander Kurtakov <akurtako@redhat.com> 0.20.0-5
+- Non-bootstrap build.
+
+* Tue Apr 29 2014 Alexander Kurtakov <akurtako@redhat.com> 0.20.0-4
+- Organize patches.
+
+* Tue Apr 22 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-3
+- Add support for compact profiles (Bug 1090003).
+
+* Wed Apr 02 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-2
+- Non-bootstrap build.
+
+* Thu Mar 27 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-1.1
+- Update to Eclipse Luna (4.4).
+
+* Mon Mar 24 2014 Roland Grunberg <rgrunber@redhat.com> - 0.20.0-1
+- Update to 0.20.0 Release.
+
+* Wed Mar 12 2014 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-11
+- Respect %%{eclipse_bootstrap} flag in tycho-bootstrap.sh.
+- Update Eclipse bootstrap cache.
+- Fix Equinox Launcher usage logic in copy-platform-all.
+
+* Thu Mar 06 2014 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-10
+- Non-bootstrap build.
+
+* Thu Mar 06 2014 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-9.1
+- Do not check %%{_libdir}/eclipse plugins/features folders twice.
+
+* Wed Feb 26 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.19.0-9
+- Improve logging and error handling fop copy-platform-all
+
+* Wed Jan 15 2014 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-8
+- Perform a pure bootstrap build.
+- Fix issues with bootstrap build.
+
+* Thu Jan 09 2014 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-7
+- Fix bootstrap build.
+
+* Mon Jan  6 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.19.0-6
+- Fix usage of %%add_maven_depmap for zip files
+- Resolves: rhbz#1004310
+
+* Mon Dec 9 2013 Alexander Kurtakov <akurtako@redhat.com> 0.19.0-5
+- Switch to using %%mvn_build.
+- Update BR/R names.
+- Adapt to asm5.
+
+* Thu Nov 21 2013 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-4
+- Return expected reactor cache location when XMvn resolution fails.
+
+* Wed Nov 20 2013 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-3
+- Bump release for rebuild (Bug 1031769).
+
+* Mon Nov 18 2013 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-2
+- Reduce length of file lock name when file is in build directory.
+
+* Thu Oct 24 2013 Roland Grunberg <rgrunber@redhat.com> - 0.19.0-1
+- Update to 0.19.0 Release.
+
+* Fri Oct 04 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.1-7
+- Do not use XMvn internals (Bug 1015038).
+
+* Thu Oct 3 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.18.1-6
+- Adjust to latest Xmvn (workaround for 1015038).
+
+* Mon Sep  9 2013 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.18.1-5
+- Add workaround for rhbz#1004310
+
+* Tue Jul 30 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.1-4
+- Improve artifact resolution using XMvn Resolver. (Bug 986900)
+
+* Mon Jul 29 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.1-3
+- Fix Tycho file locking to work in Fedora.
+- Skip validateConsistentTychoVersion by default. (Bug 987271)
+
+* Wed Jul 24 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.1-2
+- Non-bootstrap build.
+
+* Wed Jul 24 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.1-1.1
+- Update to use Eclipse Aether.
+- Use MavenSession and Plexus to determine state.
+- Fix bootstrap build.
+
+* Thu Jul 18 2013 Roland Grunberg <rgrunber@redhat.com> 0.18.1-1
+- Make changes to ensure intermediary build succeeds.
+- Remove %%Patch6 in favour of call to sed.
+
+* Thu Jul 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.18.1-1
+- Update to 0.18.1.
+
+* Tue Jul 16 2013 Roland Grunberg <rgrunber@redhat.com> - 0.18.0-5
+- Look for maven artifacts using XMvn Resolver.
+
+* Tue Jul 9 2013 Roland Grunberg <rgrunber@redhat.com> 0.18.0-4
+- Update to use maven-surefire 2.15 API.
+
+* Fri Jul 5 2013 Alexander Kurtakov <akurtako@redhat.com> 0.18.0-3
+- Use _jnidir too when building local p2 repo.
+
+* Thu Jun 6 2013 Mikolaj Izdebski <mizdebsk@redhat.com> - 0.18.0-2
+- Add Requires on plugins present in Maven super POM
+- Resolves: rhbz#971301
+
+* Tue May 28 2013 Roland Grunberg <rgrunber@redhat.com> 0.18.0-1
+- Update to 0.18.0 Release.
+
+* Thu Apr 11 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-1
+- Fix bootstrap build for potential future use.
+
+* Tue Apr 2 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-1
+- Update to 0.17.0 Release.
+
+* Mon Mar 18 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-0.11.git3351b1
+- Non-bootstrap build.
+
+* Mon Mar 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.10.git3351b1
+- Merge mizdebsk patch with existing custom resolver patch.
+
+* Mon Mar 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.9.git3351b1
+- Move the patch into better place.
+
+* Mon Mar 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.8.git3351b1
+- Non-bootstrap build.
+
+* Mon Mar 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.7.git3351b1
+- Commit the patch.
+
+* Mon Mar 18 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.6.git3351b1
+- Use plexus to instantiate workspace reader.
+
+* Sun Mar 17 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-0.5.git3351b1
+- Non-bootstrap build.
+
+* Fri Mar 15 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-0.4.git3351b1
+- Update bootstrapped build for 0.17.0-SNAPSHOT to work against 0.16.0.
+- Update to Plexus Compiler 2.2 API.
+
+* Thu Feb 28 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-0.3.git3351b1
+- Update to using Jetty 9 API.
+
+* Mon Feb 25 2013 Roland Grunberg <rgrunber@redhat.com> 0.17.0-0.2.git3351b1
+- Set the global default execution environment to JavaSE-1.6.
+- Patch clean-up.
+
+* Mon Feb 25 2013 Krzysztof Daniel <kdaniel@redhat.com> 0.17.0-0.1.git3351b1
+- Update to latest upstream.
+- RHBZ#915194 - API changed in maven-surefire
+
+* Wed Feb 6 2013 Roland Grunberg <rgrunber@redhat.com> 0.16.0-21
+- Non-bootstrap build.
+
+* Wed Feb 06 2013 Java SIG <java-devel@lists.fedoraproject.org> - 0.16.0-20.2
+- Update for https://fedoraproject.org/wiki/Fedora_19_Maven_Rebuild
+- Replace maven BuildRequires with maven-local
+
+* Wed Feb 6 2013 Roland Grunberg <rgrunber@redhat.com> 0.16.0-20.1
+- Change BR/R on maven to maven-local for XMvn support.
+- Build bootstrapped to fix missing Fedora Maven class.
+
+* Thu Jan 24 2013 Roland Grunberg <rgrunber@redhat.com> 0.16.0-20
+- Use TYCHO_MVN_{LOCAL,RPMBUILD} to determine how maven was called.
+- Update to maven-surefire 2.13.
+
+* Thu Dec 20 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-19
+- Fix upstream Bug 361204.
+
+* Mon Dec 3 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-18
+- Add support for more flexible OSGi bundle paths.
+- Use OSGi Requires instead of package name.
+- Expand Requires to include the Eclipse platform.
+
+* Mon Nov 19 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-17
+- Make additional changes to get Tycho building bootstrapped.
+
+* Mon Nov 5 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-16
+- Add capability to build without depending on Tycho or Eclipse.
+
+* Sat Oct 20 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-15
+- Package org.eclipse.osgi and org.eclipse.jdt.core.
+
+* Fri Oct 19 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-14
+- Update to finalized 0.16.0 Release.
+
+* Wed Oct 17 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-13
+- Build Tycho properly in one RPM build.
+- Update to 0.16.0 Release.
+
+* Thu Oct 11 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-12.d7f885
+- Non-bootstrap build.
+
+* Thu Oct 11 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-11.1.d7f885
+- Remove dependence on eclipse by use of self-bundled equinox launcher.
+
+* Wed Oct 10 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-11.d7f885
+- copy-platform-all should make symlinked jars from %%{_javadir} unique.
+- Non-bootstrap build (reset the %%bootstrap flag properly).
+
+* Mon Oct 8 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-10.d7f885
+- Non-bootstrap build.
+
+* Mon Oct 8 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-9.1.d7f885
+- Filter out OSGi dependencies.
+
+* Thu Oct 4 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-9.d7f885
+- Non-bootstrap build.
+
+* Thu Oct 4 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-8.1.d7f885
+- Fix Bug in overriding of BREE to JavaSE-1.6.
+
+* Wed Oct 3 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-8.d7f885
+- Non-bootstrap build.
+
+* Wed Oct 3 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-7.1.d7f885
+- Update to latest 0.16.0 SNAPSHOT.
+- First attempts to build without cyclic dependency to JDT.
+
+* Mon Aug 27 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-7.df2c35
+- Non bootstrap-build.
+
+* Mon Aug 27 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-6.1.df2c35
+- Add BR/R on explicit dependency objectweb-asm4.
+- Use consistent whitespace in specfile.
+
+* Fri Aug 24 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-6.df2c35
+- Non-bootstrap build.
+
+* Thu Aug 23 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-5.1.df2c35
+- Set BREE to at least JavaSE-1.6 for all eclipse packaging types.
+- Remove unneeded workaround for JSR14 incompatibility of JDK 1.7.
+
+* Wed Aug 15 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-5.df2c35
+- Non-bootstrap build.
+
+* Mon Aug 13 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-4.1.df2c35
+- Correctly reference objectweb-asm4 and fix local mode resolution bug.
+- Update spec file to honour new java packaging guidelines.
+
+* Thu Aug 9 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-4.df2c35
+- Non-bootstrap build.
+
+* Thu Aug 9 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-3.1.df2c35
+- Add tycho.local.keepTarget flag to bypass ignoring environments.
+
+* Thu Aug 9 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-3.df2c35
+- Non-bootstrap build.
+
+* Thu Aug 9 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-2.1.df2c35
+- Use recommended %%add_maven_depmap. 
+
+* Thu Aug 9 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-2.df2c35
+- Non-bootstrap build.
+
+* Thu Aug 9 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-1.2.df2c35
+- Properly change bootstrap flag.
+- Add some git ignores.
+
+* Thu Aug 9 2012 Krzysztof Daniel <kdaniel@redhat.com> 0.16.0-1.1.df2c35
+- Install missing tycho-standalone-p2-director.zip.
+
+* Thu Aug 2 2012 Roland Grunberg <rgrunber@redhat.com> 0.16.0-1.df2c35
+- Update to 0.16.0 SNAPSHOT.
+
+* Tue Jul 31 2012 Roland Grunberg <rgrunber@redhat.com> 0.15.0-3
+- Non-bootstrap build.
+
+* Tue Jul 31 2012 Roland Grunberg <rgrunber@redhat.com> 0.15.0-2.1
+- Ignore defined environments in local mode.
+
+* Mon Jul 30 2012 Roland Grunberg <rgrunber@redhat.com> 0.15.0-2
+- Non-bootstrap build.
+
+* Mon Jul 30 2012 Roland Grunberg <rgrunber@redhat.com> 0.15.0-1.1
+- Fix copy-platform-all script to properly link %%{_datadir}/eclipse jars.
+
+* Thu Jul 26 2012 Roland Grunberg <rgrunber@redhat.com> 0.15.0-1
+- Update to 0.15.0.
+- Set BREE to at least JavaSE-1.6 for Eclipse feature bundles.
+
+* Wed Jul 25 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-7
+- Non-bootstrap build.
+
+* Mon Jul 23 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-6
+- Detect OSGi jars using presence of Bundle-SymbolicName entry (BZ #838513).
+
+* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.14.1-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Mon Jun 11 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-5
+- Non-bootstrap build.
+
+* Tue May 29 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-4.1
+- Fix Tycho Surfire to run Eclipse test bundles.
+- Implement automatic creation of a system p2 repository.
+- Allow building SWT fragments (BZ #380934).
+
+* Wed May 23 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-4
+- Non-bootstrap build.
+
+* Thu May 17 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-3.1
+- Set BREE to be at least JavaSE-1.6 for Eclipse OSGi bundles.
+
+* Wed May 16 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-3
+- Non-bootstrap build.
+
+* Wed Apr 25 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-2.1
+- Implement a custom resolver when running in local mode.
+- Use upstream solution for BZ #372395 to fix the build.
+
+* Wed Apr 4 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-2
+- Non-bootstrap build.
+
+* Tue Mar 27 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-1.1
+- Add missing tycho-testing-harness to be packaged.
+- Use %%{_eclipse_base} from eclipse-platform.
+
+* Fri Mar 9 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.1-1
+- Update to 0.14.1 upstream tag.
+- Allow building against maven-surefire 2.12 (instead of 2.10).
+- Stop symlinking o.e.osgi and o.e.jdt.core into the m2 cache.
+
+* Thu Feb 16 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.0-4
+- Non-bootstrap build.
+
+* Tue Feb 14 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.0-3
+- Update to 0.14.0 upstream tag.
+
+* Thu Feb 9 2012 Roland Grunberg <rgrunber@redhat.com> 0.14.0-2
+- Non-bootstrap build.
+
+* Wed Feb 01 2012 Roland Grunberg <rgrunber@redhat.com> - 0.14.0-1
+- Update to 0.14.0.
+
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.10.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Fri May 27 2011 Stanislav Ochotnicky <sochotnicky@redhat.com> - 0.12.0-0.1.a74b1717
+- Update to new version do bootstrap from scratch
+
+* Fri May 6 2011 Alexander Kurtakov <akurtako@redhat.com> 0.10.0-3
+- Non-bootstrap build.
+
+* Tue May  3 2011 Stanislav Ochotnicky <sochotnicky@redhat.com> - 0.10.0-2
+- Add README and make build more silent
+
+* Tue Mar 29 2011 Stanislav Ochotnicky <sochotnicky@redhat.com> - 0.10.0-1
+- First bootstrapped version