Maven 3 Artifact problem
Solution 1
The error you are seeing is probably because you dont have your JAVA_HOME path set up correctly. Are you seeing something like C:\{directories to jre}\..\lib\tools.jar
?
You can have eclipse start up using your built in JDK by altering the eclipse.ini and adding something like
-vm
C:\{directories to JDK}\bin\javaw.exe
What I have learned is that eclipse by default will use your system jre to start eclipse. You probably have seen a message when starting eclipse similar to "Eclipse is running under a JRE and m2eclipse requires a JDK some plugins will not work"
If you go to (in eclipse) Help -> Installation Details and look for a -vm you will probably see it pointing to somewhere that does not have the path structure that it is expecting.
Note: For whatever reason when I encountered this issue java.home in maven was evaluated from where eclipse was launched from. So when it tries to pull the tools.jar from what it sees as java.home it may not be what you actually set as JAVA_HOME as an env/system variable.
Solution 2
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
<exclusions>
<exclusion>
<artifactId>tools</artifactId>
<groupId>com.sun</groupId>
</exclusion>
</exclusions>
</dependency>
Solution 3
Need to add another answer. After upgrading m2e to 1.4.20130601-0317 the error came back. Again, none of the proposed solutions worked including the one I just proposed. Eventually, I found the culprit: including org.htmlparser:1.6
had an implicit dependency on tools.jar
. No idea why deleting the installed jre's helped with the older m2e (1.0.something). Now the solution is to exclude tools.jar
:
<dependency>
<groupId>org.htmlparser</groupId>
<artifactId>htmlparser</artifactId>
<version>1.6</version>
<exclusions>
<exclusion>
<artifactId>tools</artifactId>
<groupId>com.sun</groupId>
</exclusion>
</exclusions>
</dependency>
Solution 4
You can't use tools.jar from a repository.
Sadly, something in your dependency tree thinks that you can. So, you have to use an 'excludes' to get rid of the existing dependency, and then replace it with the following.
If you make the version in the below match that in the error message, you might not need the 'excludes'.
You need:
<profiles>
<profile>
<id>default-tools.jar</id>
<activation>
<property>
<name>java.vendor</name>
<value>Sun Microsystems Inc.</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>whatever</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
Solution 5
Having had the same problem recently none of the above solutions worked for me. I came across http://blog.samratdhillon.com/archives/598 and figured this to be the Eclipse bug mentioned there.
I had to delete all installed jre
's from Eclipse's configuration (Window -> Preferences -> Java -> Installed JREs)
and only keep exactly one jdk. After that maven worked just fine without any modification to eclipse.ini
or anything else. This is with Ecplise Indigo Service Release 1.
![Mark Baijens](https://i.stack.imgur.com/i2GmF.jpg?s=256&g=1)
Mark Baijens
Software developer at Quantore. Working with the RAD framework Outsystems and .NET software. Pretty handy with javascript/jQuery aswell.
Updated on January 22, 2020Comments
-
Mark Baijens over 4 years
I made a new struts project in eclipse using the struts2-archtype-starter.
A few errors where in my project already before doing anything. Solved most of them but there is 1 the still give me some problems.
Missing artifact com.sun:tools:jar:1.5.0:system pom.xml
I tried to add the tools.jar to my repository manually but that didn't solve the issue.
My pom looks like this
<?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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.divespot</groupId> <artifactId>website</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>E-Divespot diving community</name> <url>http://www.e-divespot.com</url> <description>A website to support divers from all around the world.</description> <dependencies> <!-- Junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <!-- Struts 2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.0.11.2</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-sitemesh-plugin</artifactId> <version>2.0.11.2</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.0.11.2</version> </dependency> <!-- Servlet & Jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- Jakarta Commons --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.1.1</version> </dependency> <!-- Dwr --> <dependency> <groupId>uk.ltd.getahead</groupId> <artifactId>dwr</artifactId> <version>1.1-beta-3</version> </dependency> </dependencies> <build> <finalName>website</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.5</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> </plugins> </build> </project>
-
Artem about 13 yearsYou need to also delete the ordinary dependency.
-
jezg1993 about 13 yearsYou want to make sure its placed in the right position before -vmargs and you may need to put quotes around the location (ie Program Files...). I would spend time trying to get this to work because im confident it will resolve your issue.
-
jezg1993 about 13 yearsNo problem! I had to spend some time on this myself to get it to work :)
-
Will over 11 yearsThanks, that saved me some trouble.
-
Viccari over 11 years+1. Saved me some time. Just a quick note: you might need to clean your workspace before the setting actually works.
-
kratenko about 10 yearsHad a similar problem today, after some java update, I think. Changing the eclipse.ini helped, but what I changed was
-Dosgi.requiredJavaVersion=1.6
to-Dosgi.requiredJavaVersion=1.7
-
Ben over 8 yearsI found that it was important to have the property spread over two lines (as in the example above), having declared on a single line caused Eclipse to ignore the setting.