Maven not picking JAVA_HOME correctly
I am on windows environment and using maven to compile my project. Although I just created the project and added the dependencies for various libararies.
As I added them maven started complaining for the missing tools.jar
, so i added below to my pom.xml
:
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
When i ran the maven install, i got an error for the missing jar as below :
[ERROR] Failed to execute goal on project GApp: Could not resolve dependencies for project GApp:GApp:war:0.0.1-SNAPSHOT: Could not find artifact com.sun:tools:jar:1.6 at specified path C:\Program Files\Java\jre6\lib\tools.jar -> [Help 1]
The issue is that the tools.jar
is in "C:\Program Files\Java\jdk1.6.0_26\lib
" and is correctly set in the JAVA_HOME
environment variable but the maven is still looking in jre folder as in error message "C:\Program Files\Java\jre6\lib\tools.jar
".
C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26
Interestingly: when i set the full path in dependency, it worked just fine. But i don't want to hard code it.
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar</systemPath>
</dependency>
Can someone suggest any dynamic solution for this?
It's a bug in the Eclipse Maven support. Eclipse doesn't support all of the global Maven properties as per the Maven specs.
According to the specs:
${java.home} specifies the path to the current JRE_HOME environment use with relative paths to get for example
At least in Eclipse 4.3.1 that is not the case, here java.home
always points to the JRE that was used to launch Eclipse, not the build JRE.
To fix the issue you need to start Eclipse using the JRE from the JDK by adding something like this to eclipse.ini
(before -vmargs
!):
-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll
It seems your JAVA_HOME is set to point to the JRE in eclipse.
You should NEVER use system scope dependencies. All the code in tools.jar will be available just via the running JVM already. You should remove this dependency altogether..
Also in order to check what runtime Maven is using just call
mvn -v
If you are still having a dependency to the tools jar as a problem, one of the dependencies you added has that dependency (and it is really bad quality). To find out which one it is run
mvn dependency:tree
or if that fails just remove one dependency after another until the problems is gone for the command above.
Then, when you know where it comes from you can decide what to do next. One path would be to use an exclusion on the dependency that pull tools in.