классы компиляции javac, исключенные с атрибутом "exclude" - PullRequest
0 голосов
/ 12 марта 2019

У меня есть большой 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/**"), файлы mailslot не скомпилируются, а файлы mgm есть (и являютсяконечно, дает мне ошибки, потому что некоторые из его зависимостей отсутствуют в classpath).

Я что-то упустил очевидное?Во всех связанных с этим вопросах я игнорировал один шаблон (который выглядит так, будто он работает, но это не то, что я хочу).

Я должен добавить, что добавление <exclude> вложенных элементов в <javac> будет затруднительным, так какмакрос dojar является общим.Вписать все в атрибут excludes было то, что мне было нужно.

...