用“ excludes”属性排除的javac编译类

时间:2019-03-12 17:00:30

标签: java ant javac exclusionpath

我有一个很大的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.javacom/comp/sys/comm/mgm/ControleurMGM.java模式明确排除的文件**/mailslot/****/mgm/**

现在,如果我在excludes属性(excludes="**/mailslot/**"中包含 single 模式,则mailslot文件不会被编译,但是{{1} }是(当然会给我带来错误,因为在类路径中缺少某些依赖项)。

我想念任何明显的东西吗?我发现的所有相关问题都忽略了一个单一的模式(看起来它正在运行,但不是我想要的)。

我必须添加将mgm嵌套元素添加到<exclude>会很困难,因为<javac>宏是通用的。我需要将所有内容都放在dojar属性中。

0 个答案:

没有答案