From 2f38f43123a764a1ffb16299c3bb6b8194ce5afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 20 Jul 2021 12:48:13 +0200 Subject: [PATCH 1/5] Fix #194 Support additional repositories defined in the maven-target location MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christoph Läubrich --- RELEASE_NOTES.md | 8 ++- .../MavenArtifactRepositoryReference.java | 21 +++++++ .../shared/MavenDependenciesResolver.java | 12 +++- .../MavenTargetDefinitionContent.java | 2 +- .../p2/target/facade/TargetDefinition.java | 5 ++ .../tycho/core/ee/TargetDefinitionFile.java | 57 ++++++++++++++----- .../MavenDependenciesResolverConfigurer.java | 15 ++++- tycho-its/projects/target.mavenRepos/pom.xml | 49 ++++++++++++++++ .../test.bundle/META-INF/MANIFEST.MF | 9 +++ .../test.bundle/build.properties | 4 ++ .../target.mavenRepos/test.bundle/pom.xml | 20 +++++++ .../test.feature/build.properties | 1 + .../test.feature/feature.xml | 40 +++++++++++++ .../target.mavenRepos/test.feature/pom.xml | 20 +++++++ .../projects/target.mavenRepos/test.target | 21 +++++++ .../target/TargetPlatformLocationsTest.java | 7 +++ 16 files changed, 268 insertions(+), 23 deletions(-) create mode 100644 tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenArtifactRepositoryReference.java create mode 100644 tycho-its/projects/target.mavenRepos/pom.xml create mode 100644 tycho-its/projects/target.mavenRepos/test.bundle/META-INF/MANIFEST.MF create mode 100644 tycho-its/projects/target.mavenRepos/test.bundle/build.properties create mode 100644 tycho-its/projects/target.mavenRepos/test.bundle/pom.xml create mode 100644 tycho-its/projects/target.mavenRepos/test.feature/build.properties create mode 100644 tycho-its/projects/target.mavenRepos/test.feature/feature.xml create mode 100644 tycho-its/projects/target.mavenRepos/test.feature/pom.xml create mode 100644 tycho-its/projects/target.mavenRepos/test.target diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index c34492b082..ac3b2acca2 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -2,12 +2,16 @@ This page describes the noteworthy improvements provided by each release of Eclipse Tycho. -### Next release... +## Next release... + +### Support for new m2e-pde features + +Tycho supports the new m2e-pde features regarding [multiple dependencies per target](https://github.com/eclipse-m2e/m2e-core/blob/master/RELEASE_NOTES.md#the-m2e-pde-editor-now-supports-adding-more-than-one-dependency-per-target-location) and specifying [extra repositories in the target](https://github.com/eclipse-m2e/m2e-core/blob/master/RELEASE_NOTES.md#the-m2e-pde-editor-now-supports-adding-additional-maven-repoistories-for-a-target-location). ## 2.4.0 ### [Support resolving of JUnit Classpath Container](https://bugs.eclipse.org/bugs/show_bug.cgi?id=572602) -It is now possible to resolve the JDT 'JUnit Classpath Container', for this do the follwoing: +It is now possible to resolve the JDT 'JUnit Classpath Container', for this do the following: - add the 'JUnit Classpath Container' to the classpath of your eclipse project - make sure you check in the .classpath file diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenArtifactRepositoryReference.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenArtifactRepositoryReference.java new file mode 100644 index 0000000000..1ddf83b897 --- /dev/null +++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenArtifactRepositoryReference.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich - initial API and implementation + *******************************************************************************/ +package org.eclipse.tycho.core.shared; + +public interface MavenArtifactRepositoryReference { + + String getId(); + + String getUrl(); + +} diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenDependenciesResolver.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenDependenciesResolver.java index 7daa134622..255b16eaba 100644 --- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenDependenciesResolver.java +++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenDependenciesResolver.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Christoph Läubrich and others. + * Copyright (c) 2020, 2021 Christoph Läubrich and others. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -14,6 +14,7 @@ import java.io.File; import java.util.Collection; +import java.util.Collections; public interface MavenDependenciesResolver { @@ -35,8 +36,15 @@ public interface MavenDependenciesResolver { * the given artifact as well * @return */ + default Collection resolve(String groupId, String artifactId, String version, + String packaging, String classifier, String dependencyScope) { + return resolve(groupId, artifactId, version, packaging, classifier, dependencyScope, Collections.emptyList()); + } + Collection resolve(String groupId, String artifactId, String version, String packaging, - String classifier, String dependencyScope); + String classifier, String dependencyScope, + Collection additionalRepositories); File getRepositoryRoot(); + } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java index 41f6d71b6d..89e3b30719 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java @@ -89,7 +89,7 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies Collection resolve = mavenDependenciesResolver.resolve(mavenDependency.getGroupId(), mavenDependency.getArtifactId(), mavenDependency.getVersion(), mavenDependency.getArtifactType(), mavenDependency.getClassifier(), - location.getIncludeDependencyScope()); + location.getIncludeDependencyScope(), location.getRepositoryReferences()); Iterator resolvedArtifacts = resolve.stream().filter(IArtifactFacade.class::isInstance) .map(IArtifactFacade.class::cast).iterator(); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java index e9d8ce4516..953b4ba97c 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java @@ -13,6 +13,7 @@ * [Bug 568729] - Support new "Maven" Target location * [Bug 569481] - Support for maven target location includeSource="true" attribute * [Issue 189] - Support multiple maven-dependencies for one target location + * [Issue 194] - Support additional repositories defined in the maven-target location # *******************************************************************************/ package org.eclipse.tycho.p2.target.facade; @@ -21,6 +22,8 @@ import java.util.List; import java.util.Properties; +import org.eclipse.tycho.core.shared.MavenArtifactRepositoryReference; + // TODO javadoc public interface TargetDefinition { @@ -85,6 +88,8 @@ enum MissingManifestStrategy { Collection getRoots(); + Collection getRepositoryReferences(); + boolean includeSource(); } diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java index 71ff3c62ce..d2b73d1d98 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java @@ -13,6 +13,7 @@ * - [Bug 568729] - Support new "Maven" Target location * - [Bug 569481] - Support for maven target location includeSource="true" attribute * - [Issue 189] - Support multiple maven-dependencies for one target location + * - [Issue 194] - Support additional repositories defined in the maven-target location # *******************************************************************************/ package org.eclipse.tycho.core.ee; @@ -39,6 +40,7 @@ import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; +import org.eclipse.tycho.core.shared.MavenArtifactRepositoryReference; import org.eclipse.tycho.p2.target.facade.TargetDefinition; import org.eclipse.tycho.p2.target.facade.TargetDefinitionSyntaxException; @@ -222,6 +224,31 @@ public Collection getRoots() { return Collections.singleton(new MavenDependencyRoot(dom)); } + @Override + public Collection getRepositoryReferences() { + for (Element dependencies : dom.getChildren("repositories")) { + List list = new ArrayList(); + for (Element repository : dependencies.getChildren("repository")) { + list.add(new MavenArtifactRepositoryReference() { + + @Override + public String getId() { + return getTextFromChild(repository, "id", + String.valueOf(System.identityHashCode(repository))); + } + + @Override + public String getUrl() { + return getTextFromChild(repository, "url", null); + } + + }); + } + return list; + } + return Collections.emptyList(); + } + } private static final class MavenDependencyRoot implements MavenDependency { @@ -234,37 +261,27 @@ public MavenDependencyRoot(Element dom) { @Override public String getGroupId() { - return getTextFromChild("groupId", null); + return getTextFromChild(dom, "groupId", null); } @Override public String getArtifactId() { - return getTextFromChild("artifactId", null); + return getTextFromChild(dom, "artifactId", null); } @Override public String getVersion() { - return getTextFromChild("version", null); + return getTextFromChild(dom, "version", null); } @Override public String getArtifactType() { - return getTextFromChild("type", "jar"); + return getTextFromChild(dom, "type", "jar"); } @Override public String getClassifier() { - return getTextFromChild("classifier", ""); - } - - private String getTextFromChild(String childName, String defaultValue) { - for (Element element : dom.getChildren(childName)) { - return element.getNormalizedText(); - } - if (defaultValue != null) { - return defaultValue; - } - throw new TargetDefinitionSyntaxException("Missing child element '" + childName + "'"); + return getTextFromChild(dom, "classifier", ""); } @Override @@ -284,6 +301,16 @@ public String toString() { } + private static String getTextFromChild(Element dom, String childName, String defaultValue) { + for (Element element : dom.getChildren(childName)) { + return element.getNormalizedText(); + } + if (defaultValue != null) { + return defaultValue; + } + throw new TargetDefinitionSyntaxException("Missing child element '" + childName + "'"); + } + public class IULocation implements TargetDefinition.InstallableUnitLocation { private final Element dom; diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java index d186ff9ec4..9c94779605 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Christoph Läubrich and others. + * Copyright (c) 2020, 2021 Christoph Läubrich and others. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -15,9 +15,11 @@ import java.io.File; import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.Set; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.execution.MavenSession; @@ -29,6 +31,7 @@ import org.eclipse.sisu.equinox.embedder.EmbeddedEquinox; import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener; import org.eclipse.tycho.core.maven.MavenArtifactFacade; +import org.eclipse.tycho.core.shared.MavenArtifactRepositoryReference; import org.eclipse.tycho.core.shared.MavenDependenciesResolver; import org.eclipse.tycho.p2.metadata.IArtifactFacade; @@ -46,7 +49,7 @@ public class MavenDependenciesResolverConfigurer extends EquinoxLifecycleListene @Override public Collection resolve(String groupId, String artifactId, String version, String packaging, String classifier, - String dependencyScope) { + String dependencyScope, Collection additionalRepositories) { Artifact artifact; if (classifier != null && !classifier.isEmpty()) { artifact = repositorySystem.createArtifactWithClassifier(groupId, artifactId, version, packaging, @@ -61,7 +64,13 @@ public Collection resolve(String groupId, String artifactId, String version, request.setOffline(session.isOffline()); request.setLocalRepository(session.getLocalRepository()); request.setResolveTransitively(dependencyScope != null && !dependencyScope.isEmpty()); - request.setRemoteRepositories(session.getCurrentProject().getRemoteArtifactRepositories()); + List repositories = new ArrayList<>( + session.getCurrentProject().getRemoteArtifactRepositories()); + for (MavenArtifactRepositoryReference reference : additionalRepositories) { + repositories.add( + repositorySystem.createArtifactRepository(reference.getId(), reference.getUrl(), null, null, null)); + } + request.setRemoteRepositories(repositories); ArtifactResolutionResult result = repositorySystem.resolve(request); Set artifacts = result.getArtifacts(); ArrayList list = new ArrayList(); diff --git a/tycho-its/projects/target.mavenRepos/pom.xml b/tycho-its/projects/target.mavenRepos/pom.xml new file mode 100644 index 0000000000..8f1657e18e --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/pom.xml @@ -0,0 +1,49 @@ + + + + + 4.0.0 + + org.eclipse.tycho.itests + issue-194-parent + 0.0.1-SNAPSHOT + pom + + + 2.5.0-SNAPSHOT + + + + test.bundle + test.feature + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + org.eclipse.tycho + target-platform-configuration + ${tycho-version} + + + ../test.target + + + + + + + + + diff --git a/tycho-its/projects/target.mavenRepos/test.bundle/META-INF/MANIFEST.MF b/tycho-its/projects/target.mavenRepos/test.bundle/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..e0f7e8f355 --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.bundle/META-INF/MANIFEST.MF @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Bundle +Bundle-SymbolicName: test.bundle +Bundle-Version: 0.0.1.qualifier +Require-Bundle: wrapped.edu.ucar.cdm;bundle-version="5.0.0", + wrapped.edu.ucar.udunits;bundle-version="5.0.0" +Automatic-Module-Name: test.bundle +Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/tycho-its/projects/target.mavenRepos/test.bundle/build.properties b/tycho-its/projects/target.mavenRepos/test.bundle/build.properties new file mode 100644 index 0000000000..34d2e4d2da --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.bundle/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/tycho-its/projects/target.mavenRepos/test.bundle/pom.xml b/tycho-its/projects/target.mavenRepos/test.bundle/pom.xml new file mode 100644 index 0000000000..ecedb9b48c --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.bundle/pom.xml @@ -0,0 +1,20 @@ + + + + 4.0.0 + + test.bundle + eclipse-plugin + + + org.eclipse.tycho.itests + issue-194-parent + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/tycho-its/projects/target.mavenRepos/test.feature/build.properties b/tycho-its/projects/target.mavenRepos/test.feature/build.properties new file mode 100644 index 0000000000..64f93a9f0b --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.feature/build.properties @@ -0,0 +1 @@ +bin.includes = feature.xml diff --git a/tycho-its/projects/target.mavenRepos/test.feature/feature.xml b/tycho-its/projects/target.mavenRepos/test.feature/feature.xml new file mode 100644 index 0000000000..9d6824d75b --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.feature/feature.xml @@ -0,0 +1,40 @@ + + + + + [Enter Feature Description here.] + + + + [Enter Copyright Description here.] + + + + [Enter License Description here.] + + + + + + + + + diff --git a/tycho-its/projects/target.mavenRepos/test.feature/pom.xml b/tycho-its/projects/target.mavenRepos/test.feature/pom.xml new file mode 100644 index 0000000000..fa2631fe31 --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.feature/pom.xml @@ -0,0 +1,20 @@ + + + + 4.0.0 + + test.feature + eclipse-feature + + + org.eclipse.tycho.itests + issue-194-parent + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/tycho-its/projects/target.mavenRepos/test.target b/tycho-its/projects/target.mavenRepos/test.target new file mode 100644 index 0000000000..04fac73348 --- /dev/null +++ b/tycho-its/projects/target.mavenRepos/test.target @@ -0,0 +1,21 @@ + + + + + + + + edu.ucar + cdm + 5.0.0 + + + + + unidata-all + https://artifacts.unidata.ucar.edu/repository/unidata-all/ + + + + + \ No newline at end of file diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/target/TargetPlatformLocationsTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/target/TargetPlatformLocationsTest.java index 2ea69c1ce7..465c805fde 100644 --- a/tycho-its/src/test/java/org/eclipse/tycho/test/target/TargetPlatformLocationsTest.java +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/target/TargetPlatformLocationsTest.java @@ -32,6 +32,13 @@ public void testMavenLocationMulti() throws Exception { verifier.verifyErrorFreeLog(); } + @Test + public void testMavenLocationRepositories() throws Exception { + Verifier verifier = getVerifier("target.mavenRepos", false, true); + verifier.executeGoal("verify"); + verifier.verifyErrorFreeLog(); + } + public void testDirectoryLocation() throws Exception { Verifier verifier = getVerifier("target.directory", false, true); verifier.executeGoal("verify"); From 2e2b7d69123d64c89ceae71ab9835472a531b6b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 20 Jul 2021 15:31:08 +0200 Subject: [PATCH 2/5] Add debug code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christoph Läubrich --- .../resolver/MavenTargetDefinitionContent.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java index 89e3b30719..f20753a87a 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java @@ -103,6 +103,22 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies File bundleLocation = mavenArtifact.getLocation(); BundleDescription bundleDescription = BundlesAction.createBundleDescription(bundleLocation); if (bundleDescription == null) { + if (logger.isDebugEnabled()) { + logger.debug("Bundle Location: " + bundleLocation); + boolean exits = bundleLocation != null && bundleLocation.isFile(); + logger.debug("File exits: " + exits); + if (exits) { + try (JarFile jarFile = new JarFile(bundleLocation)) { + Enumeration entries = jarFile.entries(); + while (entries.hasMoreElements()) { + JarEntry jarEntry = entries.nextElement(); + logger.debug(" Entry: " + jarEntry.getName()); + } + } catch (Exception e) { + logger.debug("Reading as jar failed: " + e); + } + } + } throw new TargetDefinitionResolutionException("Artifact " + mavenArtifact + " of location " + location + " is not a valid jar file"); } else { From ab809088690add53cfec4b5d54c0906cc6f28d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 20 Jul 2021 16:22:32 +0200 Subject: [PATCH 3/5] Some more debug output / delete file on error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christoph Läubrich --- .../tycho/p2/resolver/MavenTargetDefinitionContent.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java index f20753a87a..b1387f08df 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java @@ -104,7 +104,8 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies BundleDescription bundleDescription = BundlesAction.createBundleDescription(bundleLocation); if (bundleDescription == null) { if (logger.isDebugEnabled()) { - logger.debug("Bundle Location: " + bundleLocation); + logger.debug("Bundle Location: " + bundleLocation + " (Filesize " + + (bundleLocation != null ? bundleLocation.length() : -1) + ")"); boolean exits = bundleLocation != null && bundleLocation.isFile(); logger.debug("File exits: " + exits); if (exits) { @@ -118,6 +119,10 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies logger.debug("Reading as jar failed: " + e); } } + if (bundleLocation != null && bundleLocation.toString().contains(".m2/repository")) { + logger.debug("Delete file : " + bundleLocation); + bundleLocation.deleteOnExit(); + } } throw new TargetDefinitionResolutionException("Artifact " + mavenArtifact + " of location " + location + " is not a valid jar file"); From f03c19882a2bcf4170a43d54ffdd25b9b909ccc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 20 Jul 2021 19:24:21 +0200 Subject: [PATCH 4/5] Exclude http service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christoph Läubrich --- .../p2/resolver/MavenTargetDefinitionContent.java | 10 +++------- tycho-its/projects/target.mavenRepos/test.target | 8 +++++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java index b1387f08df..0fd9f83395 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java @@ -106,9 +106,9 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies if (logger.isDebugEnabled()) { logger.debug("Bundle Location: " + bundleLocation + " (Filesize " + (bundleLocation != null ? bundleLocation.length() : -1) + ")"); - boolean exits = bundleLocation != null && bundleLocation.isFile(); - logger.debug("File exits: " + exits); - if (exits) { + boolean isFile = bundleLocation != null && bundleLocation.isFile(); + logger.debug("File isFile: " + isFile); + if (isFile) { try (JarFile jarFile = new JarFile(bundleLocation)) { Enumeration entries = jarFile.entries(); while (entries.hasMoreElements()) { @@ -119,10 +119,6 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies logger.debug("Reading as jar failed: " + e); } } - if (bundleLocation != null && bundleLocation.toString().contains(".m2/repository")) { - logger.debug("Delete file : " + bundleLocation); - bundleLocation.deleteOnExit(); - } } throw new TargetDefinitionResolutionException("Artifact " + mavenArtifact + " of location " + location + " is not a valid jar file"); diff --git a/tycho-its/projects/target.mavenRepos/test.target b/tycho-its/projects/target.mavenRepos/test.target index 04fac73348..00dee217a2 100644 --- a/tycho-its/projects/target.mavenRepos/test.target +++ b/tycho-its/projects/target.mavenRepos/test.target @@ -5,9 +5,10 @@ - edu.ucar - cdm - 5.0.0 + edu.ucar + cdm + 5.0.0 + jar @@ -16,6 +17,7 @@ https://artifacts.unidata.ucar.edu/repository/unidata-all/ + edu.ucar:httpservices:5.0.0 \ No newline at end of file From 6d9e02ddd160ad3aba27f256c8801c83ef67c750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Wed, 21 Jul 2021 07:12:40 +0200 Subject: [PATCH 5/5] Support exclude element MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christoph Läubrich --- .../MavenTargetDefinitionContent.java | 4 +++ .../p2/target/facade/TargetDefinition.java | 3 ++ .../tycho/core/ee/TargetDefinitionFile.java | 35 +++++++++++++++++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java index 0fd9f83395..21726ef7ef 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/MavenTargetDefinitionContent.java @@ -96,6 +96,10 @@ public MavenTargetDefinitionContent(MavenGAVLocation location, MavenDependencies Properties defaultProperties = WrappedArtifact.createPropertiesForPrefix("wrapped"); while (resolvedArtifacts.hasNext()) { IArtifactFacade mavenArtifact = resolvedArtifacts.next(); + if (mavenDependency.isIgnored(mavenArtifact)) { + logger.debug("Skipp ignored " + mavenArtifact + "..."); + continue; + } logger.debug("Resolved " + mavenArtifact + "..."); String symbolicName; String bundleVersion; diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java index 953b4ba97c..b4ac2056ee 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetDefinition.java @@ -23,6 +23,7 @@ import java.util.Properties; import org.eclipse.tycho.core.shared.MavenArtifactRepositoryReference; +import org.eclipse.tycho.p2.metadata.IArtifactFacade; // TODO javadoc public interface TargetDefinition { @@ -184,6 +185,8 @@ public interface MavenDependency { String getArtifactType(); String getClassifier(); + + boolean isIgnored(IArtifactFacade artifact); } } diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java index d2b73d1d98..1f6541510a 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/ee/TargetDefinitionFile.java @@ -35,12 +35,15 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.tycho.core.shared.MavenArtifactRepositoryReference; +import org.eclipse.tycho.p2.metadata.IArtifactFacade; import org.eclipse.tycho.p2.target.facade.TargetDefinition; import org.eclipse.tycho.p2.target.facade.TargetDefinitionSyntaxException; @@ -137,8 +140,14 @@ public class MavenLocation implements TargetDefinition.MavenGAVLocation { private Element dom; + private Set globalExcludes = new HashSet<>(); + public MavenLocation(Element dom) { this.dom = dom; + List children = dom.getChildren("exclude"); + for (Element element : children) { + globalExcludes.add(element.getNormalizedText()); + } } @Override @@ -216,12 +225,12 @@ public Collection getRoots() { for (Element dependencies : dom.getChildren("dependencies")) { List roots = new ArrayList<>(); for (Element dependency : dependencies.getChildren("dependency")) { - roots.add(new MavenDependencyRoot(dependency)); + roots.add(new MavenDependencyRoot(dependency, this)); } return roots; } //backward compatibility for old format... - return Collections.singleton(new MavenDependencyRoot(dom)); + return Collections.singleton(new MavenDependencyRoot(dom, this)); } @Override @@ -254,9 +263,11 @@ public String getUrl() { private static final class MavenDependencyRoot implements MavenDependency { private Element dom; + private MavenLocation parent; - public MavenDependencyRoot(Element dom) { + public MavenDependencyRoot(Element dom, MavenLocation parent) { this.dom = dom; + this.parent = parent; } @Override @@ -299,6 +310,11 @@ public String toString() { return builder.toString(); } + @Override + public boolean isIgnored(IArtifactFacade artifact) { + return parent.globalExcludes.contains(getKey(artifact)); + } + } private static String getTextFromChild(Element dom, String childName, String defaultValue) { @@ -311,6 +327,19 @@ private static String getTextFromChild(Element dom, String childName, String def throw new TargetDefinitionSyntaxException("Missing child element '" + childName + "'"); } + private static String getKey(IArtifactFacade artifact) { + if (artifact == null) { + return ""; + } + String key = artifact.getGroupId() + ":" + artifact.getArtifactId(); + String classifier = artifact.getClassifier(); + if (classifier != null && !classifier.isBlank()) { + key += ":" + classifier; + } + key += ":" + artifact.getVersion(); + return key; + } + public class IULocation implements TargetDefinition.InstallableUnitLocation { private final Element dom;