我有一个很大的Ant文件,其中包含一个宏,将我的项目编译到jar中(Eclipse嵌入的Ant版本1.10.5)。
我添加了从excludes
任务中排除具有<javac>
属性的源代码中某些部分的可能性,但似乎给了我确实被排除的文件编译错误(根据我的推断来自[javac]
输出)。
以下是build.xml
的摘录:
<macrodef name="dojar">
<attribute name="tgt" />
<attribute name="excl" default="" />
<sequential>
...
<javac source="1.7" target="1.7" encoding="UTF8" includeantruntime="no" debug="true" debuglevel="lines,source" optimize="no"
srcdir="/home/matthieu/Eclipse_ws/@{tgt}/src" destdir="/home/matthieu/Eclipse_ws/@{tgt}/bin.javac" classpathref="projects.classpath"
excludes="@{excl}">
...
</sequential>
</macrodef>
通过目标调用:
<target name="MyProject">
<dojar tgt="MyProject" excl="**/mailslot/**,**/mgm/**" />
</target>
给我下面的输出
[javac] Compiling 19 source files to /home/matthieu/Eclipse_ws/MyProject/bin.javac
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
[javac] /home/matthieu/Eclipse_ws/MyProject/src/com/comp/mailslot/MailslotServer.java:3: error: package com.sun.jna.ptr does not exist
...
[javac] /home/matthieu/Eclipse_ws/MyProject/src/com/comp/sys/comm/mgm/ControleurMGM.java:9: error: package com.comp.plc.mgm does not exist
[javac] import com.comp.plc.mgm.ConnexionMgm;
第Compiling 19 source files to ...
行告诉我javac确实理解它不应 编译它们:
~/Eclipse_ws/MyProject/src$ find . -name '*.java' | wc -l
41
~/Eclipse_ws/MyProject/src$ find . -name '*.java' | grep -v /mailslot/ | grep -v /mgm/ | wc -l
19
但是,它仍然尝试编译com/comp/mailslot/MailslotServer.java
和com/comp/sys/comm/mgm/ControleurMGM.java
模式明确排除的文件**/mailslot/**
和**/mgm/**
。
现在,如果我在excludes
属性(excludes="**/mailslot/**"
中包含 single 模式,则mailslot
文件不会被编译,但是{{1} }是(当然会给我带来错误,因为在类路径中缺少某些依赖项)。
我想念任何明显的东西吗?我发现的所有相关问题都忽略了一个单一的模式(看起来它正在运行,但不是我想要的)。
我必须添加将mgm
嵌套元素添加到<exclude>
会很困难,因为<javac>
宏是通用的。我需要将所有内容都放在dojar
属性中。