diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesImpl.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesImpl.java index b22c4d321e..2133d724d9 100644 --- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesImpl.java +++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesImpl.java @@ -28,6 +28,8 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +import org.eclipse.tycho.BuildProperties; + public class BuildPropertiesImpl implements BuildProperties { private String javacSource; diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildProperties.java b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildProperties.java similarity index 98% rename from tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildProperties.java rename to tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildProperties.java index e4bef936eb..c3ba35add1 100644 --- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildProperties.java +++ b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildProperties.java @@ -12,7 +12,7 @@ * Christoph Läubrich - Bug 572481 - Tycho does not understand "additional.bundles" directive in build.properties *******************************************************************************/ -package org.eclipse.tycho.core.shared; +package org.eclipse.tycho; import java.util.Collection; import java.util.List; diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesParser.java b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildPropertiesParser.java similarity index 78% rename from tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesParser.java rename to tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildPropertiesParser.java index a436c7a804..c7e17b8cd0 100644 --- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/BuildPropertiesParser.java +++ b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/BuildPropertiesParser.java @@ -11,7 +11,7 @@ * SAP AG - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.core.shared; +package org.eclipse.tycho; import java.io.File; @@ -19,9 +19,13 @@ public interface BuildPropertiesParser { public static final String BUILD_PROPERTIES = "build.properties"; + default BuildProperties parse(ReactorProject project) { + return parse(project.getBasedir(), project.getInterpolator()); + } + /** * Parse the file "build.properties" in baseDir. If the file does not exist or cannot be read, * an "empty" {@link BuildProperties} will be returned. */ - public BuildProperties parse(File baseDir); + BuildProperties parse(File baseDir, Interpolator interpolator); } diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/Interpolator.java b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/Interpolator.java similarity index 93% rename from tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/Interpolator.java rename to tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/Interpolator.java index 0082038e32..5a33685000 100644 --- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/Interpolator.java +++ b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/Interpolator.java @@ -10,7 +10,7 @@ * Contributors: * SAP SE - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.core.shared; +package org.eclipse.tycho; public interface Interpolator { diff --git a/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/ReactorProject.java b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/ReactorProject.java index 9ea17b5024..13497ab30e 100644 --- a/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/ReactorProject.java +++ b/tycho-bundles/org.eclipse.tycho.embedder.shared/src/main/java/org/eclipse/tycho/ReactorProject.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2020 Sonatype Inc. and others. + * Copyright (c) 2008, 2022 Sonatype Inc. 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 @@ -9,17 +9,21 @@ * * Contributors: * Sonatype Inc. - initial API and implementation - * Christoph Läubrich - add getName() / combine directories + * Christoph Läubrich - add getName() / combine directories / getter for Interpolator *******************************************************************************/ package org.eclipse.tycho; import java.io.File; +import java.util.Objects; /** * A Tycho project in the reactor. */ public interface ReactorProject extends IDependencyMetadata { + static final String CTX_INTERPOLATOR = "tycho.project.interpolator"; + static final String CTX_BUILDPROPERTIESPARSER = "tycho.project.buildpropertiesparser"; + /** * Conventional sources jar Maven artifact classifier. */ @@ -66,6 +70,23 @@ public interface ReactorProject extends IDependencyMetadata { public String getExpandedVersion(); // misc + /** + * + * @return the Interpolator for this project that could be used to resolve maven variable + * references + */ + default Interpolator getInterpolator() { + return Objects.requireNonNull((Interpolator) getContextValue(CTX_INTERPOLATOR), + "No Interpolator found, has the TychoMavenLifecycleParticipant not run?"); + } + + default BuildProperties getBuildProperties() { + BuildPropertiesParser parser = Objects.requireNonNull( + (BuildPropertiesParser) getContextValue(CTX_BUILDPROPERTIESPARSER), + "No BuildPropertiesParser found, has the TychoMavenLifecycleParticipant not run?"); + //we must always ask the parser here, it is expected that the parser caches the properties if the have not changed in the meanwhile + return parser.parse(this); + } /** * human-readable id used in error messages diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/publisher/repo/FeatureRootfileArtifactRepositoryTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/publisher/repo/FeatureRootfileArtifactRepositoryTest.java index 80e5620839..240c6c0a6a 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/publisher/repo/FeatureRootfileArtifactRepositoryTest.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/publisher/repo/FeatureRootfileArtifactRepositoryTest.java @@ -23,7 +23,7 @@ import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor; import org.eclipse.equinox.spi.p2.publisher.PublisherHelper; -import org.eclipse.tycho.core.shared.BuildProperties; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.core.shared.BuildPropertiesImpl; import org.eclipse.tycho.p2.impl.publisher.MavenPropertiesAdvice; import org.eclipse.tycho.p2.impl.publisher.rootfiles.FeatureRootAdvice; diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/OSGI-INF/generator.xml b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/OSGI-INF/generator.xml index c5c3e66df4..07627a6ca1 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/OSGI-INF/generator.xml +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/OSGI-INF/generator.xml @@ -5,7 +5,7 @@ - + @@ -13,7 +13,7 @@ - + @@ -21,6 +21,6 @@ - + diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/AbstractMetadataGenerator.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/AbstractMetadataGenerator.java index 18ee05c886..609337099d 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/AbstractMetadataGenerator.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/AbstractMetadataGenerator.java @@ -36,10 +36,11 @@ import org.eclipse.equinox.p2.publisher.PublisherResult; import org.eclipse.equinox.p2.publisher.actions.ICapabilityAdvice; import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; +import org.eclipse.tycho.BuildProperties; +import org.eclipse.tycho.BuildPropertiesParser; import org.eclipse.tycho.IDependencyMetadata.DependencyMetadataType; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.p2.impl.publisher.repo.TransientArtifactRepository; import org.eclipse.tycho.p2.metadata.IArtifactFacade; @@ -67,8 +68,9 @@ protected abstract List getPublisherActions(IArtifactFacade ar protected abstract List getPublisherAdvice(IArtifactFacade artifact, PublisherOptions options); - protected ICapabilityAdvice getExtraEntriesAdvice(IArtifactFacade artifact) { - final IRequirement[] extraRequirements = extractExtraEntriesAsIURequirement(artifact.getLocation()); + protected ICapabilityAdvice getExtraEntriesAdvice(IArtifactFacade artifact, Interpolator interpolator) { + final IRequirement[] extraRequirements = extractExtraEntriesAsIURequirement(artifact.getLocation(), + interpolator); return new ICapabilityAdvice() { @Override public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) { @@ -92,8 +94,8 @@ public IRequirement[] getMetaRequiredCapabilities(InstallableUnitDescription iu) }; } - private IRequirement[] extractExtraEntriesAsIURequirement(File location) { - BuildProperties buildProps = buildPropertiesParser.parse(location); + private IRequirement[] extractExtraEntriesAsIURequirement(File location, Interpolator interpolator) { + BuildProperties buildProps = buildPropertiesParser.parse(location, interpolator); ArrayList result = new ArrayList<>(); for (Entry> entry : buildProps.getJarToExtraClasspathMap().entrySet()) { createRequirementFromExtraClasspathProperty(result, entry.getValue()); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/P2GeneratorImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/P2GeneratorImpl.java index 6bf538dbd8..ae8d0dc695 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/P2GeneratorImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/P2GeneratorImpl.java @@ -43,6 +43,7 @@ import org.eclipse.equinox.p2.publisher.eclipse.ProductAction; import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.PackagingType; import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction; import org.eclipse.tycho.core.shared.TargetEnvironment; @@ -56,6 +57,7 @@ import org.eclipse.tycho.p2.metadata.IP2Artifact; import org.eclipse.tycho.p2.metadata.P2Generator; import org.eclipse.tycho.p2.metadata.PublisherOptions; +import org.eclipse.tycho.p2.metadata.ReactorProjectFacade; import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper; @SuppressWarnings("restriction") @@ -85,6 +87,7 @@ public Map generateMetadata(List artifacts Map result = new LinkedHashMap<>(); for (IArtifactFacade artifact : artifacts) { + PublisherInfo publisherInfo = new PublisherInfo(); DependencyMetadata metadata; @@ -355,10 +358,16 @@ private List getCategoryFiles(File projectLocation) { @Override protected List getPublisherAdvice(IArtifactFacade artifact, PublisherOptions options) { + Interpolator interpolator; + if (artifact instanceof ReactorProjectFacade) { + interpolator = ((ReactorProjectFacade) artifact).getReactorProject().getInterpolator(); + } else { + interpolator = null; + } ArrayList advice = new ArrayList<>(); advice.add(new MavenPropertiesAdvice(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getClassifier())); - advice.add(getExtraEntriesAdvice(artifact)); + advice.add(getExtraEntriesAdvice(artifact, interpolator)); if (options.generateDownloadStatsProperty) { advice.add(new DownloadStatsAdvice()); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/FeatureRootAdvice.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/FeatureRootAdvice.java index f24f9d61aa..76a4b485b6 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/FeatureRootAdvice.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/FeatureRootAdvice.java @@ -24,10 +24,12 @@ import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor; import org.eclipse.equinox.p2.metadata.Version; import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice; +import org.eclipse.tycho.BuildProperties; +import org.eclipse.tycho.BuildPropertiesParser; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.PackagingType; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.p2.metadata.IArtifactFacade; +import org.eclipse.tycho.p2.metadata.ReactorProjectFacade; /** * This class handles definitions of root files in build.properties according to @@ -55,11 +57,17 @@ public FeatureRootAdvice(BuildProperties buildProperties, File baseDir, String a */ public static IFeatureRootAdvice createRootFileAdvice(IArtifactFacade featureArtifact, BuildPropertiesParser buildPropertiesParser) { + Interpolator interpolator; + if (featureArtifact instanceof ReactorProjectFacade) { + interpolator = ((ReactorProjectFacade) featureArtifact).getReactorProject().getInterpolator(); + } else { + interpolator = null; + } File projectDir = getProjectBaseDir(featureArtifact); if (projectDir != null) { - FeatureRootAdvice result = new FeatureRootAdvice(buildPropertiesParser.parse(projectDir), projectDir, - featureArtifact.getArtifactId()); + FeatureRootAdvice result = new FeatureRootAdvice(buildPropertiesParser.parse(projectDir, interpolator), + projectDir, featureArtifact.getArtifactId()); if (result.hasRootFiles()) { return result; } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/RootPropertiesParser.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/RootPropertiesParser.java index 2f4ffea8e8..86a0a5048e 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/RootPropertiesParser.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/publisher/rootfiles/RootPropertiesParser.java @@ -21,7 +21,7 @@ import java.util.Map; import java.util.Map.Entry; -import org.eclipse.tycho.core.shared.BuildProperties; +import org.eclipse.tycho.BuildProperties; public class RootPropertiesParser { static class ParsingResult { diff --git a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/ExpandedProduct.java b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/ExpandedProduct.java index f7a47ed8e8..75d18dd1cf 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/ExpandedProduct.java +++ b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/ExpandedProduct.java @@ -29,7 +29,7 @@ import org.eclipse.equinox.p2.metadata.IVersionedId; import org.eclipse.equinox.p2.repository.IRepositoryReference; import org.eclipse.tycho.ArtifactType; -import org.eclipse.tycho.core.shared.Interpolator; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.core.shared.MavenLogger; import org.eclipse.tycho.core.shared.MultiLineLogger; import org.eclipse.tycho.core.shared.VersioningHelper; diff --git a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolImpl.java b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolImpl.java index 4b839edbd0..e77c25fb61 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolImpl.java @@ -33,9 +33,9 @@ import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.tycho.ArtifactKey; import org.eclipse.tycho.ArtifactType; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.core.resolver.shared.DependencySeed; import org.eclipse.tycho.core.shared.BuildFailureException; -import org.eclipse.tycho.core.shared.Interpolator; import org.eclipse.tycho.core.shared.MavenLogger; import org.eclipse.tycho.p2.target.ArtifactTypeHelper; import org.eclipse.tycho.p2.target.P2TargetPlatform; diff --git a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublisherServiceFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublisherServiceFactoryImpl.java index ff242e4b8f..af4ed41314 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublisherServiceFactoryImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.tools.impl/src/main/java/org/eclipse/tycho/p2/tools/publisher/PublisherServiceFactoryImpl.java @@ -14,8 +14,8 @@ import java.util.List; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.ReactorProject; -import org.eclipse.tycho.core.shared.Interpolator; import org.eclipse.tycho.core.shared.MavenContext; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.p2.target.P2TargetPlatform; diff --git a/tycho-bundles/org.eclipse.tycho.p2.tools.shared/src/main/java/org/eclipse/tycho/p2/tools/publisher/facade/PublisherServiceFactory.java b/tycho-bundles/org.eclipse.tycho.p2.tools.shared/src/main/java/org/eclipse/tycho/p2/tools/publisher/facade/PublisherServiceFactory.java index 6fd6d07bd4..e117ee6829 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.tools.shared/src/main/java/org/eclipse/tycho/p2/tools/publisher/facade/PublisherServiceFactory.java +++ b/tycho-bundles/org.eclipse.tycho.p2.tools.shared/src/main/java/org/eclipse/tycho/p2/tools/publisher/facade/PublisherServiceFactory.java @@ -14,8 +14,8 @@ import java.util.List; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.ReactorProject; -import org.eclipse.tycho.core.shared.Interpolator; import org.eclipse.tycho.core.shared.TargetEnvironment; public interface PublisherServiceFactory { diff --git a/tycho-bundles/org.eclipse.tycho.p2.tools.tests/src/test/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolTest.java b/tycho-bundles/org.eclipse.tycho.p2.tools.tests/src/test/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolTest.java index 1344f95548..0b0b1b70c5 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.tools.tests/src/test/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolTest.java +++ b/tycho-bundles/org.eclipse.tycho.p2.tools.tests/src/test/java/org/eclipse/tycho/p2/tools/publisher/PublishProductToolTest.java @@ -48,10 +48,10 @@ import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.query.QueryUtil; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.artifacts.DependencyResolutionException; import org.eclipse.tycho.core.resolver.shared.DependencySeed; import org.eclipse.tycho.core.shared.BuildFailureException; -import org.eclipse.tycho.core.shared.Interpolator; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.p2.target.FinalTargetPlatformImpl; import org.eclipse.tycho.p2.target.P2TargetPlatform; diff --git a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/BuildPropertiesParserForTesting.java b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/BuildPropertiesParserForTesting.java index 09c35dfc8b..2047a9afbe 100644 --- a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/BuildPropertiesParserForTesting.java +++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/BuildPropertiesParserForTesting.java @@ -19,14 +19,15 @@ import java.io.InputStream; import java.util.Properties; -import org.eclipse.tycho.core.shared.BuildProperties; +import org.eclipse.tycho.BuildProperties; +import org.eclipse.tycho.BuildPropertiesParser; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.core.shared.BuildPropertiesImpl; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; public class BuildPropertiesParserForTesting implements BuildPropertiesParser { @Override - public BuildProperties parse(File baseDir) { + public BuildProperties parse(File baseDir, Interpolator interpolator) { Properties props = new Properties(); readBuildProperties(baseDir, props); diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoInterpolator.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoInterpolator.java index a1dffef583..595894d701 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoInterpolator.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoInterpolator.java @@ -21,7 +21,7 @@ import org.codehaus.plexus.interpolation.SingleResponseValueSource; import org.codehaus.plexus.interpolation.StringSearchInterpolator; import org.codehaus.plexus.interpolation.ValueSource; -import org.eclipse.tycho.core.shared.Interpolator; +import org.eclipse.tycho.Interpolator; /** * Class thats interpolates string values like ${project.artifactId}. It is using the 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 525d8ec6d7..73f330ec35 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2020 Sonatype Inc. and others. + * Copyright (c) 2008, 2022 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 @@ -8,7 +8,8 @@ * Contributors: * Sonatype Inc. - initial API and implementation * Bachmann electronic GmbH - Bug 457314 - handle null as tycho version - * Christoph Läubrich - Bug 569829 - TychoMavenLifecycleParticipant should respect fail-at-end flag / error output is missing + * Christoph Läubrich - Bug 569829 - TychoMavenLifecycleParticipant should respect fail-at-end flag / error output is missing + * - Issue 557 - BuildPropertiesParser should use reactor project instead of basedir *******************************************************************************/ package org.eclipse.tycho.core.maven; @@ -42,6 +43,7 @@ import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable; import org.eclipse.sisu.equinox.EquinoxServiceFactory; +import org.eclipse.tycho.BuildPropertiesParser; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.artifacts.DependencyResolutionException; import org.eclipse.tycho.core.osgitools.BundleReader; @@ -74,6 +76,9 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic @Requirement private Logger log; + @Requirement + private BuildPropertiesParser buildPropertiesParser; + public TychoMavenLifecycleParticipant() { // needed for plexus } @@ -99,7 +104,11 @@ public void afterProjectsRead(MavenSession session) throws MavenExecutionExcepti configureComponents(session); for (MavenProject project : projects) { - resolver.setupProject(session, project, DefaultReactorProject.adapt(project)); + ReactorProject reactorProject = DefaultReactorProject.adapt(project); + reactorProject.setContextValue(ReactorProject.CTX_INTERPOLATOR, + new TychoInterpolator(session, project)); + reactorProject.setContextValue(ReactorProject.CTX_BUILDPROPERTIESPARSER, buildPropertiesParser); + resolver.setupProject(session, project, reactorProject); } resolveProjects(session, projects); diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImpl.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImpl.java index 78d3215196..35095b412a 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImpl.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImpl.java @@ -21,24 +21,22 @@ import java.util.Map.Entry; import java.util.Properties; -import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.LegacySupport; -import org.apache.maven.project.MavenProject; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable; -import org.eclipse.tycho.core.maven.TychoInterpolator; -import org.eclipse.tycho.core.shared.BuildProperties; +import org.eclipse.tycho.BuildProperties; +import org.eclipse.tycho.BuildPropertiesParser; +import org.eclipse.tycho.Interpolator; +import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.shared.BuildPropertiesImpl; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; -import org.eclipse.tycho.core.utils.MavenSessionUtils; @Component(role = BuildPropertiesParser.class) public class BuildPropertiesParserImpl implements BuildPropertiesParser, Disposable { - @Requirement - private LegacySupport legacySupport; +// @Requirement +// private LegacySupport legacySupport; @Requirement private Logger logger; @@ -55,19 +53,27 @@ public BuildPropertiesParserImpl() { * @param legacySupport */ protected BuildPropertiesParserImpl(LegacySupport legacySupport, Logger logger) { - this.legacySupport = legacySupport; +// this.legacySupport = legacySupport; this.logger = logger; } @Override + public BuildProperties parse(ReactorProject project) { + return parse(project.getBasedir(), project.getInterpolator()); + } + public BuildProperties parse(File baseDir) { + return parse(baseDir, null); + } + + public BuildProperties parse(File baseDir, Interpolator interpolator) { File propsFile = new File(baseDir, BUILD_PROPERTIES); long lastModified = propsFile.lastModified(); String filePath = propsFile.getAbsolutePath(); BuildPropertiesImpl buildProperties = cache.get(filePath); if (buildProperties == null || lastModified > buildProperties.getTimestamp()) { Properties properties = readProperties(propsFile); - interpolate(properties, baseDir); + interpolate(properties, interpolator); buildProperties = new BuildPropertiesImpl(properties, lastModified); cache.put(filePath, buildProperties); } @@ -100,25 +106,10 @@ protected static Properties readProperties(File propsFile) { return properties; } - protected void interpolate(Properties properties, File baseDir) { - if (properties.isEmpty()) { + protected void interpolate(Properties properties, Interpolator interpolator) { + if (properties.isEmpty() || interpolator == null) { return; } - MavenSession mavenSession = legacySupport.getSession(); - if (mavenSession == null) { - logger.warn("No maven session available, values in the build.properties will not be interpolated!"); - return; - } - // find the maven project for the currently used basedir, so that the correct maven project is used by the interpolator. - // if no project could be found, it does not make sense to interpolate the properties - MavenProject mavenProject = MavenSessionUtils.getMavenProject(mavenSession, baseDir); - if (mavenProject == null) { - logger.warn("No maven project found for baseDir '" + baseDir.getAbsolutePath() - + "', values in the build.properties will not be interpolated!"); - return; - } - TychoInterpolator interpolator = new TychoInterpolator(mavenSession, mavenProject); - for (Entry entry : properties.entrySet()) { entry.setValue(interpolator.interpolate((String) entry.getValue())); } diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/EquinoxResolver.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/EquinoxResolver.java index 8c00ddf28b..fc27ef581d 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/EquinoxResolver.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/EquinoxResolver.java @@ -62,7 +62,6 @@ import org.eclipse.tycho.core.ee.StandardExecutionEnvironment; import org.eclipse.tycho.core.ee.shared.ExecutionEnvironment; import org.eclipse.tycho.core.osgitools.targetplatform.MultiEnvironmentDependencyArtifacts; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.osgi.framework.Bundle; @@ -109,9 +108,6 @@ public class EquinoxResolver { @Requirement private BundleReader manifestReader; - @Requirement - private BuildPropertiesParser buildPropertiesParser; - @Requirement private Logger logger; @@ -355,8 +351,7 @@ public ScheduledExecutorService getScheduledExecutor() { } else { ReactorProject mavenProject = artifact.getMavenProject(); if (mavenProject != null) { - Collection additionalBundles = buildPropertiesParser.parse(mavenProject.getBasedir()) - .getAdditionalBundles(); + Collection additionalBundles = mavenProject.getBuildProperties().getAdditionalBundles(); if (additionalBundles.size() > 0) { List reqb = new ArrayList<>(); String value = mf.getValue(Constants.REQUIRE_BUNDLE); 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 b1b89bf3b0..b7b39a12a2 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 @@ -73,7 +73,6 @@ import org.eclipse.tycho.core.osgitools.project.EclipsePluginProject; import org.eclipse.tycho.core.osgitools.project.EclipsePluginProjectImpl; import org.eclipse.tycho.core.resolver.shared.PlatformPropertiesUtils; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.model.Feature; @@ -100,9 +99,6 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro @Requirement private BundleReader bundleReader; - @Requirement - private BuildPropertiesParser buildPropertiesParser; - @Requirement private ClasspathParser classpathParser; @@ -351,8 +347,7 @@ public EclipsePluginProjectImpl getEclipsePluginProject(ReactorProject otherProj .getContextValue(TychoConstants.CTX_ECLIPSE_PLUGIN_PROJECT); if (pdeProject == null) { try { - pdeProject = new EclipsePluginProjectImpl(otherProject, - buildPropertiesParser.parse(otherProject.getBasedir()), + pdeProject = new EclipsePluginProjectImpl(otherProject, otherProject.getBuildProperties(), classpathParser.parse(otherProject.getBasedir())); if (otherProject instanceof DefaultReactorProject) { populateProperties(((DefaultReactorProject) otherProject).project.getProperties(), pdeProject); diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProject.java index 442d8e4804..e65b1017a4 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProject.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProject.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.dotClasspath.ProjectClasspathEntry; -import org.eclipse.tycho.core.shared.BuildProperties; public interface EclipsePluginProject { diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProjectImpl.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProjectImpl.java index 67b4bcc43d..4f51778773 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProjectImpl.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/project/EclipsePluginProjectImpl.java @@ -22,9 +22,9 @@ import java.util.Map.Entry; import java.util.Set; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.dotClasspath.ProjectClasspathEntry; -import org.eclipse.tycho.core.shared.BuildProperties; public class EclipsePluginProjectImpl implements EclipsePluginProject { diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/BuildPropertiesParserConfigurator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/BuildPropertiesParserConfigurator.java index 20415c3158..d62f3456ef 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/BuildPropertiesParserConfigurator.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/BuildPropertiesParserConfigurator.java @@ -15,7 +15,7 @@ import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.sisu.equinox.embedder.EmbeddedEquinox; import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; +import org.eclipse.tycho.BuildPropertiesParser; @Component(role = EquinoxLifecycleListener.class, hint = "BuildPropertiesReaderConfigurator") public class BuildPropertiesParserConfigurator extends EquinoxLifecycleListener { diff --git a/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImplTest.java b/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImplTest.java index 8166ba1faa..aa1d42e3ce 100644 --- a/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImplTest.java +++ b/tycho-core/src/test/java/org/eclipse/tycho/core/osgitools/BuildPropertiesParserImplTest.java @@ -10,10 +10,7 @@ *******************************************************************************/ package org.eclipse.tycho.core.osgitools; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; @@ -69,14 +66,6 @@ public void testReadPropertiesWithNonExistingFile() { Assert.assertEquals(0, properties.size()); } - @Test - public void testInterpolateWithABaseDirThatsNotPartOfTheSessionsProjects() { - Properties props = new Properties(); - props.put("key", "value"); - parser.interpolate(props, new File("/bathToSomeProjectThatsNotPartOfTheSessionProjects")); - verify(logger, times(1)).warn(anyString()); - } - @Test public void testInterpolateWithEmptyProperties() { parser.interpolate(new Properties(), null); diff --git a/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java b/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java index 36f1eed7aa..25d6c7959a 100644 --- a/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java +++ b/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java @@ -45,12 +45,11 @@ import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.AbstractScanner; import org.eclipse.sisu.equinox.EquinoxServiceFactory; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.PackagingType; import org.eclipse.tycho.artifacts.TargetPlatform; import org.eclipse.tycho.core.osgitools.DebugUtils; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.model.Feature; import org.eclipse.tycho.model.FeatureRef; @@ -206,9 +205,6 @@ public class SourceFeatureMojo extends AbstractMojo { @Component private LicenseFeatureHelper licenseFeatureHelper; - @Component - private BuildPropertiesParser buildPropertiesParser; - @Component private EquinoxServiceFactory equinox; @@ -241,7 +237,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { archiver.getArchiver().addFileSet(templateFileSet); } - BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(project).getBuildProperties(); archiver.getArchiver().addFileSet(getManuallyIncludedFiles(project.getBasedir(), buildProperties)); archiver.getArchiver().addFile(sourceFeatureXml, Feature.FEATURE_XML); 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 6c5f366a8f..9c1a61838a 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 @@ -57,6 +57,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import org.eclipse.sisu.equinox.EquinoxServiceFactory; import org.eclipse.tycho.ArtifactKey; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.DefaultArtifactKey; import org.eclipse.tycho.IDependencyMetadata; import org.eclipse.tycho.IDependencyMetadata.DependencyMetadataType; @@ -85,8 +86,6 @@ import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction; import org.eclipse.tycho.core.resolver.shared.PomDependencies; import org.eclipse.tycho.core.shared.BuildFailureException; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.osgi.adapters.MavenLoggerAdapter; @@ -117,9 +116,6 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen @Requirement private RepositorySystem repositorySystem; - @Requirement - private BuildPropertiesParser buildPropertiesParser; - @Requirement private ProjectDependenciesResolver projectDependenciesResolver; @@ -416,7 +412,7 @@ private DependencyArtifacts doResolveDependencies(MavenSession session, MavenPro } } - BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(project).getBuildProperties(); Collection additionalBundles = buildProperties.getAdditionalBundles(); for (String additionalBundle : additionalBundles) { resolver.addAdditionalBundleDependency(additionalBundle); diff --git a/tycho-p2/tycho-p2-publisher-plugin/src/main/java/org/eclipse/tycho/plugins/p2/publisher/PublishProductMojo.java b/tycho-p2/tycho-p2-publisher-plugin/src/main/java/org/eclipse/tycho/plugins/p2/publisher/PublishProductMojo.java index 566c529333..fbe12dae3f 100644 --- a/tycho-p2/tycho-p2-publisher-plugin/src/main/java/org/eclipse/tycho/plugins/p2/publisher/PublishProductMojo.java +++ b/tycho-p2/tycho-p2-publisher-plugin/src/main/java/org/eclipse/tycho/plugins/p2/publisher/PublishProductMojo.java @@ -29,6 +29,7 @@ import org.codehaus.plexus.archiver.UnArchiver; import org.eclipse.tycho.ArtifactDescriptor; import org.eclipse.tycho.ArtifactType; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.PackagingType; import org.eclipse.tycho.artifacts.DependencyArtifacts; import org.eclipse.tycho.core.TychoProject; @@ -36,7 +37,6 @@ import org.eclipse.tycho.core.osgitools.EclipseRepositoryProject; import org.eclipse.tycho.core.resolver.shared.DependencySeed; import org.eclipse.tycho.core.resolver.shared.PlatformPropertiesUtils; -import org.eclipse.tycho.core.shared.Interpolator; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.locking.facade.FileLockService; diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/buildversion/BuildQualifierMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/buildversion/BuildQualifierMojo.java index 0d0f497f1b..d93173bc96 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/buildversion/BuildQualifierMojo.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/buildversion/BuildQualifierMojo.java @@ -31,7 +31,7 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; +import org.eclipse.tycho.core.osgitools.DefaultReactorProject; import org.eclipse.tycho.core.shared.VersioningHelper; import org.osgi.framework.Version; @@ -121,9 +121,6 @@ public class BuildQualifierMojo extends AbstractVersionMojo { @Parameter(property = "mojoExecution", readonly = true) protected MojoExecution execution; - @Component - protected BuildPropertiesParser buildPropertiesParser; - @Component(role = BuildTimestampProvider.class) protected Map timestampProviders; @@ -160,7 +157,7 @@ private TychoProjectVersion calculateQualifiedVersion() throws MojoFailureExcept String qualifier = forceContextQualifier; if (qualifier == null) { - qualifier = buildPropertiesParser.parse(baseDir).getForceContextQualifier(); + qualifier = DefaultReactorProject.adapt(project).getBuildProperties().getForceContextQualifier(); } if (qualifier == null) { diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java index e96056461c..fcc358db06 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java @@ -30,11 +30,11 @@ import org.codehaus.plexus.archiver.FileSet; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.util.AbstractScanner; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.artifacts.DependencyArtifacts; import org.eclipse.tycho.core.ArtifactDependencyWalker; import org.eclipse.tycho.core.TychoProject; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.shared.BuildProperties; public abstract class AbstractTychoPackagingMojo extends AbstractMojo { diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java index 1262046371..292c69a319 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java @@ -24,7 +24,7 @@ import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.DirectoryScanner; -import org.eclipse.tycho.core.shared.BuildProperties; +import org.eclipse.tycho.BuildProperties; @Component(role = IncludeValidationHelper.class) public class IncludeValidationHelper { diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/LicenseFeatureHelper.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/LicenseFeatureHelper.java index 8c2e19538b..1970da7b4d 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/LicenseFeatureHelper.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/LicenseFeatureHelper.java @@ -29,11 +29,11 @@ import org.codehaus.plexus.component.annotations.Component; import org.eclipse.tycho.ArtifactDescriptor; import org.eclipse.tycho.ArtifactType; +import org.eclipse.tycho.BuildProperties; +import org.eclipse.tycho.BuildPropertiesParser; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.shared.BuildProperties; import org.eclipse.tycho.core.shared.BuildPropertiesImpl; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.model.Feature; diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java index b95801cf7f..8fe45b3719 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java @@ -37,11 +37,10 @@ import org.codehaus.plexus.archiver.jar.JarArchiver; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.IOUtil; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.artifacts.TargetPlatform; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.model.Feature; @@ -107,9 +106,6 @@ public class PackageFeatureMojo extends AbstractTychoPackagingMojo { @Component private LicenseFeatureHelper licenseFeatureHelper; - @Component - private BuildPropertiesParser buildPropertiesParser; - @Override public void execute() throws MojoExecutionException, MojoFailureException { synchronized (LOCK) { @@ -129,7 +125,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { throw new MojoExecutionException("Error updating feature.xml", e); } - BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(project).getBuildProperties(); checkBinIncludesExist(buildProperties); File featureProperties = getFeatureProperties(licenseFeature, buildProperties); diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java index ea5a3d330d..4ce0816d84 100644 --- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java +++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java @@ -43,12 +43,12 @@ import org.codehaus.plexus.archiver.jar.ManifestException; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.component.annotations.Requirement; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.TychoConstants; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; import org.eclipse.tycho.core.osgitools.project.BuildOutputJar; import org.eclipse.tycho.core.osgitools.project.EclipsePluginProject; -import org.eclipse.tycho.core.shared.BuildProperties; import org.eclipse.tycho.packaging.sourceref.SourceReferenceComputer; import org.eclipse.tycho.packaging.sourceref.SourceReferencesProvider; import org.osgi.framework.Constants; diff --git a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java index 9c46f8e706..9cc4657a4e 100644 --- a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java +++ b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java @@ -48,14 +48,13 @@ import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.tycho.ArtifactKey; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.PackagingType; import org.eclipse.tycho.ReactorProject; import org.eclipse.tycho.core.TychoProject; import org.eclipse.tycho.core.osgitools.BundleReader; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; import org.eclipse.tycho.core.osgitools.OsgiManifest; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.packaging.IncludeValidationHelper; import org.osgi.framework.Version; @@ -160,9 +159,6 @@ public class OsgiSourceMojo extends AbstractSourceJarMojo { @Component(role = TychoProject.class) private Map projectTypes; - @Component - BuildPropertiesParser buildPropertiesParser; - @Component private IncludeValidationHelper includeValidationHelper; @@ -172,7 +168,7 @@ public class OsgiSourceMojo extends AbstractSourceJarMojo { /** {@inheritDoc} */ @Override protected List getSources(MavenProject p) throws MojoExecutionException { - return getSources(project, requireSourceRoots, buildPropertiesParser.parse(p.getBasedir())); + return getSources(project, requireSourceRoots, DefaultReactorProject.adapt(project).getBuildProperties()); } protected List getSources(MavenProject p, boolean requireSourceRoots, BuildProperties buildProperties) @@ -204,7 +200,7 @@ protected List getResources(MavenProject p) throws MojoExecutionExcept if (excludeResources) { return Collections.emptyList(); } - BuildProperties buildProperties = buildPropertiesParser.parse(p.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(p).getBuildProperties(); List srcIncludesList = buildProperties.getSourceIncludes(); List resources = new ArrayList<>(); if (!srcIncludesList.isEmpty()) { @@ -359,7 +355,8 @@ private String getEclipseHeaderSourceRoots() { return "."; } StringJoiner result = new StringJoiner(","); - for (String jarName : getBuildProperties().getJarToSourceFolderMap().keySet()) { + for (String jarName : DefaultReactorProject.adapt(project).getBuildProperties().getJarToSourceFolderMap() + .keySet()) { String sourceRoot; if (".".equals(jarName)) { sourceRoot = "."; @@ -390,10 +387,10 @@ private Version getExpandedVersion(String versionStr) { @Override protected boolean isRelevantProject(MavenProject project) { - return isRelevantProjectImpl(project, buildPropertiesParser); + return isRelevant(project); } - protected static boolean isRelevantProjectImpl(MavenProject project, BuildPropertiesParser buildPropertiesParser) { + public static boolean isRelevant(MavenProject project) { String packaging = project.getPackaging(); boolean relevant = PackagingType.TYPE_ECLIPSE_PLUGIN.equals(packaging) || PackagingType.TYPE_ECLIPSE_TEST_PLUGIN.equals(packaging); @@ -420,7 +417,7 @@ protected static boolean isRelevantProjectImpl(MavenProject project, BuildProper if (hasAdditionalFilesets) { return true; } - BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(project).getBuildProperties(); if (buildProperties.getJarToSourceFolderMap().size() > 0 || buildProperties.getSourceIncludes().size() > 0) { return true; @@ -452,7 +449,4 @@ private static Xpp3Dom getConfigurationElement(Xpp3Dom config, String name) { return child; } - private BuildProperties getBuildProperties() { - return buildPropertiesParser.parse(project.getBasedir()); - } } diff --git a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourceFeatureMojo.java b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourceFeatureMojo.java index e022e24276..3bf0b698d6 100644 --- a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourceFeatureMojo.java +++ b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourceFeatureMojo.java @@ -48,12 +48,11 @@ import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.AbstractScanner; import org.eclipse.sisu.equinox.EquinoxServiceFactory; +import org.eclipse.tycho.BuildProperties; import org.eclipse.tycho.PackagingType; import org.eclipse.tycho.artifacts.TargetPlatform; import org.eclipse.tycho.core.osgitools.DebugUtils; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.shared.BuildProperties; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.utils.TychoProjectUtils; import org.eclipse.tycho.model.Feature; import org.eclipse.tycho.model.FeatureRef; @@ -213,9 +212,6 @@ public enum MissingSourcesAction { @Component private LicenseFeatureHelper licenseFeatureHelper; - @Component - private BuildPropertiesParser buildPropertiesParser; - @Component private EquinoxServiceFactory equinox; @@ -246,7 +242,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { archiver.getArchiver().addFileSet(templateFileSet); } - BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir()); + BuildProperties buildProperties = DefaultReactorProject.adapt(project).getBuildProperties(); archiver.getArchiver().addFileSet(getManuallyIncludedFiles(project.getBasedir(), buildProperties)); archiver.getArchiver().addFile(sourceFeatureXml, Feature.FEATURE_XML); @@ -323,7 +319,8 @@ private File generateSourceFeatureXml(Properties mergedSourceFeatureProps, Prope final Feature sourceFeature = createSourceFeatureSkeleton(feature, mergedSourceFeatureProps, sourceTemplateProps); - fillReferences(sourceFeature, feature, TychoProjectUtils.getTargetPlatform(DefaultReactorProject.adapt(project))); + fillReferences(sourceFeature, feature, + TychoProjectUtils.getTargetPlatform(DefaultReactorProject.adapt(project))); Feature.write(sourceFeature, sourceFeatureXml, " "); return sourceFeatureXml; diff --git a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourcesP2MetadataProvider.java b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourcesP2MetadataProvider.java index 7a7818355e..e7b81d8488 100644 --- a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourcesP2MetadataProvider.java +++ b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/SourcesP2MetadataProvider.java @@ -25,7 +25,6 @@ import org.eclipse.sisu.equinox.EquinoxServiceFactory; import org.eclipse.tycho.IDependencyMetadata; import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.shared.TargetEnvironment; import org.eclipse.tycho.p2.facade.internal.AttachedArtifact; import org.eclipse.tycho.p2.metadata.DependencyMetadataGenerator; @@ -39,15 +38,12 @@ public class SourcesP2MetadataProvider implements P2MetadataProvider, Initializa @Requirement private EquinoxServiceFactory equinox; - @Requirement - private BuildPropertiesParser buildPropertiesParser; - private DependencyMetadataGenerator sourcesGenerator; @Override public Map getDependencyMetadata(MavenSession session, MavenProject project, List environments, OptionalResolutionAction optionalAction) { - if (OsgiSourceMojo.isRelevantProjectImpl(project, buildPropertiesParser)) { + if (OsgiSourceMojo.isRelevant(project)) { IArtifactFacade sourcesArtifact = new AttachedArtifact(project, project.getBasedir(), "sources"); return Collections.singletonMap(sourcesArtifact.getClassifier(), sourcesGenerator .generateMetadata(sourcesArtifact, null, OptionalResolutionAction.REQUIRE, new PublisherOptions())); diff --git a/tycho-source-plugin/src/test/java/org/eclipse/tycho/source/OsgiSourceMojoTest.java b/tycho-source-plugin/src/test/java/org/eclipse/tycho/source/OsgiSourceMojoTest.java index b0deba4ad4..7daebca04d 100644 --- a/tycho-source-plugin/src/test/java/org/eclipse/tycho/source/OsgiSourceMojoTest.java +++ b/tycho-source-plugin/src/test/java/org/eclipse/tycho/source/OsgiSourceMojoTest.java @@ -33,10 +33,13 @@ import org.apache.maven.model.PluginExecution; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.eclipse.tycho.BuildPropertiesParser; +import org.eclipse.tycho.Interpolator; import org.eclipse.tycho.ReactorProject; +import org.eclipse.tycho.core.osgitools.DefaultReactorProject; import org.eclipse.tycho.core.osgitools.OsgiManifest; -import org.eclipse.tycho.core.shared.BuildPropertiesParser; import org.eclipse.tycho.core.utils.TychoVersion; import org.eclipse.tycho.testing.AbstractTychoMojoTestCase; import org.osgi.framework.Constants; @@ -48,9 +51,7 @@ public class OsgiSourceMojoTest extends AbstractTychoMojoTestCase { @Override protected void setUp() throws Exception { super.setUp(); - BuildPropertiesParser parser = lookup(BuildPropertiesParser.class); mojo = new OsgiSourceMojo(); - mojo.buildPropertiesParser = parser; } public void testIsRelevantProjectPackagingType() throws Exception { @@ -135,20 +136,22 @@ public void readL10nPropsSetup() throws Exception { mojo.setLog(log); } - private MavenProject createStubProjectWithSourceFolder(String packaging) { + private MavenProject createStubProjectWithSourceFolder(String packaging) throws ComponentLookupException { return createStubProject(packaging, "srcFolder", true); } - private MavenProject createStubProjectWithSourceFolder(boolean sourcePluginEnabled) { + private MavenProject createStubProjectWithSourceFolder(boolean sourcePluginEnabled) + throws ComponentLookupException { return createStubProject("eclipse-plugin", "srcFolder", sourcePluginEnabled); } - private MavenProject createStubProject(String packaging, String testResourceFolder, boolean enableSourePlugin) { + private MavenProject createStubProject(String packaging, String testResourceFolder, boolean enableSourePlugin) + throws ComponentLookupException { return createStubProject(packaging, testResourceFolder, enableSourePlugin, false); } private MavenProject createStubProject(String packaging, String testResourceFolder, boolean enableSourePlugin, - boolean requireSourceRoots) { + boolean requireSourceRoots) throws ComponentLookupException { MavenProject stubProject = new MavenProject(); stubProject.setPackaging(packaging); if (enableSourePlugin) { @@ -169,6 +172,15 @@ private MavenProject createStubProject(String packaging, String testResourceFold tychoSourcePlugin.setExecutions(asList(execution)); build.setPlugins(asList(tychoSourcePlugin)); } + ReactorProject project = DefaultReactorProject.adapt(stubProject); + project.setContextValue(ReactorProject.CTX_BUILDPROPERTIESPARSER, lookup(BuildPropertiesParser.class)); + project.setContextValue(ReactorProject.CTX_INTERPOLATOR, new Interpolator() { + + @Override + public String interpolate(String input) { + return input; + } + }); stubProject.setFile(new File("src/test/resources/sourceMojo/" + testResourceFolder + "/pom.xml")); return stubProject; }