Why does Maven insist on treating empty strings and strings of spaces "null values"? Take the following pom - I get the usual bogus message about a misconfigured argument. How can I arrange to pass an empty value that Maven will actually recognize as such instead of tormenting me with absurd error messages?
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Misconfigured argument, value is null. Set the argument to an empty value if this is the required behaviour.
pom.xml:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<packaging>pom</packaging>
<version>0</version>
<name>test</name>
<url>http://maven.apache.org</url>
<properties>
<my.val> </my.val>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>Exec test</id>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${env.JAVA_HOME}/bin/java</executable>
<arguments>
<argument>${my.val}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
An empty string is a string instance of zero length, whereas a null string has no value at all. An empty string is represented as "" . It is a character sequence of zero characters. A null string is represented by null .
A string refers to a character's sequence. Sometimes strings can be empty or NULL. The difference is that NULL is used to refer to nothing. However, an empty string is used to point to a unique string with zero length.
In Java, null is neither an Object nor a type. It is a special value that we can assign to any reference type variable. We can cast null into any type in which we want, such as string, int, double, etc. Let's take an example to understand how we can assign null values to any reference type.
Maven properties are value placeholders, like properties in Ant. Their values are accessible anywhere within a POM by using the notation ${X}, where X is the property. Or they can be used by plugins as default values, for example: In your case you have defined properties as version of java.
Looks like the problem has been known since 2007 -> http://mail-archives.apache.org/mod_mbox/maven-users/200708.mbox/%[email protected]%3E
In your case you may try to use <commanlineArgs>
configuration parameter instead.
It's not pretty if you have many arguments, but if you only have one or two it may be an option.
<configuration>
<executable>${env.JAVA_HOME}/bin/java</executable>
<commandlineArgs>${my.val}</commandlineArgs>
</configuration>
I've also created a bug report in MEXEC Jira: http://jira.codehaus.org/browse/MEXEC-104
UPDATE
To supply a classpath through <commandlineArgs>
, do this:
<commandlineArgs>-classpath %classpath my.main.class.MyMainClass ${my.val}</commandlineArgs>
Actually, the parser even allows folding of the long line to make it more readable, e.g.
<commandlineArgs>
-classpath %classpath
my.main.class.MyMainClass
${my.val}
</commandlineArgs>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With