You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2026/05/26 19:13:06 UTC
(sling-org-apache-sling-feature-launcher) 01/01: SLING-13217: Add BSN collision detection from feature-core --osgi-bsn-collision-detection CLI flag
This is an automated email from the ASF dual-hosted git repository.
royteeuwen pushed a commit to branch feature/osgi-bsn-collision-detection
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git
commit 91efd4dc66f091c09ebc8e3f3953ea1246f99706
Author: Roy Teeuwen <ro...@apache.org>
AuthorDate: Tue May 26 21:12:55 2026 +0200
SLING-13217: Add BSN collision detection from feature-core --osgi-bsn-collision-detection CLI flag
---
pom.xml | 8 +++++++-
.../feature/launcher/impl/FeatureProcessor.java | 1 +
.../sling/feature/launcher/impl/LauncherConfig.java | 21 +++++++++++++++++++++
.../apache/sling/feature/launcher/impl/Main.java | 17 +++++++++++++++--
4 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 24d756f..e9eef80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,12 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <!-- MainIT.setUp() calls System.setSecurityManager, which throws on JDK 17+
+ unless the SecurityManager is explicitly allowed. The Security Manager
+ is deprecated for removal but remains functional behind this opt-in. -->
+ <argLine>-Djava.security.manager=allow</argLine>
+ </configuration>
<executions>
<execution>
<goals>
@@ -265,7 +271,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>2.0.0</version>
+ <version>2.0.6</version>
<scope>compile</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index fd3f16e..45d2438 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -96,6 +96,7 @@ public class FeatureProcessor {
builderContext.addConfigsOverrides(config.getConfigClashOverrides());
builderContext.addVariablesOverrides(config.getVariables());
builderContext.addFrameworkPropertiesOverrides(config.getInstallation().getFrameworkProperties());
+ builderContext.setOsgiBsnCollisionDetection(config.isOsgiBsnCollisionDetectionEnabled());
builderContext.addMergeExtensions(StreamSupport.stream(Spliterators.spliteratorUnknownSize(
ServiceLoader.load(MergeHandler.class).iterator(), Spliterator.ORDERED), false)
.toArray(MergeHandler[]::new));
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
index 64b5af6..2bc7248 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
@@ -62,6 +62,8 @@ public class LauncherConfig
private volatile boolean cacheOnly = false;
+ private volatile boolean osgiBsnCollisionDetection;
+
/**
* Create a new configuration object.
* Set the default values
@@ -135,6 +137,25 @@ public class LauncherConfig
this.frameworkArtifact = frameworkArtifact;
}
+ /**
+ * @return whether OSGi {@code Bundle-SymbolicName} collision detection is
+ * enabled. Maps onto
+ * {@code BuilderContext.setOsgiBsnCollisionDetection(boolean)}.
+ * Default {@code false}.
+ *
+ * @since 1.4.0
+ */
+ public boolean isOsgiBsnCollisionDetectionEnabled() {
+ return osgiBsnCollisionDetection;
+ }
+
+ /**
+ * @since 1.4.0
+ */
+ public void setOsgiBsnCollisionDetection(final boolean enabled) {
+ this.osgiBsnCollisionDetection = enabled;
+ }
+
/**
* Set the feature id for the launch feature
* @param id The id
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
index 478f8c0..abb5527 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
@@ -67,6 +67,8 @@ public class Main {
public static final String OPT_REPOSITORY_URLS = "u";
+ public static final String OPT_OSGI_BSN_COLLISION_DETECTION = "osgi-bsn-collision-detection";
+
public static final String OPT_CONFIG_CLASH = "CC";
public static final String OPT_ARTICACT_CLASH = "C";
@@ -253,11 +255,17 @@ public class Main {
.build();
final Option printInsideContainerHelp = Option.builder(OPT_PRINT_CONTAINER_ENV_HELP)
-
+
.desc("print additional help information for container env vars.")
.optionalArg(true)
.build();
-
+
+ final Option osgiBsnCollisionDetectionOption = Option.builder()
+ .longOpt(OPT_OSGI_BSN_COLLISION_DETECTION)
+ .desc("Enable OSGi Bundle-SymbolicName collision detection during aggregation. "
+ + "Resolved via -C *:*:<rule> overrides or fails the build. Off by default.")
+ .build();
+
options = new Options().addOption(artifactClashOverride)
.addOption(configClashOverride)
.addOption(repoOption)
@@ -272,6 +280,7 @@ public class Main {
.addOption(extensionConfiguration)
.addOption(frameworkVersionOption)
.addOption(frameworkArtifactOption)
+ .addOption(osgiBsnCollisionDetectionOption)
.addOption(printInsideContainerHelp);
@@ -347,6 +356,10 @@ public class Main {
extractValueFromOption(cl, OPT_OSGI_FRAMEWORK_ARTIFACT)
.ifPresent(config::setFrameworkArtifact);
+ if (cl.hasOption(OPT_OSGI_BSN_COLLISION_DETECTION)) {
+ config.setOsgiBsnCollisionDetection(true);
+ }
+
} catch (final ParseException pe) {
Main.LOG().error("Unable to parse command line: {}", pe.getMessage(), pe);