缺少本地存储库中的tools.jar会破坏m2eclipse

时间:2011-03-11 13:56:11

标签: java eclipse maven m2eclipse

我遇到的问题是eclipse无法解决我项目的任何依赖关系。这会导致问题,因为即使依赖关系似乎在编码时工作正常(我得到自动完成),我仍然会得到一个很大的错误列表,指出缺少的工件。

过滤这些时,我发现了以下内容:

  

容器'Maven Dependencies'引用非现有库'/ home /[...]/.m2 / repository / com / sun / tools / 1.5.0 / tools-1.5.0.jar'

似乎这种依赖是由struts2引入的,他们的pom中的配置文件设置如下:

<dependency>
    <groupId>com.sun</groupId>
    <artifactId>tools</artifactId>
    <version>1.5.0</version>
    <scope>system</scope>
    <systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

那个systemPath解析了,所以我没有看到这会导致麻烦的原因。在任何情况下,有没有办法告诉eclipse这个m2eclipse依赖是一个在本地存储库中找不到的系统依赖?

17 个答案:

答案 0 :(得分:24)

我遇到了同样的问题,需要做以下事情

  • eclipse.ini 文件
  • 中添加了 -vm 路径/到/ jdk / bin
  • 清理现有工作区并重新加载项目。

它无缝地为我工作。

值得补充的是,在我的eclipse.ini文件中,我必须在文件顶部添加 -vm ... 行。喜欢

-vm
C:\Program Files\Java\jdk1.6.0_27\bin
... ... ...

确保将-vm选项放在-vmargs之前作为-vmargs直接传递给vm后的所有内容,并选择一个特定的选项取决于-vm选项。

答案 1 :(得分:9)

我遇到了这个问题,但我已经通过以下步骤解决了这个问题:

<强>情况1:

Eclipse默认指向JRE,但eclipse maven插件需要JDK,所以指向JDK

  

窗口 - &gt; Preperences - &gt; Java - &gt;已安装的JRE

将其更改为JDK

按照步骤从JRE更改为JDK

  1. 在Eclipse IDE中,转到:Window ... Preferences ... Installed JREs
  2. 选择默认JRE并单击“编辑”。
  3. 点击Add External Jar
  4. 我在“C:\ Program Files \ Java \ jdk1.6.0_22 \ lib”中找到并添加了tools.jar。
  5. 现在我可以毫无问题地构建我的项目。这是解决这个问题的正确方法吗?

答案 2 :(得分:5)

我遇到了同样的问题 - Eclipse无法找到tools.jar。我发现原因是Eclipse使用的是JRE而不是JDK。您必须向指向JDK bin目录的eclipse.ini添加-vm参数:
...... -vm
path_to_jdk \ bin
...

这应解决问题。

答案 3 :(得分:5)

从struts依赖项中排除工具jar。

<exclusions>
    <exclusion>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
    </exclusion>
</exclusions>

答案 4 :(得分:3)

下载http://repository.ops4j.org/maven2/tools/tools/1.5.0/ 并将jar放入C:\Documents and Settings\Administrador\.m2\repository\com\sun\tools\1.5.0。祝你好运。

答案 5 :(得分:3)

您需要使用JDK安装验证Eclipse是

在Eclipse IDE中转到 Window / Preferences / Java / Installed JREs 指向JDK安装。

例如:C:\Program Files (x86)\Java\jdk1.6.0_37

答案 6 :(得分:2)

我读了这个并尝试了各种各样的事情。对我有用的是:我改变了窗户 - &gt;偏好 - &gt; java - &gt;安装JRE代替JDK。这解决了这个问题。

答案 7 :(得分:1)

在导入Eclipse的每个项目中,Eclipse在文件系统上生成一些文件 - .project,.classpath,文件夹.settings。似乎Eclipse没有正确更新这些。

删除这些并再次导入它们。

显然,如果这是您的第一次导入并且您已经获得了一些问题,则此解决方法将无效。请看这里Maven2: Missing artifact but jars are in place

答案 8 :(得分:1)

<dependency>
   <groupId>com.sun</groupId>
   <artifactId>tools</artifactId>
   <version>1.6.0</version>
   <scope>system</scope>
   <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
 </dependency>

