我在Eclipse中使用ANT编辑器时遇到了一些麻烦(真的很烦恼),它向我显示警告"参考构建"。找不到类路径。放到下面的代码块上:
<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>
中的引用可能不会被检查。
自构建以来。classpath是在运行时设置的,它是由<classpath>
以外的东西设置的,Eclipse可能找不到它。
我没有强有力的证据。但是我们可以做一些事情来让我们了解更多。
-
首先,将
<javac>
复制到警告所在的相同目标<taskdef>
是否存在,查看<javac>
是否收到警告; -
然后,将
<taskdef>
复制到预设的相同目标<javac>
是否存在,看看<taskdef>
是否仍然得到警告; -
第三,在目标"generate"中,注释掉
<taskdef>
部分,并且检查<xjc ... />
呼叫是否收到警告
对于第一个,我期望"NO",而对于其他两个,我期望"YES"。否则,我猜错了。
它只是一个警告,这是有道理的——Eclipse在编辑时找不到的东西可能在运行时存在。
确保你已经给出了正确的路径元素位置,如下图所示。
<property name="dependencyfinder.home" value="C:/DependencyFinder"/>
<path id="dependencyfinder">
<pathelement location="${dependencyfinder.home}/lib/aaa.jar"/>
</path>
<taskdef classname="com.sun.tools.xjc.XJCTask">
<classpath refid="dependencyfinder"/>
</taskdef>
注意:DependencyFinder有一个lib文件夹,lib文件夹有aaa.jar
请查看下面的链接以获取更多信息
点击这里