У меня есть большой 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
было то, что мне было нужно.