110

When running our Maven build, a member of my team gets a NoSuchMethodError in one of the dependant plug-ins when executing. However, when we run java -version from her command line, it indicates Java 1.6.0_26. The error obviously seems to be screaming that Maven is using Java 5.

How do I figure out and change what version of Java is being used by Maven?

3 potentially important notes:

  1. This is executed at the command line, not using Eclipse plugin
  2. JAVA_HOME is set to a Java 1.6 JDK
  3. Using Maven 2.2.1
2
  • Seems JDK 1.6.0_26 is used to compile your source with 1.5. This is possible! Commented Aug 12, 2011 at 20:52
  • 8
    eek! :( "this error" link has broken Commented Mar 6, 2014 at 23:01

3 Answers 3

172

mvn -version will output which java it's using. If JAVA_HOME is set to a valid JDK directory and Maven is using something else, then most likely someone has tampered with the way that Maven starts up.

Sign up to request clarification or add additional context in comments.

1 Comment

You can define the Java to be used with maven. See the thread: stackoverflow.com/questions/18813828/…
14

You will need to configure maven-compiler-plugin to use 1.6 source and target parameters ( by default it is 1.5 ).

This is the best done in your project's parent pom in <pluginManagment> section ( but you can always configure it per individual projects of course ).

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <source>1.6</source>
            <target>1.6</target>

          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

Comments

4

mvn -version tells you what compiler Maven is using, so this answers the question unless your POM specifies override values for the versions to be used.

Here's the easiest way to specify the overrides in pom.xml:

<properties>
    <maven.compiler.target>1.9</maven.compiler.target>
    <maven.compiler.source>1.9</maven.compiler.source>
</properties>

Alternatively, the maven-compiler-plugin can be specified more explicitly. In that case, look at the <source> and <target> values associated with the plugin.

Both of these options are described here.

If your POM has a <parent>, then you need to check that as well (recursively).

Note: When source and target are specified, these values are passed as command-line options to the compiler. Using this feature, you can compile or run against earlier Java versions than the compiler's nominal value.

5 Comments

An example of how to set the compiler if you don't want to simply use javac from your path: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install. Your-mileage-may-vary in terms of how/when this can be overridden under Maven.
As an ultimate sanity check, you could ask javac/java from within the build environment by setting the build parameters to add -version to the command-line argument -- similar to here (for Gradle).
Remember that JAVA_HOME could be already set in your environment -- overriding the PATH variable.
This seems like it could be important, if it wasn't so ridiculous: maven.apache.org/enforcer/enforcer-rules/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.