Stack Overflow Asked by Mr. on September 14, 2020
i am using maven enforcer version 3.0.0-M3.
i configured the rules within the pom.xml
as follows:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>foo</artifactId>
<version>0.0.1</version>
<properties>
<java.version>1.8</java.version>
<mvn.version>3.6.3</mvn.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<failFast>true</failFast>
<rules>
<requireMavenVersion>
<version>${mvn.version}</version>
</requireMavenVersion>
<requireJavaVersion>
<version>${java.version}</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
then i verified the configurations are evaluated correctly:
$ mvn validate -Djava.version=1.7 -X
...
DEBUG] Configuring mojo org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3, parent: sun.misc.Launcher$AppClassLoader@7852e922]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce' with basic configurator -->
[DEBUG] (f) commandLineRules = []
[DEBUG] (s) fail = true
[DEBUG] (s) failFast = true
[DEBUG] (f) ignoreCache = false
[DEBUG] (f) mojoExecution = org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce {execution: enforce-versions}
[DEBUG] (s) project = MavenProject: foo:foo:0.0.1 @ /app/pom.xml
[DEBUG] (s) version = 3.6.3
[DEBUG] (s) version = 1.7
[DEBUG] (s) rules = [org.apache.maven.plugins.enforcer.RequireMavenVersion@551a20d6, org.apache.maven.plugins.enforcer.RequireJavaVersion@578524c3]
[DEBUG] (s) session = org.apache.maven.execution.MavenSession@64c2b546
[DEBUG] (s) skip = false
[DEBUG] -- end configuration --
[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.RequireMavenVersion
[DEBUG] Rule org.apache.maven.plugins.enforcer.RequireMavenVersion is cacheable.
[DEBUG] Detected Maven Version: 3.6.3
[DEBUG] Detected Maven Version: 3.6.3 is allowed in the range 3.6.3.
[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.RequireJavaVersion
[DEBUG] Rule org.apache.maven.plugins.enforcer.RequireJavaVersion is cacheable.
[DEBUG] Detected Java String: '1.7'
[DEBUG] Normalized Java String: '1.7'
[DEBUG] Parsed Version: Major: 1 Minor: 7 Incremental: 0 Build: 0 Qualifier: null
[DEBUG] Detected JDK Version: 1.7 is allowed in the range 1.7.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.848 s
[INFO] Finished at: 2020-08-02T08:47:43Z
[INFO] ------------------------------------------------------------------------
but it seems the rules are not honored, since when i run the enforce
, the No rules are configured.
error message is shown
$ mvn enforcer:enforce -Djava.version=1.7
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------< foo:foo >-------------------------------
[INFO] Building foo 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) @ foo ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.605 s
[INFO] Finished at: 2020-08-02T08:49:54Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) on project foo: No rules are configured. Use the skip flag if you want to disable execution. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
when providing rules through command line argument, it seems the enforcer does evaluate them
$ mvn enforcer:enforce -Drules=alwaysFail
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------< foo:foo >-------------------------------
[INFO] Building foo 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) @ foo ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.AlwaysFail failed with message:
Always fails!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.572 s
[INFO] Finished at: 2020-08-02T09:05:57Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) on project foo: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
but setting <AlwaysFail />
in /project/build/plugins/plugin/executions/execution/configuration/rules/AlwaysFail
(xpath) doesn’t seem to produce the same thing — keep getting No rules are configured
when executed without a command line arguments.
i am using maven 3.6.3 and openjdk 1.8 under debian buster
$ mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/share/maven
Java version: 1.8.0_262, vendor: Oracle Corporation, runtime: /usr/local/openjdk-8/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.19.76-linuxkit", arch: "amd64", family: "unix"
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
UPDATE:
after moving the <configuration>
block outside the <executions>
block and running in a debug mode, i get the output where it shows that the java.version=0.7
is detected by by the enforcer but it does not fail the build. see below:
$ mvn validate -Drequired.java.version=0.7 -X
...
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3, parent: sun.misc.Launcher$AppClassLoader@7852e922]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce' with basic configurator -->
[DEBUG] (f) commandLineRules = []
[DEBUG] (s) fail = true
[DEBUG] (s) failFast = true
[DEBUG] (f) ignoreCache = false
[DEBUG] (f) mojoExecution = org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce {execution: enforce-versions}
[DEBUG] (s) project = MavenProject: foo:foo:0.0.1 @ /app/pom.xml
[DEBUG] (s) version = 3.6.3
[DEBUG] (s) version = 0.7
[DEBUG] (s) rules = [org.apache.maven.plugins.enforcer.RequireMavenVersion@551a20d6, org.apache.maven.plugins.enforcer.RequireJavaVersion@578524c3]
[DEBUG] (s) session = org.apache.maven.execution.MavenSession@64c2b546
[DEBUG] (s) skip = false
[DEBUG] -- end configuration --
[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.RequireMavenVersion
[DEBUG] Rule org.apache.maven.plugins.enforcer.RequireMavenVersion is cacheable.
[DEBUG] Detected Maven Version: 3.6.3
[DEBUG] Detected Maven Version: 3.6.3 is allowed in the range 3.6.3.
[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.RequireJavaVersion
[DEBUG] Rule org.apache.maven.plugins.enforcer.RequireJavaVersion is cacheable.
[DEBUG] Detected Java String: '1.8.0_262'
[DEBUG] Normalized Java String: '1.8.0-262'
[DEBUG] Parsed Version: Major: 1 Minor: 8 Incremental: 0 Build: 262 Qualifier: null
[DEBUG] Detected JDK Version: 1.8.0-262 is allowed in the range 0.7.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.854 s
[INFO] Finished at: 2020-08-02T11:51:19Z
[INFO] ------------------------------------------------------------------------
how to make the enforcer fail when the required java and maven version are unmet?
after reading reading thoroughly the documentation, specifically version range specification, when the version is specified as a number, it implies that the version comparison operator is >=
(greater than or equal to) the version.
to solve the issue, i used square brackets ([]
), e.g.
<requireMavenVersion>
<version>[${mvn.version}]</version>
</requireMavenVersion>
as noted, using java.version
and mvn.version
are built-in properties.
Correct answer by Mr. on September 14, 2020
You configured the rules as part of an <execution>
.
If you want the configuration to be used also for other executions (like on command line), you need to move the <configuration>
block outside the <executions>
block.
It should look like this:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
<configuration>
<failFast>true</failFast>
<rules>
<requireMavenVersion>
<version>${mvn.version}</version>
</requireMavenVersion>
<requireJavaVersion>
<version>${required.java.version}</version>
</requireJavaVersion>
</rules>
</configuration>
</plugin>
Note that you should not use the property ${java.version}
as it is apparently an "official" property of Maven.
Answered by J Fabian Meier on September 14, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP