我在使用 Eclipse 中的 ANT 编辑器时遇到了一些麻烦(真的很烦人),它在以下 block 上向我显示警告“未找到引用构建.classpath。”:
<target name="generate" depends="..., mvn-depends">
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath refid="build.classpath" />
</taskdef>
...
</target>
mvn-depends
目标如下所示:
<target name="mvn-depends">
<artifact:dependencies pathId="build.classpath">
<pom refid="my.pom" />
</artifact:dependencies>
</target>
构建文件中对 build.classpath
的其余引用没有抛出任何警告,并且构建运行正常,没有任何错误,因此看起来并没有太多意义。
不过,每次我必须编辑该文件时,忽略警告会让我感到有点不自在。具体来说,不知道这是 Eclipse Ant 构建文件验证代码中的错误,还是 Eclipse 已识别的构建文件结构方式中的潜在问题。
如果有人对显示此警告的原因以及忽略甚至禁用首选项是否安全并且愿意分享这些知识有任何想法,我将不胜感激。
编辑:
根据要求,这是一个引用 build.classpath
的示例,它不会导致任何警告:
<javac deprecation="off" debug="on" source="1.7" target="1.7" encoding="UTF-8"
includeantruntime="false" memoryMaximumSize="512M" fork="true">
<classpath refid="build.classpath" />
</javac>
最佳答案
由于编辑器可以识别Ant指定的refids和其他元素,我猜编辑器做了一些类似于Ant的构建文件解析过程。
也就是说,将这个ant构建文件解析成一个Project
对象,以及 <taskdef>
中的引用可以检查,而 <javac>
可能不会。
因为 build.classpath 是在运行时设置的,而且它是由不同于 <classpath>
之类的东西设置的, Eclipse 可能找不到它。
我没有强有力的证据证明这一点。但是可以做一些事情让我们了解更多。
首先,复制
<javac>
到警告的同一目标<taskdef>
存在,看看是否<javac>
收到警告;然后,复制
<taskdef>
到 presetdefed 的同一目标<javac>
存在,看看是否<taskdef>
仍然收到警告;第三,在目标“生成”中,注释掉
<taskdef>
部分,和 检查<xjc ... />
调用会收到警告。
对于第一个,我期望“否”,而对于其他两个,我期望"is"。否则,我的猜测是错误的。
这只是一个警告是有道理的——Eclipse 在编辑时找不到的东西在运行时可能存在。
关于java - 为什么 Eclipse Ant 编辑器会警告我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15380269/