【问题标题】:resolving tools.jar in ivy在 ivy 中解析 tools.jar
【发布时间】:2012-01-11 02:05:26
【问题描述】:

我有一个项目使用 ivy 来管理其依赖项。我正在为项目实现一项功能,该功能需要我包含 tools.jar。但是,由于 tools.jar 依赖于平台,我正在尝试使用 ivy 来解析工件的本地文件。我正在做以下事情:

<dependency org="com.sun" names="tools" rev="1.6.0">
  <artifact name="tools" type="jar" url="file:///${java.home}/../lib/tools.jar"/>
</dependency>

应该从本地 ${java.home}/../lib/tools.jar 检索文件。 (注意:java.home 指向 JRE 安装)。

但是,解决该位置存在问题。在我的 Windows 机器上,似乎认为“c”是协议(c 来自 ${java.home}。我确定我的 url 定义正确,因为“file:///C:/foo”是指定文件 url 的正确方法(3 个斜杠)。我看到的问题是它去掉了 2 个斜杠并尝试“file:/C:...”而不是“file:///C:”。 ." 正如我在上面指定的。我还尝试直接指定文件的路径而不使用 ${java.home}

我想继续通过 ivy 检索这种方法,但我无法让它发挥作用。有什么想法吗?

【问题讨论】:

  • 请注意,Ivy XML 摘录有一个错字——属性“names”应该是“name”。

标签: java ant ivy artifact tools.jar


【解决方案1】:

JAVA_HOME 需要指向您的 JDK 的位置,而不是您的 JRE。更改此设置后,ANT 将停止抱怨缺少工具 jar。

看你上面提供的路径,我怀疑你已经安装了JDK....

分析

在我的系统上,工具 jar 位于此处:

$ find $JAVA_HOME -name tools.jar
/usr/lib/jvm/java-6-openjdk/lib/tools.jar

奇怪且令人困惑的是,Java JDK 内部附带了一个 JRE

$ find $JAVA_HOME -name java
/usr/lib/jvm/java-6-openjdk/bin/java
/usr/lib/jvm/java-6-openjdk/jre/bin/java

【讨论】:

  • 如果 java.home 指向 jdk,则 /../ 部分是错误的。 lib/直接在java.home下:file:///${java.home}/lib/tools.jar
  • 问题是找不到文件,是协议不正确。我已经正确设置了所有内容,并且它打印出来的文件路径是正确的。
  • 另一方面,在某些系统中,JAVA_HOME 将指向 JRE 而不是 JDK 安装。只要您的系统与您计划使用它们的方式保持一致。在我们的例子中,我设置它的方式与我们的系统是一致的。
  • ANT 安装文档建议将 JAVA_HOME 指向 JDK,因为某些任务需要工具 jar。 ant.apache.org/manual/install.html
  • 所以看起来即使我也很困惑。我研究了一下,JAVA_HOME是一个环境变量,java.home是java设置的系统属性。 JAVA_HOME 应该指向 JDK,但 java.home 是指向 JRE 安装的 java 属性。我的 JAVA_HOME 指向我的 JDK,而 java.home 指向我在 JAVA_HOME 下的 JRE 文件夹。如果您搜索“JAVA_HOME vs java.home”,它应该会显示我查看的一些页面。
【解决方案2】:

我能够使用专用的解析器让它工作

ivysettings.xml

<resolvers>
  <!-- your other resolvers here -->
  <filesystem name="JDK" local="true">
    <artifact pattern="${java.home}/lib/[artifact].[type]" />
    <artifact pattern="${java.home}/../lib/[artifact].[type]" />
    <!-- You can add more patterns to fit your needs for MacOSX etc -->
  </filesystem>
</resolvers>
<modules>
  <module organisation="com.sun" name="tools" resolver="JDK"/>
</modules>

ivy.xml

<dependency org="com.sun" name="tools"/>

为我工作...

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2011-05-14
    • 2012-05-13
    • 2010-12-07
    • 2016-05-14
    • 2012-02-10
    • 1970-01-01
    • 2014-10-15
    • 2013-03-31
    相关资源
    最近更新 更多