我有一个使用常春藤管理其依赖项的项目。我正在为项目实现一个要求我包含tools.jar的功能。但是,因为tools.jar是依赖于平台的,所以我试图使用常春藤来解析工件的本地文件。我正在做以下事情:
<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} 指定文件的路径我想保持这种方法通过常春藤检索,但我不能让它工作。任何想法?
答案 0 :(得分:4)
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
答案 1 :(得分:1)
我能够使用专用的解析器
来实现这一点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"/>
适合我...