4

我在 Eclipse 中使用 ANT 编辑器时遇到了一些麻烦(真的很烦人),它向我显示警告“未找到参考 build.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>
4

2 回答 2

1

由于编辑器可以识别 refid 和 Ant 指定的其他元素,因此我猜想编辑器执行的操作类似于 Ant 的构建文件解析过程。

也就是说,把这个ant构建文件解析成一个Project对象,里面的引用<taskdef>可能会被检查,而<javac>可能不会。

由于 build.classpath 是在运行时设置的,并且它是由其他东西设置的<classpath>,所以 Eclipse 可能找不到它。

我没有强有力的证据证明这一点。但是可以做一些事情来让我们知道更多。

  • 首先,将 复制<javac>到存在警告的同一目标 <taskdef>,以查看是否<javac>收到警告;

  • 然后,将 复制<taskdef>到presetdefed 所在的同一个目标上 <javac>,看看是否<taskdef>仍然得到警告;

  • 第三,在目标“生成”中,注释掉该<taskdef>部分,并检查<xjc ... />调用是否收到警告。

对于第一个,我期待“NO”,而对于其他两个,我期待“YES”。否则,我的猜测是错误的。

并且它只是一个警告是有道理的——Eclipse 在编辑时找不到的东西可能在运行时存在。

于 2013-03-13T10:18:16.927 回答
0

确保您已正确指定路径元素位置,如下所示。

<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

请查看以下链接以获取更多信息
点击这里

于 2013-03-13T08:43:05.780 回答