diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7ef2885d9..9efa64cef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+### Changed
+
+- The line in the error message that shows the version of EqualsVerifier and the JDK, now also indicates whether EqualsVerifier runs on the classpath or the modulepath.
+
## [3.16.1] - 2024-04-03
### Fixed
diff --git a/README.md b/README.md
index 45d8a9243..d4d81fbdd 100644
--- a/README.md
+++ b/README.md
@@ -103,7 +103,7 @@ Here's a description of the modules:
| ----------------------------- | --------------------------------------------------------------------- |
| docs | project's Jekyll website |
| equalsverifier-core | the actual EqualsVerifier code |
-| equalsverifier-11 | tests for Java 11 and up |
+| equalsverifier-11 | logic for modules, tests for Java 11 and up |
| equalsverifier-16 | logic for records, and corresponding tests |
| equalsverifier-17 | logic for sealed classes, and corresponding tests |
| equalsverifier-21 | tests for record pattern matching |
diff --git a/equalsverifier-11/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java b/equalsverifier-11/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java
new file mode 100644
index 000000000..bcf7e6bfb
--- /dev/null
+++ b/equalsverifier-11/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java
@@ -0,0 +1,10 @@
+package nl.jqno.equalsverifier.internal.reflection;
+
+public final class ModuleHelper {
+
+ private ModuleHelper() {}
+
+ public static boolean runsOnModulePath() {
+ return ModuleLayer.boot().findModule("nl.jqno.equalsverifier").isPresent();
+ }
+}
diff --git a/equalsverifier-aggregator/src/main/resources/assemblies/assembly.xml b/equalsverifier-aggregator/src/main/resources/assemblies/assembly.xml
index 919180b20..a313c2ba0 100644
--- a/equalsverifier-aggregator/src/main/resources/assemblies/assembly.xml
+++ b/equalsverifier-aggregator/src/main/resources/assemblies/assembly.xml
@@ -19,6 +19,22 @@
+
+ true
+
+ nl.jqno.equalsverifier:equalsverifier-11
+
+
+ META-INF/versions/11
+ true
+ false
+
+
+ /META-INF/**
+
+
+
+
true
diff --git a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java
new file mode 100644
index 000000000..b7f05028b
--- /dev/null
+++ b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/ModuleHelper.java
@@ -0,0 +1,14 @@
+package nl.jqno.equalsverifier.internal.reflection;
+
+/**
+ * Note: this is a generic implementation for a multi-release jar class.
+ * See equalsverifier-11 submodule.
+ */
+public final class ModuleHelper {
+
+ private ModuleHelper() {}
+
+ public static boolean runsOnModulePath() {
+ return false;
+ }
+}
diff --git a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/util/ErrorMessage.java b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/util/ErrorMessage.java
index a319c46d7..c0abe1cd0 100644
--- a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/util/ErrorMessage.java
+++ b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/util/ErrorMessage.java
@@ -1,5 +1,7 @@
package nl.jqno.equalsverifier.internal.util;
+import nl.jqno.equalsverifier.internal.reflection.ModuleHelper;
+
public final class ErrorMessage {
private ErrorMessage() {}
@@ -10,10 +12,11 @@ private ErrorMessage() {}
public static String suffix() {
return Formatter
.of(
- "%%\n(EqualsVerifier %%, JDK %% on %%)",
+ "%%\n(EqualsVerifier %%, JDK %% running on %%, on %%)",
WEBSITE_URL,
ErrorMessage.class.getPackage().getImplementationVersion(),
System.getProperty("java.version"),
+ ModuleHelper.runsOnModulePath() ? "modulepath" : "classpath",
System.getProperty("os.name")
)
.format();
diff --git a/equalsverifier-release-main/pom.xml b/equalsverifier-release-main/pom.xml
index 1d4e887e0..51b02f6b9 100644
--- a/equalsverifier-release-main/pom.xml
+++ b/equalsverifier-release-main/pom.xml
@@ -167,6 +167,13 @@
provided
true
+
+ nl.jqno.equalsverifier
+ equalsverifier-11
+ ${project.version}
+ provided
+ true
+
nl.jqno.equalsverifier
equalsverifier-16
diff --git a/equalsverifier-release-nodep/pom.xml b/equalsverifier-release-nodep/pom.xml
index f2e85366f..22d01d65e 100644
--- a/equalsverifier-release-nodep/pom.xml
+++ b/equalsverifier-release-nodep/pom.xml
@@ -166,6 +166,12 @@
${project.version}
provided
+
+ nl.jqno.equalsverifier
+ equalsverifier-11
+ ${project.version}
+ provided
+
nl.jqno.equalsverifier
equalsverifier-16
diff --git a/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/jar/helper/JarAsserter.java b/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/jar/helper/JarAsserter.java
index a7affb518..6ad902ab4 100644
--- a/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/jar/helper/JarAsserter.java
+++ b/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/jar/helper/JarAsserter.java
@@ -30,6 +30,7 @@ public void assertPresenceOfCoreClasses() {
public void assertPresenceOfMultiReleaseClasses() {
assertPresenceOf(
+ "/META-INF/versions/11" + EV + "/internal/reflection/ModuleHelper.class",
"/META-INF/versions/16" + EV + "/internal/reflection/RecordsHelper.class",
"/META-INF/versions/17" + EV + "/internal/reflection/SealedTypesHelper.class"
);
diff --git a/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/pom/MainPomTest.java b/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/pom/MainPomTest.java
index 99c8e8570..e1b724b5b 100644
--- a/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/pom/MainPomTest.java
+++ b/equalsverifier-release-verify/src/test/java/nl/jqno/equalsverifier/verify_release/pom/MainPomTest.java
@@ -31,12 +31,13 @@ public void artifactId() {
@Test
public void dependencies() {
assertAll(
- () -> pom.assertNumberOfDependencies(5),
+ () -> pom.assertNumberOfDependencies(6),
() -> pom.assertDependencyIsOptional(1),
() -> pom.assertDependencyIsOptional(2),
() -> pom.assertDependencyIsOptional(3),
- () -> pom.assertDependency(4, "org.objenesis", "objenesis"),
- () -> pom.assertDependency(5, "net.bytebuddy", "byte-buddy")
+ () -> pom.assertDependencyIsOptional(4),
+ () -> pom.assertDependency(5, "org.objenesis", "objenesis"),
+ () -> pom.assertDependency(6, "net.bytebuddy", "byte-buddy")
);
}
}