diff --git a/src/it/enforce-bytecode-version-module-info-jdk8-strict/invoker.properties b/src/it/enforce-bytecode-version-module-info-jdk8-strict/invoker.properties
new file mode 100644
index 00000000..38b185e5
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk8-strict/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = enforcer:enforce
+invoker.buildResult = failure
diff --git a/src/it/enforce-bytecode-version-module-info-jdk8-strict/pom.xml b/src/it/enforce-bytecode-version-module-info-jdk8-strict/pom.xml
new file mode 100644
index 00000000..6fd6a4f5
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk8-strict/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ pim.pam.poum
+ smoking
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+
+
+
+
+ org.ow2.asm
+ asm
+ 6.0
+ runtime
+
+
+
+
+
+
+ maven-enforcer-plugin
+ @enforcerPluginVersion@
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+
+
+
+ 1.8
+ true
+
+
+
+
+
+ compile
+
+
+
+
+
+
diff --git a/src/it/enforce-bytecode-version-module-info-jdk8-strict/verify.groovy b/src/it/enforce-bytecode-version-module-info-jdk8-strict/verify.groovy
new file mode 100644
index 00000000..3703f11b
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk8-strict/verify.groovy
@@ -0,0 +1,9 @@
+File file = new File( basedir, "build.log" );
+assert file.exists();
+
+String text = file.getText("utf-8");
+
+assert ! text.contains( '[INFO] Adding ignore: module-info' )
+assert text.contains( 'Found Banned Dependency: org.ow2.asm:asm:jar:6.0' )
+
+return true;
diff --git a/src/it/enforce-bytecode-version-module-info-jdk9-strict/invoker.properties b/src/it/enforce-bytecode-version-module-info-jdk9-strict/invoker.properties
new file mode 100644
index 00000000..a30e3767
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk9-strict/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = enforcer:enforce
+invoker.buildResult = success
diff --git a/src/it/enforce-bytecode-version-module-info-jdk9-strict/pom.xml b/src/it/enforce-bytecode-version-module-info-jdk9-strict/pom.xml
new file mode 100644
index 00000000..2b1e4790
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk9-strict/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ pim.pam.poum
+ smoking
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+
+
+
+
+ org.ow2.asm
+ asm
+ 6.0
+ runtime
+
+
+
+
+
+
+ maven-enforcer-plugin
+ @enforcerPluginVersion@
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+
+
+
+ 1.9
+ true
+
+
+
+
+
+ compile
+
+
+
+
+
+
diff --git a/src/it/enforce-bytecode-version-module-info-jdk9-strict/verify.groovy b/src/it/enforce-bytecode-version-module-info-jdk9-strict/verify.groovy
new file mode 100644
index 00000000..1940ff78
--- /dev/null
+++ b/src/it/enforce-bytecode-version-module-info-jdk9-strict/verify.groovy
@@ -0,0 +1,9 @@
+File file = new File( basedir, "build.log" );
+assert file.exists();
+
+String text = file.getText("utf-8");
+
+assert ! text.contains( '[INFO] Adding ignore: module-info' )
+assert ! text.contains( 'Found Banned Dependency: org.ow2.asm:asm:jar:6.0' )
+
+return true;
diff --git a/src/it/enforce-bytecode-version-multirelease-strict/invoker.properties b/src/it/enforce-bytecode-version-multirelease-strict/invoker.properties
new file mode 100644
index 00000000..38b185e5
--- /dev/null
+++ b/src/it/enforce-bytecode-version-multirelease-strict/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = enforcer:enforce
+invoker.buildResult = failure
diff --git a/src/it/enforce-bytecode-version-multirelease-strict/pom.xml b/src/it/enforce-bytecode-version-multirelease-strict/pom.xml
new file mode 100644
index 00000000..a3bde43c
--- /dev/null
+++ b/src/it/enforce-bytecode-version-multirelease-strict/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+ pim.pam.poum
+ smoking
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.17.2
+ runtime
+
+
+
+
+
+
+ maven-enforcer-plugin
+ @enforcerPluginVersion@
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+
+
+
+
+ 1.8
+ true
+
+
+
+
+
+
+ compile
+
+
+
+
+
+
diff --git a/src/it/enforce-bytecode-version-multirelease-strict/verify.groovy b/src/it/enforce-bytecode-version-multirelease-strict/verify.groovy
new file mode 100644
index 00000000..108bb6b9
--- /dev/null
+++ b/src/it/enforce-bytecode-version-multirelease-strict/verify.groovy
@@ -0,0 +1,9 @@
+File file = new File( basedir, "build.log" );
+assert file.exists();
+
+String text = file.getText("utf-8");
+
+assert ! text.contains( '[INFO] Adding ignore: module-info' )
+assert text.contains( 'Found Banned Dependency: org.apache.logging.log4j:log4j-api:jar:2.17.2' )
+
+return true;
diff --git a/src/main/java/org/apache/maven/plugins/enforcer/EnforceBytecodeVersion.java b/src/main/java/org/apache/maven/plugins/enforcer/EnforceBytecodeVersion.java
index 2d35a35a..d7cdafdf 100644
--- a/src/main/java/org/apache/maven/plugins/enforcer/EnforceBytecodeVersion.java
+++ b/src/main/java/org/apache/maven/plugins/enforcer/EnforceBytecodeVersion.java
@@ -48,7 +48,7 @@
/**
* Enforcer rule that will check the bytecode version of each class of each dependency.
- *
+ *
* @see Java class file general layout
* @since 1.0-alpha-4
*/
@@ -148,7 +148,7 @@ static String renderVersion( int major, int minor )
/**
* This parameter is here for potentially advanced use cases, but it seems like it is actually always 0.
- *
+ *
* @see #maxJavaMajorVersionNumber
* @see Java class file general layout
*/
@@ -167,6 +167,11 @@ static String renderVersion( int major, int minor )
*/
private String[] ignoreClasses;
+ /**
+ * Process module-info and Multi-Release JAR classes if true
+ */
+ private boolean strict = false;
+
/**
* Optional list of dependency scopes to ignore. {@code test} and {@code provided} make sense here.
*/
@@ -240,7 +245,7 @@ private void computeParameters()
"\"1.7\", \"8\", \"11\", \"12\", \"13\", \"14\", \"15\", \"16\", \"17\"" );
}
maxJavaMajorVersionNumber = needle;
- if ( needle < 53 )
+ if ( !strict && needle < 53 )
{
IgnorableDependency ignoreModuleInfoDependency = new IgnorableDependency();
ignoreModuleInfoDependency.applyIgnoreClasses(DEFAULT_CLASSES_IGNORE_BEFORE_JDK_9, false );
@@ -342,17 +347,17 @@ private String isBadArtifact( Artifact a )
int major = ( magicAndClassFileVersion[6] << 8 ) + magicAndClassFileVersion[7];
// Assuming regex match is more expensive, verify bytecode versions first
-
+
if ( ( major > maxJavaMajorVersionNumber )
|| ( major == maxJavaMajorVersionNumber && minor > maxJavaMinorVersionNumber ) )
{
-
+
Matcher matcher = MULTIRELEASE.matcher( entry.getName() );
-
- if ( matcher.matches() )
+
+ if ( !strict && matcher.matches() )
{
Integer maxExpectedMajor = JDK_TO_MAJOR_VERSION_NUMBER_MAPPING.get( matcher.group( 1 ) );
-
+
if (maxExpectedMajor == null) {
getLog().warn( "Unknown bytecodeVersion for " + a + " : "
+ entry.getName() + ": got " + maxExpectedMajor + " class-file-version" );
@@ -423,6 +428,15 @@ public void setSearchTransitive( boolean theSearchTransitive )
this.searchTransitive = theSearchTransitive;
}
+ /**
+ * Process module-info and Multi-Release JAR classes if true
+ * @param strict the strictness to set
+ */
+ public void setStrict( boolean strict )
+ {
+ this.strict = strict;
+ }
+
// copied from RequireReleaseDeps
/*
* Filter the dependency artifacts according to the includes and excludes If includes and excludes are both null,
diff --git a/src/site/apt/enforceBytecodeVersion.apt.vm b/src/site/apt/enforceBytecodeVersion.apt.vm
index 96c811c9..d288404a 100644
--- a/src/site/apt/enforceBytecodeVersion.apt.vm
+++ b/src/site/apt/enforceBytecodeVersion.apt.vm
@@ -43,9 +43,11 @@ Enforce Bytecode Version
* ignoreOptionals - a boolean, if <<>> all dependencies which have <<<true>>> are ignored.
+ * strict - a boolean, if <<>> process module-info and Multi-Release JAR classes
+
[]
-Note
+Note
Sample Plugin Configuration:
+---+