【发布时间】:2016-04-27 07:24:22
【问题描述】:
我对 ant 相当陌生,我不太清楚为什么 运行 ant 时出现以下错误:无法找到目标 java:请将 JAVA_HOME 设置为其位置。我在下面粘贴了相关的源代码。据我所知,目标 -check-langtools.jdk.home 正在执行。但是因为它依赖于-def-check,所以它会被执行。调用 -check-langtools.jdk.home 时,属性(名称、属性、标记)是否被传递到 -def-check 中?如果是这样 - 故障必须发生在未设置属性的情况下(即 isset 必须返回 false)。我不明白如何没有设置属性,如果它能够打印出值(即 JAVA_HOME)。
背景:尝试从 OpenJDK 构建 langtools
<target name="-def-check">
<macrodef name="check">
<attribute name="name"/>
<attribute name="property"/>
<attribute name="marker" default=""/>
<sequential>
<fail message="Cannot locate @{name}: please set @{property} to its location">
<condition>
<not>
<isset property="@{property}"/>
</not>
</condition>
</fail>
<fail message="@{name} is not installed in ${@{property}}">
<condition>
<and>
<not>
<equals arg1="@{marker}" arg2=""/>
</not>
<not>
<available file="${@{property}}/@{marker}"/>
</not>
</and>
</condition>
</fail>
</sequential>
</macrodef>
</target>
<target name="-check-langtools.jdk.home" depends="-def-check">
<!-- <check name="target java" property="langtools.jdk.home" marker="${java.marker}"/> -->
<check name="target java" property="JAVA_HOME" marker="${java.marker}"/>
</target>
<target name="-check-jtreg.home" depends="-def-check">
<check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
</target>
【问题讨论】:
-
取决于意味着
run this before you run me -
那么我的问题是:运行的第一件事(“无法定位@{name}:请将@{property} 设置为其位置”)如何知道运行我的设置.例如找不到目标 java:请将 @{property} 设置为其位置,其中 property = JAVA_HOME
-
isset 正在寻找使用
<property>设置的属性 -
为什么宏在目标???