35

我在 windows 环境下使用 maven 编译我的项目。虽然我刚刚创建了项目并添加了各种库的依赖项。

当我添加它们时,maven 开始抱怨缺少tools.jar,所以我在下面添加了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>

当我运行 maven 安装时,我收到了缺少 jar 的错误,如下所示:

[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]

问题是tools.jar在“ C:\Program Files\Java\jdk1.6.0_26\lib”中并且在环境变量中正确设置JAVA_HOME但maven仍在jre文件夹中查找错误消息“ C:\Program Files\Java\jre6\lib\tools.jar”。

C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

有趣的是:当我设置依赖的完整路径时,它工作得很好。但我不想硬编码。

<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>

有人可以为此提出任何动态解决方案吗?

4

9 回答 9

39

这是 Eclipse Maven 支持中的一个错误。根据Maven 规范,Eclipse 不支持所有全局 Maven 属性。

根据规格:

${java.home} 指定当前 JRE_HOME 环境的路径,使用相对路径来获取例如

至少在 Eclipse 4.3.1 中并非如此,这里java.home总是指向用于启动 Eclipse 的 JRE,而不是构建 JRE。

要解决此问题,您需要使用 JDK 中的 JRE 启动 Eclipse,方法是在eclipse.ini之前 -vmargs!)中添加如下内容:

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll
于 2014-04-17T09:18:08.050 回答
2

看来您的 JAVA_HOME 设置为指向 Eclipse 中的 JRE。

于 2012-11-08T12:45:10.327 回答
2

您永远不应该使用系统范围依赖项。tools.jar 中的所有代码都可以通过正在运行的 JVM 获得。您应该完全删除此依赖项..

此外,为了检查 Maven 正在使用什么运行时,只需调用

mvn -v

如果您仍然对工具 jar 的依赖存在问题,则您添加的依赖项之一具有该依赖项(而且质量确实很差)。找出它运行的是哪一个

mvn dependency:tree

或者如果失败,只需删除一个又一个依赖项,直到上述命令的问题消失。

然后,当您知道它来自哪里时,您可以决定下一步该做什么。一种方法是对引入工具的依赖项使用排除项。

于 2012-11-08T18:04:28.107 回答
2

Maven ${java.home} 属性被设置并取自不同的地方,具体取决于您的 Eclipse 执行:

  • 从为工作区选择的默认 JRE

    窗口>首选项>Java>已安装的 JRE

  • 从特定的 Eclipse 项目,

    Java 构建路径>库>JRE 系统库

  • 从运行配置。

    运行配置 > 特定运行配置 > JRE

请记住您的 JRE 主路径指向 JDK 下的 JDK 或 JRE

于 2014-10-21T09:30:51.260 回答
1

添加 JAVA_HOME 环境变量时,如果路径中有空格,则必须将整个内容用引号括起来。

于 2013-02-05T00:08:08.933 回答
1

您可能使用了错误的 Maven 安装。在 Window > Preferences > Maven > Installations 中切换它。我将我的设置为 Fedora Maven 安装;将其更改回默认值(嵌入在 m2e 中的版本)为我解决了这个问题。

我怀疑导致这个问题的原因是 Fedora Maven 安装使用了 Fedora 的 OpenJDK,这可能会将 tools.jar 放在一个奇怪的位置(关于 Fedora 的 OpenJDK 的一切都是奇怪的和非标准的),所以 Maven 找不到它。

于 2017-01-19T23:46:26.410 回答
1

还要查看主目录中的 .mavenrc 文件。这让我措手不及。

我按照建议更改了所有内容,只是发现我的 .mavenrc 文件将 JAVA_HOME 设置为旧版本。

于 2020-01-30T17:18:42.187 回答
0

听起来你在 Eclipse 中运行 Maven。Eclipse 不咨询 JAVA_HOME。

确保已将 Eclipse 首选项中的 JRE 设置为所需的 JDK。

于 2012-11-08T12:34:05.207 回答
0

检查您是否有 .mavenrc 文件,它可能会强制 JAVA_HOME 与环境变量中设置的内容不同。

于 2021-09-16T18:53:01.873 回答