This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new dec66c82a2 Fix reactor-wide Surefire failure caused by global
excludedGroups property
dec66c82a2 is described below
commit dec66c82a28eb31bf0258bc9b5bf37212d76c240
Author: James Bognar <[email protected]>
AuthorDate: Thu Jul 23 10:02:05 2026 -0400
Fix reactor-wide Surefire failure caused by global excludedGroups property
The root pom declared a global <excludedGroups>manual</excludedGroups>
property. Surefire's excludedGroups mojo parameter auto-binds to any
property named "excludedGroups" in the effective POM (via
@Parameter(property="excludedGroups")), so merely declaring it in the
root <properties> fed it into every module's Surefire execution reactor-
wide via inheritance - even with no <configuration> reference. Surefire
hard-fails with "groups/excludedGroups require TestNG, JUnit48+ or JUnit
5" as soon as that parameter is non-null (even resolving to empty), and
several modules (e.g. juneau-rest-server-rdf) have no JUnit5 engine on
their test classpath, breaking the build.
Fix: remove the global excludedGroups property and its pluginManagement
Surefire reference from the root pom, and instead declare a local
excludedGroups property (default "manual", still overridable via
-DexcludedGroups=) only in the two modules that actually contain
@Tag("manual") tests and have the JUnit5 engine present -
juneau-marshall and juneau-integration-tests.
Co-authored-by: Cursor <[email protected]>
---
juneau-core/juneau-marshall/pom.xml | 12 ++++++++++++
juneau-integration-tests/pom.xml | 13 +++++++++++--
pom.xml | 23 ++++++++++++-----------
3 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/juneau-core/juneau-marshall/pom.xml
b/juneau-core/juneau-marshall/pom.xml
index 2457e40d80..511916a251 100644
--- a/juneau-core/juneau-marshall/pom.xml
+++ b/juneau-core/juneau-marshall/pom.xml
@@ -32,6 +32,11 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <!-- Local (not inherited from root - see root pom's
pluginManagement Surefire comment for why) default
+ Surefire excludedGroups value, referenced via
${excludedGroups} below rather than a literal so it's
+ still overridable on the CLI (e.g. -DexcludedGroups= to
run "manual"-tagged tests like
+ BsonArrayDebug_Test). -->
+ <excludedGroups>manual</excludedGroups>
</properties>
<dependencies>
@@ -75,6 +80,13 @@
<includes>
<include>**/*Test.class</include>
</includes>
+ <!-- This module has the JUnit5 engine
on its test classpath (junit-jupiter dependency above)
+ and contains @Tag("manual") tests
(e.g. BsonArrayDebug_Test), so it's one of the few
+ modules that declares a local
${excludedGroups} property (see <properties> above,
+ default "manual") and wires it
into its Surefire config; see the root pom's
+ pluginManagement Surefire comment
for why this isn't set reactor-wide. Still
+ overridable via -DexcludedGroups=
to run the manual tests on demand. -->
+
<excludedGroups>${excludedGroups}</excludedGroups>
<systemPropertyVariables>
<java.locale.providers>JRE,COMPAT,SPI,CLDR</java.locale.providers>
</systemPropertyVariables>
diff --git a/juneau-integration-tests/pom.xml b/juneau-integration-tests/pom.xml
index 4048af59f9..a2d5b3bda2 100644
--- a/juneau-integration-tests/pom.xml
+++ b/juneau-integration-tests/pom.xml
@@ -32,6 +32,11 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <!-- Local (not inherited from root - see root pom's
pluginManagement Surefire comment for why) default
+ Surefire excludedGroups value, referenced via
${excludedGroups} below rather than a literal so it's
+ still overridable on the CLI (e.g. -DexcludedGroups= to
run "manual"-tagged tests like
+ RoundTripLargeObjects_Test). -->
+ <excludedGroups>manual</excludedGroups>
</properties>
<dependencyManagement>
@@ -681,8 +686,12 @@
<execution>
<id>default-test</id>
<configuration>
- <!-- ${excludedGroups}
(default "manual", see root pom) is merged in here so it stays
- overridable via
-DexcludedGroups= the same way as every other module. -->
+ <!-- ${excludedGroups}
(local property above, default "manual") is merged in here so it
+ stays overridable
via -DexcludedGroups=. This module has the JUnit5 engine on its
+ test classpath and
contains @Tag("manual") tests (RoundTripLargeObjects_Test), so
+ it's one of the
few modules that wires ${excludedGroups} explicitly - it is NOT set
+ reactor-wide in
the root pom's pluginManagement Surefire config (see comment there)
+ because that
breaks modules with no JUnit5 engine on their test classpath. -->
<excludedGroups>container,benchmark,${excludedGroups}</excludedGroups>
<reportsDirectory>${project.build.directory}/surefire-reports/core</reportsDirectory>
<!--
diff --git a/pom.xml b/pom.xml
index aa6d485eee..48d8ce1cbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,9 +79,6 @@
<jakarta.validation-api.version>3.0.2</jakarta.validation-api.version>
<logback.version>1.5.18</logback.version>
<log4j.version>2.24.3</log4j.version>
- <!-- Default Surefire excludedGroups; overridable on the CLI
(e.g. -DexcludedGroups= to run "manual"-tagged
- tests) because it's referenced via ${excludedGroups}
rather than hardcoded in the plugin config. -->
- <excludedGroups>manual</excludedGroups>
</properties>
<modules>
@@ -300,19 +297,23 @@
Modules that define their own surefire
<systemPropertyVariables> (e.g. java.locale.providers)
merge with these; module-level keys win
on conflict. See src/test/resources/.
- Also excludes the "manual" JUnit5 tag
by default so on-demand/manual-inspection tests
- (e.g. debug harnesses, expensive stress
tests) are skipped during normal builds; run them
- explicitly with -DexcludedGroups=
-Dgroups=manual. The value comes from the ${excludedGroups}
- property (default "manual") rather than
a literal, so it can be overridden on the CLI -
- a literal value in this <configuration>
would take precedence over any -D override.
- Modules that already override
<excludedGroups> per execution (e.g. juneau-integration-tests)
- merge ${excludedGroups} into their own
exclusion lists the same way.
+ Deliberately does NOT set
<excludedGroups>, nor define an "excludedGroups" property, anywhere
+ in this root pom: Surefire's
excludedGroups mojo parameter is bound to a property of the
+ same name (so -DexcludedGroups=...
works with zero pom.xml wiring), which means merely
+ declaring an "excludedGroups" property
in <properties> - even with no <configuration> use -
+ would feed every module's Surefire
execution reactor-wide via inheritance. Surefire hard-
+ fails a module with
"groups/excludedGroups require TestNG, JUnit48+ or JUnit 5" as soon as
+ that parameter is non-null, even when
it resolves to an empty string - and several modules
+ (e.g. juneau-rest-server-rdf) have no
JUnit5 engine on their test classpath. Only the
+ modules that actually contain
@Tag("manual") tests (currently juneau-marshall and
+ juneau-integration-tests) declare their
own local "excludedGroups" property (default
+ "manual", still overridable via
-DexcludedGroups=) and wire it into their own Surefire
+ config, since only those modules are
guaranteed to have the JUnit5 engine present.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
-
<excludedGroups>${excludedGroups}</excludedGroups>
<systemPropertyVariables>
<logback.configurationFile>${maven.multiModuleProjectDirectory}/src/test/resources/logback-test.xml</logback.configurationFile>
<java.util.logging.config.file>${maven.multiModuleProjectDirectory}/src/test/resources/logging.properties</java.util.logging.config.file>