解析ivy中的tools.jar



我有一个使用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检索的方法,但我无法使它发挥作用。有什么想法吗?

JAVA_HOME需要指向JDK的位置,而不是JRE的位置。一旦你改变了这一点,ANT将不再抱怨缺少工具罐。

从上面提供的路径来看,我怀疑您已经安装了JDK。。。。

分析

在我的系统中,工具罐子位于此处:

$ 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

我能够使用专用的解析器来实现这一点

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

适用于我…

相关内容

  • 没有找到相关文章

最新更新