添加此内容。它会起作用。

答案 9 :(得分:1)

我也有类似的问题,并按照以下方式修复。在命令提示符下转到JDK安装路径的lib目录。执行以下命令进行安装以安装tools.jar。

$mvn install:install-file -DgroupId=sun.jdk -DartifactId=tools \
     -Dpackaging=jar -Dversion=1.6 -Dfile=tools.jar

答案 10 :(得分:1)

听起来很奇怪,我只是通过与SVN存储库重新同步来解决这个问题。

问题是,我从另一台PC上获取了整个工作区,所以当我使用m2e插件导入maven项目时,某些依赖项可能无法正确同步。

我发布此信息是为了防止有人对此错误感到绝望并尝试所有可能性。

答案 11 :(得分:0)

我有几次同样的问题,我可以按照两个步骤修复它:

  1. 我将“-vm C:\\ bin”添加到eclipse.ini或我运行eclipse的链接。
  2. 多次遇到这个问题后,我开始怀疑可能会有一些m2eclipse缓存在一段时间后(一天左右)重新加载,所以我尝试了一个奇怪的解决方案:暂时将计算机时间更改为第二天并重新启动Eclipse或关闭/清理项目....它工作!
  3. 我可以成功地多次重复这个过程。

    一个更优雅的解决方案(我还没有机会尝试它),可能是要清除https://stackoverflow.com/a/16444984中提到的m2eclipse缓存。

    希望这对任何人都有帮助。

答案 12 :(得分:0)

我最终找到了导致它的原因。当您使用maven1存储库时,看起来这是m2eclipse中的一个错误。我的pom中仍然有java.net maven1存储库;禁用后一切都恢复正常。追踪是一个非常烦人的问题,因为最终它与查找工具jar无关。

答案 13 :(得分:0)

对于Mac用户

[1]找出您的VM键入的位置      的/ usr /的libexec / JAVA_HOME

[2] vi ./Eclipse.app/Contents/MacOS/eclipse.ini

[3]
     -vm      
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/      
-vmargs      ........      ........

[4]在Eclipse中,更新Maven

[5] Sing All is well :-)

答案 14 :(得分:0)

此依赖项应按预期工作。如果有疑问,请尝试使用Maven的命令行版本,因为Eclipse插件在依赖解析方面非常脆弱。

与Eclipse的其他部分不同,如果POM出现问题,它甚至无法为构建创建部分类路径,因此错误可能是其他错误。

如果所有其他方法都失败了,请尝试install the file进入您的本地存储库,这样您就可以看到下一个错误。

答案 15 :(得分:0)

此问题归因于错误的Java配置。每个IDE都需要完整的JDK包。因为在JDK lib而不是jre lib

中可以使用tools.jar
  1. 转到控制面板,将环境路径变量更改为C:\ Program Files \ Java \ jdk1.8.0_31 \ jre \ bin。

  2. 将JAVA_HOME更改为C:\ Program Files \ Java \ jdk1.8.0_31。

  3. 打开IDE(eclipse或STS)将JRE系统库更改为C:\ Program Files \ Java \ jdk1.8.0_31

然后重新启动IDE。会工作

答案 16 :(得分:0)

对我有用的hacky解决方案:

如果m2e抱怨在Maven缓存中找不到以下jar(您可以在pom文件的错误日志中或“ Java Build Path> Maven Dependencies”列表中找到错误的路径):

${HOME}/.m2/repository/jdk/tools/jdk.tools/1.6/jdk.tools-1.6.pom

然后尝试以下命令(为已安装的JDK输入JAVA_VERSION_HERE,例如jdk1.8.0_191-amd64,然后使用上方.m2/repository/之后的两个路径部分来确定正确的{{1} },并用m2e抱怨的任何版本替换groupId -您安装的JDK是否匹配m2e抱怨的版本可能无关紧要):

1.6

此命令从您的JDK复制mvn install:install-file -Dfile=/usr/java/JAVA_VERSION_HERE/lib/tools.jar \ -DgroupId=jdk.tools -DartifactId=jdk.tools -Dpackaging=jar -Dversion=1.6 并将其放入Maven缓存,并为其创建一个tools.jar文件,以便Maven可以使用它。