我使用struts2-archtype-starter在eclipse中创建了一个新的struts项目。
我的项目在做任何事之前已经出现了一些错误。解决了大部分问题,但仍有1个仍然给我一些问题。
Missing artifact com.sun:tools:jar:1.5.0:system pom.xml
我尝试手动将tools.jar添加到我的存储库,但这并没有解决问题。
我的pom看起来像这样
<?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>
答案 0 :(得分:45)
您看到的错误可能是因为您没有正确设置JAVA_HOME路径。您是否看到类似C:\{directories to jre}\..\lib\tools.jar
的内容?
您可以通过更改eclipse.ini并添加类似
之类的东西,使用内置的JDK启动eclipse-vm
C:\{directories to JDK}\bin\javaw.exe
我学到的是默认情况下eclipse将使用你的系统jre来启动eclipse。您可能在启动eclipse时看到了一条消息,类似于“Eclipse在JRE下运行而m2eclipse需要JDK,某些插件无法正常工作”
如果你去(在eclipse中)帮助 - &gt;安装详细信息并查找-vm,您可能会看到它指向某个没有预期路径结构的地方。
注意:出于任何原因,当我遇到此问题时,maven中的java.home是从发布eclipse的位置进行评估的。因此,当它试图将tools.jar从它看作java.home时拉出来时,它实际上可能不是你实际设置为env / system变量的JAVA_HOME。
答案 1 :(得分:10)
<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>
答案 2 :(得分:3)
您不能使用存储库中的tools.jar。
可悲的是,你的依赖树中的某些东西认为你可以。因此,您必须使用“排除”来摆脱现有的依赖关系,然后将其替换为以下内容。
如果你使下面的版本与错误信息中的版本匹配,你可能不需要'排除'。
你需要:
<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>
答案 3 :(得分:2)
需要添加另一个答案。将m2e升级到1.4.20130601-0317之后,错误又回来了。同样,所提议的解决方案都没有工作,包括我刚刚提出的解决方案。最终,我找到了罪魁祸首:包括org.htmlparser:1.6
在tools.jar
上隐含了依赖关系。不知道为什么删除已安装的jre有助于使用较旧的m2e(1.0.something)。现在解决方案是排除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>
答案 4 :(得分:1)
最近遇到了同样的问题以上解决方案都没有对我有用。我遇到http://blog.samratdhillon.com/archives/598并认为这是Eclipse bug在那里提到的。
我必须从Eclipse的配置jre
中删除所有已安装的(Window -> Preferences -> Java -> Installed JREs)
,并且只保留一个jdk。之后,maven工作得很好,没有对eclipse.ini
或其他任何内容进行任何修改。这是Ecplise Indigo Service Release 1。
答案 5 :(得分:0)
eclipse.ini的例子:
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
C:\Java\JDK\1.6\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx1024m
-vm值:Linux示例:
-vm
/opt/sun-jdk-1.6.0.02/bin/java
答案 6 :(得分:0)
令人困惑的是, $ {java.home} 属性实际上将从 JRE_HOME 环境变量中解析其值。
http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide(搜索java.home)
如果您不想将 JAVA_HOME 更改为jre root,请改为创建 JRE_HOME 变量。
答案 7 :(得分:0)
主要问题是 mavan 无法修复tool.jar。所以出现这个问题
你只需在你的项目中添加tool.jar文件。你的java软件中存在 Tool.jar C:\ Program Files \ Java \ jdk1.6.0_14 \ lib
试试这个代码我希望你成功运行
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
Strust2Testing
Strust2Testing
0.0.1-SNAPSHOT
战争
org.apache.struts
<artifactId>Struts2-core </artifactId>
<version>2.3.15.1</version>
<exclusions>
<exclusion>
<artifactId>tools</artifactId>
<groupId>com.sun</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
答案 8 :(得分:-1)
sudo apt-get install openjdk-7-source