【问题标题】:Missing tools.jar in local repository breaks m2eclipse本地存储库中缺少 tools.jar 会破坏 m2eclipse
【发布时间】:2011-07-13 12:39:07
【问题描述】:

我遇到的问题是 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依赖是本地仓库中找不到的系统依赖?

【问题讨论】:

  • 我在将 Sun JDK 换成 OpenJDK 后遇到了这个问题,忘记更新(和导出!)我的 java.home 变量。
  • 这是一个有趣的答案stackoverflow.com/a/6810275/448078
  • 这也可能发生在 Eclipse 之外(使用 CLI maven)

标签: java eclipse maven m2eclipse


【解决方案1】:

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

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

如果一切都失败了,尝试install the file 进入你的本地存储库,这样你就可以看到下一个错误。

【讨论】:

  • 我忘了提,但像往常一样,从命令行一切正常。最大的问题实际上是它在 eclipse 中引发了 100 个错误,使得问题视图有点难以使用(我正在使用过滤)。我将尝试在我的本地存储库中安装 tools.jar,看看会发生什么。
【解决方案2】:

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

删除这些并再次导入。

显然,如果这是您的第一次导入并且您已经遇到了一些问题,则此解决方法将不起作用。比看看这里Maven2: Missing artifact but jars are in place

【讨论】:

    【解决方案3】:

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

    这应该可以解决问题。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        它无缝地为我工作。

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

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

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

        【讨论】:

        • 您也可以像 Mojtaba stackoverflow.com/a/14100883/896588 的答案一样设置它,甚至应该设置。 eclipse.ini 中的设置仅计入 Eclipse 本身的运行时,并且会被 Installed JREs 对话框中的任何内容覆盖,以覆盖您从 Eclipse 内部运行的任何内容。最安全的做法是两者都做。
        • 我在 Indigo 中做过这个,但我忘记了它,当我升级到 Kepler 时它再次出现。以完全相同的方式再次解决。
        • “在文件顶部添加 -vm ... 行”对我有用
        • 另外,路径必须添加到 javaw.exe。例如:-vm C:/Program Files/Java/jdk1.7.0_21/bin/javaw.exe
        • 对我来说,不需要清理现有的工作区。谢谢!
        【解决方案6】:

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

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

        【讨论】:

        • 有效。在我的项目中,Checkstyle 5.7 包含了对工具的依赖。在我从 Java 7 切换到 Java 8 之前,问题才出现。
        • 您可以让 Eclipse 为您执行此操作,方法是转到 pom 编辑器的“依赖层次结构”选项卡,在过滤器中键入 jdk.tools,右键单击 jar(在“已解决的依赖关系”下)并选择“排除 Maven 工件...”
        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

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

          我发布这个以防万一有人对这个错误感到绝望并尝试所有可能性。

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

              【解决方案10】:

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

              案例1:

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

              Window -> Preperences -> Java -> Installed JREs

              改成JDK

              按照步骤从 JRE 更改为 JDK

              1. 在 Eclipse IDE 中转到:Window…Preferences…Installed JREs
              2. 选择默认的 JRE 并点击编辑。
              3. 点击添加外部Jar
              4. 我在“C:\Program Files\Java\jdk1.6.0_22\lib”中找到了tools.jar并添加了。

              现在我可以毫无问题地构建我的项目了。这是解决此问题的正确方法吗?

              【讨论】:

              • 即使我将 Eclipse 更改为使用 JDK7,仍然出现此错误。所以做了一个windows搜索并在JDK8/lib文件夹中找到了tools.jar的位置->将该jar作为外部jar文件添加到类路径中并且它起作用了!
              【解决方案11】:

              我多次遇到同样的问题,我可以通过以下两个步骤解决它:

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

              我可以成功地重复这个过程几次。

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

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

              【讨论】:

                【解决方案12】:

                我阅读了这篇文章并尝试了各种方法。对我有用的是:我更改了 windows --> 首选项 --> java --> 安装的 JRE 以指向 JDK。这解决了这个问题。

                【讨论】:

                • 这是正确的答案,不需要从maven导入东西
                • 在我的情况下,这已经指向 JDK(我的系统上没有安装 JRE)但仍然发生。
                【解决方案13】:

                我也遇到了类似的问题,并通过以下方式修复了它。在命令提示符下转到 JDK 安装路径的 lib 目录。执行以下命令安装即可安装tools.jar。

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

                【讨论】:

                • 这是链接垃圾邮件以及作为答案。该链接对于如此简短的答案没有用,尤其是您没有链接到相关的博客文章。我已将链接编辑掉。
                【解决方案14】:

                对于 Mac 用户

                [1] 要找出您的虚拟机所在的位置,请输入以下内容 /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] 唱得很好:-)

                【讨论】:

                  【解决方案15】:
                  <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>
                  

                  只需添加这个。它会起作用的。

                  【讨论】:

                    【解决方案16】:

                    这个问题是由于错误的java配置。每个 IDE 都需要完整的 JDK 包。因为在 JDK lib 中提供 tools.jar 而不是 jre lib

                    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。它会工作的

                    【讨论】:

                      【解决方案17】:

                      对我有用的 hacky 解决方案:

                      如果 m2e 抱怨在 Maven 缓存中找不到以下 jar(您可以在 pom 文件的错误日志中找到错误路径,或者在“Java 构建路径 > Maven 依赖项”列表中):

                      ${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/之后的两个路径部分确定正确的groupId,并替换@987654325 @ 与 m2e 抱怨的任何版本 - 您安装的 JDK 是否与 m2e 抱怨的版本匹配可能会或可能不重要):

                      mvn install:install-file -Dfile=/usr/java/JAVA_VERSION_HERE/lib/tools.jar \
                          -DgroupId=jdk.tools -DartifactId=jdk.tools -Dpackaging=jar -Dversion=1.6
                      

                      此命令从您的 JDK 复制 tools.jar 并将其放入 Maven 缓存中,同时为其创建一个 pom.xml 文件以便 Maven 使用它。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-12-29
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-02-18
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多