From 82c540d9b3a8b3713e63c6abc6a1446509d7e3c0 Mon Sep 17 00:00:00 2001 From: Mat Booth Date: Feb 19 2019 16:09:18 +0000 Subject: Update to latest upstream release Allow conditionally building Junit5 support --- diff --git a/0001-Fix-the-Tycho-build-to-work-on-Fedora.patch b/0001-Fix-the-Tycho-build-to-work-on-Fedora.patch new file mode 100644 index 0000000..2ff8a53 --- /dev/null +++ b/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 +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 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/0001-Port-to-latest-versio-of-Mockito.patch b/0001-Port-to-latest-versio-of-Mockito.patch new file mode 100644 index 0000000..bf1e610 --- /dev/null +++ b/0001-Port-to-latest-versio-of-Mockito.patch @@ -0,0 +1,99 @@ +From 0789e7cc9320f25a5e7ffa5dd3f378333fb69462 Mon Sep 17 00:00:00 2001 +From: Mat Booth +Date: Tue, 19 Feb 2019 11:11:10 +0000 +Subject: [PATCH] Port to latest versio of Mockito + +Change-Id: Ie0f6189cc66a8f13d952fa6e9d5c7bf1d39535b5 +--- + pom.xml | 2 +- + .../RepositoryArtifactProviderTest.java | 4 ++-- + tycho-bundles/pom.xml | 6 ------ + .../tycho-bundles-target.target | 21 +++++++------------ + 4 files changed, 11 insertions(+), 22 deletions(-) + +diff --git a/pom.xml b/pom.xml +index 3e096edb..14484785 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -244,7 +244,7 @@ + + org.mockito + mockito-core +- 1.8.4 ++ 2.23.0 + test + + +diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java +index bd897e22..fc5231ba 100644 +--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java ++++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java +@@ -26,8 +26,8 @@ import static org.hamcrest.CoreMatchers.containsString; + import static org.hamcrest.CoreMatchers.hasItem; + import static org.hamcrest.CoreMatchers.is; + import static org.junit.Assert.assertThat; +-import static org.mockito.Matchers.any; +-import static org.mockito.Matchers.argThat; ++import static org.mockito.ArgumentMatchers.any; ++import static org.mockito.hamcrest.MockitoHamcrest.argThat; + import static org.mockito.Mockito.mock; + import static org.mockito.Mockito.when; + +diff --git a/tycho-bundles/pom.xml b/tycho-bundles/pom.xml +index 52c34471..d6dbc14b 100644 +--- a/tycho-bundles/pom.xml ++++ b/tycho-bundles/pom.xml +@@ -81,12 +81,6 @@ + org.eclipse.osgi.compatibility.state + 0.0.0 + +- +- +- eclipse-plugin +- org.hamcrest +- 0.0.0 +- + + + +diff --git a/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target b/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target +index b3e58eaf..33956d88 100644 +--- a/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target ++++ b/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target +@@ -1,5 +1,5 @@ + +- ++ + + + +@@ -19,19 +19,14 @@ + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ + + + +-- +2.20.1 + diff --git a/0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch b/0002-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch new file mode 100644 index 0000000..fc1cc2b --- /dev/null +++ b/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 +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 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 fedoraRepos = new HashSet (); ++ ++ // 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 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 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 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 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 @@ + + + ++ ++ ++ + + + +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 "); + } + + String configuredDefaultProfile = tpConfiguration.getExecutionEnvironmentDefault(); + if (configuredDefaultProfile != null) { ++ configuredDefaultProfile = overrideToAtLeastJavaSE16(configuredDefaultProfile); + sink.setProfileConfiguration(configuredDefaultProfile, + "target-platform-configuration "); + } + } + ++ 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 @@ + junit + test + ++ ++ org.fedoraproject.p2 ++ org.fedoraproject.p2 ++ 0.0.1-SNAPSHOT ++ + + + +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/0003-Tycho-should-always-delegate-artifact-resolution-to-.patch b/0003-Tycho-should-always-delegate-artifact-resolution-to-.patch new file mode 100644 index 0000000..87b88ad --- /dev/null +++ b/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 +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 { + +- 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/0004-Bug-537963-Make-the-default-EE-Java-1.8.patch b/0004-Bug-537963-Make-the-default-EE-Java-1.8.patch new file mode 100644 index 0000000..1db821f --- /dev/null +++ b/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 +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 +--- + .../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 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 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 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 @@ + pom-hard + buildproperties + pom-default ++ tycho-default + + + +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 @@ ++ ++ 4.0.0 ++ ++ ++ executionenvironment ++ parent ++ 1.0.0 ++ ++ ++ executionenvironment.tycho-default ++ 1.0.0 ++ eclipse-plugin ++ ++ +-- +2.20.1 + diff --git a/0005-Bug-543850-Update-artifactcomparator-asm-dep-to-7.0.patch b/0005-Bug-543850-Update-artifactcomparator-asm-dep-to-7.0.patch new file mode 100644 index 0000000..cb0254e --- /dev/null +++ b/0005-Bug-543850-Update-artifactcomparator-asm-dep-to-7.0.patch @@ -0,0 +1,85 @@ +From fa0bff4ef49b117959beb96186d639954a3c0181 Mon Sep 17 00:00:00 2001 +From: Alexander Kurtakov +Date: Fri, 25 Jan 2019 21:32:55 +0200 +Subject: [PATCH 5/6] Bug 543850 - Update artifactcomparator asm dep to 7.0 + +Update the asm version to 7.0 and switch to using Opcodes.ASM7 API in +ClassReader. + +Change-Id: I957f79413e49424a9f82de99d541d75b3f2f99be +Signed-off-by: Alexander Kurtakov +--- + tycho-artifactcomparator/pom.xml | 12 ++++++++++-- + .../zipcomparator/internal/ClassfileComparator.java | 12 +++--------- + 2 files changed, 13 insertions(+), 11 deletions(-) + +diff --git a/tycho-artifactcomparator/pom.xml b/tycho-artifactcomparator/pom.xml +index f2c3c43..4831be1 100644 +--- a/tycho-artifactcomparator/pom.xml ++++ b/tycho-artifactcomparator/pom.xml +@@ -19,13 +19,21 @@ + 1.3.0 + + tycho-artifactcomparator ++ ++ 7.0 ++ + + + + + org.ow2.asm +- asm-debug-all +- 5.0.3 ++ asm-tree ++ ${asm-version} ++ ++ ++ org.ow2.asm ++ asm-util ++ ${asm-version} + + + org.codehaus.plexus +diff --git a/tycho-artifactcomparator/src/main/java/org/eclipse/tycho/zipcomparator/internal/ClassfileComparator.java b/tycho-artifactcomparator/src/main/java/org/eclipse/tycho/zipcomparator/internal/ClassfileComparator.java +index c69bd2c..52ba2dc 100644 +--- a/tycho-artifactcomparator/src/main/java/org/eclipse/tycho/zipcomparator/internal/ClassfileComparator.java ++++ b/tycho-artifactcomparator/src/main/java/org/eclipse/tycho/zipcomparator/internal/ClassfileComparator.java +@@ -1,5 +1,5 @@ + /******************************************************************************* +- * Copyright (c) 2012 Sonatype Inc. and others. ++ * Copyright (c) 2012, 2019 Sonatype Inc. 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 +@@ -17,7 +17,6 @@ import java.io.StringWriter; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.Collections; +-import java.util.Comparator; + import java.util.List; + + import org.apache.maven.plugin.MojoExecution; +@@ -63,17 +62,12 @@ public class ClassfileComparator implements ContentsComparator { + private String disassemble(byte[] bytes) { + ClassReader reader = new ClassReader(bytes); + ClassNode clazz = new ClassNode(); +- reader.accept(clazz, Opcodes.ASM5 | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); ++ reader.accept(clazz, Opcodes.ASM7 | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + + // inner class list gets reordered during pack200 normalization + if (clazz.innerClasses != null) { + List sorted = new ArrayList<>(clazz.innerClasses); +- Collections.sort(sorted, new Comparator() { +- @Override +- public int compare(InnerClassNode o1, InnerClassNode o2) { +- return o1.name.compareTo(o2.name); +- } +- }); ++ Collections.sort(sorted, (o1, o2) -> o1.name.compareTo(o2.name)); + clazz.innerClasses = sorted; + } + +-- +2.20.1 + diff --git a/0006-Port-to-latest-versio-of-Mockito.patch b/0006-Port-to-latest-versio-of-Mockito.patch new file mode 100644 index 0000000..26060e9 --- /dev/null +++ b/0006-Port-to-latest-versio-of-Mockito.patch @@ -0,0 +1,99 @@ +From c130487d9900e198564b0559da28937616c06208 Mon Sep 17 00:00:00 2001 +From: Mat Booth +Date: Tue, 19 Feb 2019 11:11:10 +0000 +Subject: [PATCH 6/6] Port to latest versio of Mockito + +Change-Id: Ie0f6189cc66a8f13d952fa6e9d5c7bf1d39535b5 +--- + pom.xml | 2 +- + .../RepositoryArtifactProviderTest.java | 4 ++-- + tycho-bundles/pom.xml | 6 ------ + .../tycho-bundles-target.target | 21 +++++++------------ + 4 files changed, 11 insertions(+), 22 deletions(-) + +diff --git a/pom.xml b/pom.xml +index 2b34d93..5ddc9eb 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -244,7 +244,7 @@ + + org.mockito + mockito-core +- 1.8.4 ++ 2.23.0 + test + + +diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java +index bd897e2..fc5231b 100644 +--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java ++++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java +@@ -26,8 +26,8 @@ import static org.hamcrest.CoreMatchers.containsString; + import static org.hamcrest.CoreMatchers.hasItem; + import static org.hamcrest.CoreMatchers.is; + import static org.junit.Assert.assertThat; +-import static org.mockito.Matchers.any; +-import static org.mockito.Matchers.argThat; ++import static org.mockito.ArgumentMatchers.any; ++import static org.mockito.hamcrest.MockitoHamcrest.argThat; + import static org.mockito.Mockito.mock; + import static org.mockito.Mockito.when; + +diff --git a/tycho-bundles/pom.xml b/tycho-bundles/pom.xml +index abc0795..5c45e60 100644 +--- a/tycho-bundles/pom.xml ++++ b/tycho-bundles/pom.xml +@@ -81,12 +81,6 @@ + org.eclipse.osgi.compatibility.state + 0.0.0 + +- +- +- eclipse-plugin +- org.hamcrest +- 0.0.0 +- + + + +diff --git a/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target b/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target +index b3e58ea..33956d8 100644 +--- a/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target ++++ b/tycho-bundles/tycho-bundles-target/tycho-bundles-target.target +@@ -1,5 +1,5 @@ + +- ++ + + + +@@ -19,19 +19,14 @@ + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ + + + +-- +2.20.1 + diff --git a/build-against-surefire-2.21.patch b/build-against-surefire-2.21.patch deleted file mode 100644 index 13cdc08..0000000 --- a/build-against-surefire-2.21.patch +++ /dev/null @@ -1,176 +0,0 @@ -From d4d161e7ccfb21503e906229a37000eb9a821284 Mon Sep 17 00:00:00 2001 -From: Jan Sievers -Date: Tue, 4 Sep 2012 16:02:52 +0200 -Subject: [PATCH] Resolve all necessary dependencies for Tycho Surefire. - -When running an Eclipse bundle's tests, Tycho Surefire resolves its -runtime dependencies using a class loader, which is in fact just looking -through Bundle-ClassPath. As a result, it must copy over and include -system jars in its Bundle-ClassPath. We use Fedora system jars to -satisfy these dependencies but even these jars differ slightly in terms -of provided classes. This patch addresses this issue. - -Basically, the jars added to the Bundle-ClassPath in this patch, provide -the additional classes that are in the original jars used upstream. - -Change-Id: I9ef0239eed887fa47c380efcdce968934c788c9f ---- - pom.xml | 2 +- - .../META-INF/MANIFEST.MF | 5 ++-- - .../org.eclipse.tycho.surefire.junit/pom.xml | 5 ++++ - .../META-INF/MANIFEST.MF | 5 +++- - .../org.eclipse.tycho.surefire.junit4/pom.xml | 10 ++++++++ - .../META-INF/MANIFEST.MF | 8 ++++--- - .../org.eclipse.tycho.surefire.junit47/pom.xml | 10 ++++++++ - .../META-INF/MANIFEST.MF | 7 +++--- - .../org.eclipse.tycho.surefire.osgibooter/pom.xml | 5 ++++ - .../surefire/osgibooter/OsgiSurefireBooter.java | 20 ++++++++++------ - tycho-surefire/pom.xml | 2 +- - .../java/org/eclipse/tycho/surefire/TestMojo.java | 27 +++++++++++++++++++--- - 12 files changed, 85 insertions(+), 21 deletions(-) - -diff --git a/pom.xml b/pom.xml -index c43cc8d..6e5fde4 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -88,7 +88,7 @@ - 3.3 - 3.0 - -- 2.19.1 -+ 2.21.0 - - - 3.13.0.v20180226-1711 -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.junit/pom.xml -index f99c319..0224cc6 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.junit/pom.xml -+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit/pom.xml -@@ -36,6 +36,11 @@ - surefire-junit3 - ${surefire-version} - -+ -+ org.apache.maven.surefire -+ common-junit3 -+ ${surefire-version} -+ - - - -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit4/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.junit4/pom.xml -index 9628b06..2a09e91 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.junit4/pom.xml -+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit4/pom.xml -@@ -36,6 +36,16 @@ - surefire-junit4 - ${surefire-version} - -+ -+ org.apache.maven.surefire -+ common-junit3 -+ ${surefire-version} -+ -+ -+ org.apache.maven.surefire -+ common-junit4 -+ ${surefire-version} -+ - - - -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit47/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.junit47/pom.xml -index dc49a46..db453ac 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.junit47/pom.xml -+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit47/pom.xml -@@ -46,6 +46,16 @@ - surefire-grouper - ${surefire-version} - -+ -+ org.apache.maven.surefire -+ common-junit4 -+ ${surefire-version} -+ -+ -+ org.apache.maven.surefire -+ common-junit3 -+ ${surefire-version} -+ - - - -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF -index 991edc1..83732d5 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF -+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF -@@ -5,9 +5,11 @@ Require-Bundle: org.eclipse.osgi;bundle-version="3.2.2", - Eclipse-AutoStart: true - Bundle-Version: 1.2.0 - Bundle-ClassPath: ., -- jars/surefire-booter-2.19.1.jar, -- jars/surefire-api-2.19.1.jar, -- jars/maven-surefire-common-2.19.1.jar -+ jars/surefire-booter-2.21.0.jar, -+ jars/surefire-api-2.21.0.jar, -+ jars/surefire-logger-api-2.21.0.jar, -+ jars/maven-surefire-common-2.21.0.jar, -+ jars/maven-shared-utils-3.2.1.jar - Bundle-Name: Tycho Surefire OSGi Booter Eclipse Application - Bundle-ManifestVersion: 2 - Bundle-SymbolicName: org.eclipse.tycho.surefire.osgibooter;singleton:=true -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml -index 82700eb..3fbc3a3 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml -+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml -@@ -59,6 +59,11 @@ - - - org.apache.maven.surefire -+ surefire-logger-api -+ ${surefire-version} -+ -+ -+ org.apache.maven.surefire - surefire-booter - ${surefire-version} - -@@ -67,6 +72,11 @@ - maven-surefire-common - ${surefire-version} - -+ -+ org.apache.maven.shared -+ maven-shared-utils -+ 3.2.1 -+ - - - -diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java -index 033766c4..fe8105b9 100644 ---- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java -+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java -@@ -28,6 +28,7 @@ import java.util.Properties; - import java.util.Set; - - import org.apache.maven.plugin.surefire.StartupReportConfiguration; -+import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger; - import org.apache.maven.plugin.surefire.report.DefaultReporterFactory; - import org.apache.maven.surefire.booter.BooterConstants; - import org.apache.maven.surefire.booter.ClassLoaderConfiguration; -@@ -97,11 +98,11 @@ public class OsgiSurefireBooter { - ProviderConfiguration providerConfiguration = new ProviderConfiguration(dirScannerParams, - new RunOrderParameters(runOrder, null), failIfNoTests, reporterConfig, null, testRequest, - extractProviderProperties(testProps), null, false, Collections. emptyList(), -- skipAfterFailureCount, Shutdown.DEFAULT); -+ skipAfterFailureCount, Shutdown.DEFAULT, 0); - StartupReportConfiguration startupReportConfig = new StartupReportConfiguration(useFile, printSummary, - StartupReportConfiguration.PLAIN_REPORT_FORMAT, redirectTestOutputToFile, disableXmlReport, reportsDir, -- trimStacktrace, null, "TESTHASH", false, rerunFailingTestsCount); -- ReporterFactory reporterFactory = new DefaultReporterFactory(startupReportConfig); -+ trimStacktrace, null, new File(reportsDir, "TESTHASH"), false, rerunFailingTestsCount, null); -+ ReporterFactory reporterFactory = new DefaultReporterFactory(startupReportConfig, new NullConsoleLogger()); - // API indicates we should use testClassLoader below but surefire also tries - // to load surefire classes using this classloader - RunResult result = ProviderFactory.invokeProvider(null, createCombinedClassLoader(testPlugin), reporterFactory, diff --git a/build-against-surefire-2.22.patch b/build-against-surefire-2.22.patch deleted file mode 100644 index f64cea2..0000000 --- a/build-against-surefire-2.22.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java.orig 2018-07-25 15:02:39.484574315 +0100 -+++ tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java 2018-07-25 15:04:38.494188050 +0100 -@@ -101,7 +101,7 @@ - skipAfterFailureCount, Shutdown.DEFAULT, 0); - StartupReportConfiguration startupReportConfig = new StartupReportConfiguration(useFile, printSummary, - StartupReportConfiguration.PLAIN_REPORT_FORMAT, redirectTestOutputToFile, disableXmlReport, reportsDir, -- trimStacktrace, null, new File(reportsDir, "TESTHASH"), false, rerunFailingTestsCount, null); -+ trimStacktrace, null, new File(reportsDir, "TESTHASH"), false, rerunFailingTestsCount, null, null); - ReporterFactory reporterFactory = new DefaultReporterFactory(startupReportConfig, new NullConsoleLogger()); - // API indicates we should use testClassLoader below but surefire also tries - // to load surefire classes using this classloader diff --git a/sources b/sources index fb3a361..9438463 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (fedoraproject-p2-290f67a4c717599b2f5166ea89aa5365571314b1.tar.gz) = 5ddfa3e7c1dc3d64335d836d74d7325904f294e0ab1782de41a8815b09ddf42f0c47a263c3a6217626aaf293a17788d01174c327e17b192a0f451d07d5655c49 -SHA512 (org.eclipse.tycho-tycho-1.2.0.tar.xz) = 1d08e3c7865ed7c4fc9097146fb8f4aaca39e5a82d1bc9f830a1c8d1661339de2e652195c9aad273738c3a221c19255acfa0533e910ce2e4cf2a85d880d7f51e +SHA512 (org.eclipse.tycho-tycho-1.3.0.tar.xz) = 8f4f9ed89b87f5a486285e64c6a6e8906c7a01a82666d8483ba0a136ec6fc49fcb85a7748ed425bf8d7cfad722b25472dd02b770122575268e2addba5b80e7f2 SHA512 (eclipse-bootstrap-photon.tar.xz) = c18687eecd7d79bbd0722e8effc89d32a8fe31f2c9fe978cc73cfe9679d5a7fd01d8e12483404e3257d86817b7a12b4dcdfbd88316855a06d8f43da71a3c49a8 diff --git a/tycho-fix-build.patch b/tycho-fix-build.patch deleted file mode 100644 index 60c72ab..0000000 --- a/tycho-fix-build.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 33bb1bece17d1b6f6e81b149828fa1287aa61093 Mon Sep 17 00:00:00 2001 -From: Roland Grunberg -Date: Tue, 12 Jun 2012 09:56:38 -0400 -Subject: [PATCH] Fix the Tycho build to work on Fedora. - -Minor fixes of limited scope needed to have Tycho building on Fedora. - -Change-Id: Ic8c0514c1fa10ee53580d2654ac6a363ccd66814 ---- -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 b00c344..bc05c2d 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 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 097bdeb..f90b10c 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 -@@ -115,12 +115,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; diff --git a/tycho-maven-archiver-3.0.1.patch b/tycho-maven-archiver-3.0.1.patch deleted file mode 100644 index cc8972b..0000000 --- a/tycho-maven-archiver-3.0.1.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./tycho-source-plugin/src/main/java/org/eclipse/tycho/source/AbstractSourceJarMojo.java.orig 2016-04-14 17:18:54.033371257 +0100 -+++ ./tycho-source-plugin/src/main/java/org/eclipse/tycho/source/AbstractSourceJarMojo.java 2016-04-14 17:22:02.121228491 +0100 -@@ -259,7 +259,7 @@ - getLog().warn("ignoring unsupported archive forced = false parameter."); - archive.setForced(true); - } -- archiver.createArchive(project, archive); -+ archiver.createArchive(null, project, archive); - } catch (IOException e) { - throw new MojoExecutionException("Error creating source archive: " + e.getMessage(), e); - } catch (ArchiverException e) { diff --git a/tycho-maven-delegation.patch b/tycho-maven-delegation.patch deleted file mode 100644 index fee9ed7..0000000 --- a/tycho-maven-delegation.patch +++ /dev/null @@ -1,687 +0,0 @@ -From 824f4a6c2db4f229e43de0c217d00a0c2c5b723d Mon Sep 17 00:00:00 2001 -From: Roland Grunberg -Date: Wed, 18 Jun 2014 13:01:31 -0400 -Subject: [PATCH] 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 + - .../eclipse/tycho/core/shared/MavenContext.java | 2 + - .../tycho/core/shared/MavenContextImpl.java | 10 ++++- - .../tycho/core/shared/MavenRepositorySystem.java | 19 +++++++++ - .../local/LocalArtifactRepositoryP2APITest.java | 4 +- - .../local/LocalMetadataRepositoryTest.java | 3 +- - .../repository/local/LocalArtifactRepository.java | 8 ++-- - .../local/LocalArtifactRepositoryFactory.java | 3 +- - .../local/index/LocalRepositoryP2IndicesImpl.java | 7 ++++ - .../p2/remote/RemoteAgentMavenMirrorsTest.java | 3 +- - .../RemoteAgentMetadataRepositoryCacheTest.java | 5 ++- - .../target/TargetPlatformBundlePublisherTest.java | 3 +- - .../tycho/p2/target/TestResolverFactory.java | 5 ++- - .../tycho/p2/resolver/P2ResolverFactoryImpl.java | 8 ++-- - .../p2/target/PomDependencyCollectorImpl.java | 2 +- - .../p2/target/TargetPlatformBundlePublisher.java | 13 ++++-- - .../p2/repository/LocalRepositoryP2Indices.java | 4 ++ - .../tycho/p2/repository/LocalRepositoryReader.java | 49 +++++----------------- - .../testutil/TemporaryLocalMavenRepository.java | 4 +- - .../tycho/test/util/MavenRepositorySystemStub.java | 30 +++++++++++++ - .../adapters/MavenRepositorySystemAdapter.java | 37 ++++++++++++++++ - .../configuration/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 9658fbc..efd0a2c 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 -@@ -7,3 +7,4 @@ Fragment-Host: org.eclipse.tycho.core.shared - 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 7b39d58..a15354f 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 bedc5cb..7df3d17 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 9b6d270..8779841 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 -@@ -32,6 +32,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.Test; - - public class LocalMetadataRepositoryTest extends BaseMavenRepositoryTest { -@@ -48,7 +49,7 @@ public class LocalMetadataRepositoryTest extends BaseMavenRepositoryTest { - - protected IMetadataRepository loadRepository(File location) throws ProvisionException { - return new LocalMetadataRepository(location.toURI(), createMetadataIndex(location), new LocalRepositoryReader( -- location)); -+ 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 36946bf..0e2d330 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 { - -- 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 b5c8c55..8842af3 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 f7cc92c..7bc8a95 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); - } - --- -1.9.3 - diff --git a/tycho-scripts.sh b/tycho-scripts.sh index bccd339..25ed6af 100755 --- a/tycho-scripts.sh +++ b/tycho-scripts.sh @@ -4,11 +4,11 @@ function minibuild () { basedir=$1 -src=`cat "${basedir}/build.properties" | grep 'source..' | cut -d'=' -f2 | tr ' ' '\0'` -output=`cat "${basedir}/build.properties" | grep 'output..' | cut -d'=' -f2 | tr ' ' '\0'` -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>/ d' | grep "" | sed 's/.*\(.*\)<\/artifactId>.*/\1/'` -version=`cat "${basedir}/pom.xml" | grep "" | sed 's/.*\(.*\)<\/version>.*/\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>/ d' | grep "" | sed 's/.*\(.*\)<\/artifactId>.*/\1/') +version=$(cat "${basedir}/pom.xml" | grep "" | sed 's/.*\(.*\)<\/version>.*/\1/') # External (System) dependencies if [ $# -eq 3 ]; then @@ -26,7 +26,7 @@ if [ $# -gt 1 ]; then cp='-classpath '$2':'"${basedir}"'/target/externalDeps/*' fi -javac -d "${basedir}/${output}" \ +javac -d "${basedir}/${output}" -encoding utf8 \ $(for file in `find "${basedir}/${src}" -name "*.java"`; \ do echo -n "${file} "; \ done;) \ diff --git a/tycho-use-custom-resolver.patch b/tycho-use-custom-resolver.patch deleted file mode 100644 index c0c615b..0000000 --- a/tycho-use-custom-resolver.patch +++ /dev/null @@ -1,648 +0,0 @@ -From 33e4d975ad449411522cf13e01c92992c8516dc6 Mon Sep 17 00:00:00 2001 -From: Roland Grunberg -Date: Tue, 12 Jun 2012 10:38:51 -0400 -Subject: [PATCH] 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 ---- - .../embedder/internal/DefaultEquinoxEmbedder.java | 11 +++++- - .../p2/remote/RemoteRepositoryCacheManager.java | 14 +++++++ - .../tycho/p2/target/TargetDefinitionResolver.java | 17 ++++++-- - .../p2/target/TargetPlatformBundlePublisher.java | 15 ++------ - .../tycho/p2/target/TargetPlatformFactoryImpl.java | 45 ++++++++++++++++++++-- - .../tycho/p2/repository/LocalRepositoryReader.java | 44 ++++++++++++++++++++- - .../facade/TargetPlatformConfigurationStub.java | 6 ++- - .../tycho-bundles-external.product | 1 + - .../eclipse/tycho/core/locking/FileLockerImpl.java | 26 ++++++++++--- - .../core/maven/TychoMavenLifecycleParticipant.java | 13 +++++++ - .../tycho/core/osgitools/AbstractTychoProject.java | 23 +++++++++++ - .../tycho/core/osgitools/OsgiBundleProject.java | 5 ++- - .../DefaultTargetPlatformConfigurationReader.java | 6 ++- - .../osgi/runtime/TychoOsgiRuntimeLocator.java | 27 ++++++++++--- - tycho-p2/tycho-p2-facade/pom.xml | 5 +++ - .../tycho/p2/resolver/P2DependencyResolver.java | 8 ++++ - 16 files changed, 228 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 ed01c2d..759f005 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 -@@ -239,7 +239,14 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled implements Equino - 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); -+ } - } - } - } -@@ -247,7 +254,7 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled implements Equino - } - - 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 1d3a029..2ec5c59 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 c614e15..d6ae1af 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 66a252f..0195871 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 41fb4c6..75b25ac 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 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 fedoraRepos = new HashSet (); -+ -+ // 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 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 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 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 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 8d36462..b5c8c55 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 @@ - } - - @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 22cca24..670f013 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 7c99168..28ad59f 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 @@ - - - -+ -+ -+ - - - -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 86253bd..cef15d2 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 1160f6c..acb2a1d 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 dfd4b6f..c05fcd8 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 "); - } - - String configuredDefaultProfile = tpConfiguration.getExecutionEnvironmentDefault(); - if (configuredDefaultProfile != null) { -+ configuredDefaultProfile = overrideToAtLeastJavaSE16(configuredDefaultProfile); - sink.setProfileConfiguration(configuredDefaultProfile, - "target-platform-configuration "); - } - } - -+ 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 fae4eb7..3f5289c 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 -@@ -502,6 +502,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 { -@@ -512,13 +513,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 6fa6b8e..e6d25be 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 c7d95df..ac5bae7 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 b567d50..34baa1a 100644 ---- a/tycho-p2/tycho-p2-facade/pom.xml -+++ b/tycho-p2/tycho-p2-facade/pom.xml -@@ -57,6 +57,11 @@ - junit - test - -+ -+ org.fedoraproject.p2 -+ org.fedoraproject.p2 -+ 0.0.1-SNAPSHOT -+ - - - -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 ae2dc38..a0c9969 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 -@@ -88,6 +88,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 { -@@ -208,6 +209,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.1.0 diff --git a/tycho.spec b/tycho.spec index 1e07848..a3db2ed 100644 --- a/tycho.spec +++ b/tycho.spec @@ -11,6 +11,9 @@ # 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 @@ -21,8 +24,8 @@ %define __requires_exclude osgi* Name: tycho -Version: 1.2.0 -Release: 8%{?dist} +Version: 1.3.0 +Release: 1%{?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 @@ -51,21 +54,16 @@ Source6: p2-install.sh Source10: eclipse-bootstrap-photon.tar.xz %endif -Patch0: tycho-fix-build.patch -# Submitted upstream: https://bugs.eclipse.org/bugs/show_bug.cgi?id=535564 -Patch1: tycho-maven-archiver-3.0.1.patch -Patch2: %{name}-use-custom-resolver.patch -Patch3: %{name}-maven-delegation.patch -# Changes needed for building against latest surefire -# Submitted upstream: https://bugs.eclipse.org/bugs/show_bug.cgi?id=537419 -%if 0%{?fedora} >= 28 -Patch4: build-against-surefire-2.21.patch -%endif -%if 0%{?fedora} >= 29 -Patch5: build-against-surefire-2.22.patch -%endif -#Submitted upstream: https://bugs.eclipse.org/bugs/show_bug.cgi?id=537963 -Patch6: use-java8-for-default-ee.patch +# 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 +# Merged upstream: https://git.eclipse.org/c/tycho/org.eclipse.tycho.git/commit/?id=a437fb8870761d733199392f25a8c0e4f34caae9 +Patch4: 0005-Bug-543850-Update-artifactcomparator-asm-dep-to-7.0.patch +# Port to latest version of Mockito 2.x +Patch5: 0006-Port-to-latest-versio-of-Mockito.patch BuildArch: noarch @@ -92,7 +90,6 @@ 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.apiguardian:apiguardian-api) BuildRequires: mvn(org.codehaus.plexus:plexus-archiver) BuildRequires: mvn(org.codehaus.plexus:plexus-compiler-api) BuildRequires: mvn(org.codehaus.plexus:plexus-compiler-manager) @@ -100,19 +97,22 @@ 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.tycho:org.eclipse.jdt.compiler.apt) -BuildRequires: mvn(org.eclipse.tycho:org.eclipse.jdt.core) +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.junit.platform:junit-platform-surefire-provider) BuildRequires: mvn(org.mockito:mockito-core) -BuildRequires: mvn(org.opentest4j:opentest4j) -BuildRequires: mvn(org.ow2.asm:asm-debug-all) +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 @@ -179,22 +179,28 @@ This package contains the API documentation for %{name}. mv fedoraproject-p2-%{fp_p2_git_tag} fedoraproject-p2 %patch0 -p1 -%patch1 +%patch1 -p1 %patch2 -p1 %patch3 -p1 -%if 0%{?fedora} >= 28 %patch4 -p1 +%if 0%{?rhel} || 0%{?fedora} >= 30 +%patch5 -p1 +%else +# Fixup mockito compatibility +sed -i -e 's/org\.hamcrest/org.hamcrest.core/' tycho-bundles/pom.xml +sed -i -e 's/org\.mockito/org.mockito.mockito-core/' \ + tycho-bundles/org.eclipse.tycho.p2.tools.tests/META-INF/MANIFEST.MF \ + tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/META-INF/MANIFEST.MF \ + tycho-bundles/org.eclipse.tycho.p2.resolver.shared.tests/META-INF/MANIFEST.MF %endif -%if 0%{?fedora} >= 29 -%patch5 -%endif -%patch6 -p1 # Unneeded for RPM builds %pom_remove_plugin :maven-site-plugin -# Switch for "tycho" platform deps -%pom_change_dep org.eclipse.jdt: org.eclipse.tycho: . tycho-compiler-jdt +%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' @@ -221,26 +227,16 @@ for mod in tycho-bundles/org.eclipse.tycho.{p2.{maven.repository.tests,resolver. $mod/META-INF/MANIFEST.MF done -# Use proper ASM deps -%pom_remove_dep org.ow2.asm:asm-debug-all tycho-artifactcomparator -%pom_add_dep org.ow2.asm:asm:7.0 tycho-artifactcomparator -%pom_add_dep org.ow2.asm:asm-util:7.0 tycho-artifactcomparator - -# Fixup mockito compatibility -sed -i -e 's/org\.hamcrest/org.hamcrest.core/' tycho-bundles/pom.xml -%if 0%{?fedora} >= 30 -sed -i -e '/import static org.mockito.Matchers.any/s/Matchers/ArgumentMatchers/' -e '/import static org.mockito.Matchers.arg/s/mockito.Matchers/mockito.hamcrest.MockitoHamcrest/' \ - tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/p2base/artifact/repository/RepositoryArtifactProviderTest.java -%else -sed -i -e 's/org\.mockito/org.mockito.mockito-core/' \ - tycho-bundles/org.eclipse.tycho.p2.tools.tests/META-INF/MANIFEST.MF \ - tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/META-INF/MANIFEST.MF \ - tycho-bundles/org.eclipse.tycho.p2.resolver.shared.tests/META-INF/MANIFEST.MF -%endif +# Use tycho-testing-harness from the reactor +sed -i -e '/tycho-testing-harness/a${project.version}' tycho-surefire/tycho-surefire-plugin/pom.xml # 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 + # Don't build tests when bootstrapping 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 @@ -410,6 +406,10 @@ ln -s %{_javadir}/tycho/org.fedoraproject.p2.jar %{buildroot}${xmvn_libdir}/inst %files javadoc -f .mfiles-javadoc %changelog +* Mon Feb 18 2019 Mat Booth - 1.3.0-1 +- Update to latest upstream release +- Allow conditionally building Junit5 support + * Sun Feb 03 2019 Fedora Release Engineering - 1.2.0-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild diff --git a/use-java8-for-default-ee.patch b/use-java8-for-default-ee.patch deleted file mode 100644 index 5c32c74..0000000 --- a/use-java8-for-default-ee.patch +++ /dev/null @@ -1,167 +0,0 @@ -From d113fc877033b24305584d0157a79b7a54be4188 Mon Sep 17 00:00:00 2001 -From: Mat Booth -Date: Wed, 15 Aug 2018 15:58:10 +0100 -Subject: [PATCH] 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 ---- - -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 @@ - 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 @@ - List 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.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 @@ - - @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 @@ - properties.put("tycho-version", TychoVersion.getTychoVersion()); - - List 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 @@ - properties.put("tycho-version", TychoVersion.getTychoVersion()); - - List 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 @@ - - 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 @@ - pom-hard - buildproperties - pom-default -+ tycho-default - - - -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 @@ -+ -+ 4.0.0 -+ -+ -+ executionenvironment -+ parent -+ 1.0.0 -+ -+ -+ executionenvironment.tycho-default -+ 1.0.0 -+ eclipse-plugin -+ -+