Скажем, у меня есть мои источники в моем src / дереве (и, возможно, в моем тесте / дереве). Скажем, я хотел бы собрать только часть этого дерева. Причины, почему я мог бы хотеть сделать это, разнообразны. В качестве примера, я мог бы захотеть создать наименьший возможный jar (без включения определенных классов), или мне может потребоваться самое быстрое время компиляции для того, что я компилирую. Я абсолютно хочу скомпилировать все зависимости!
Это может быть легко достигнуто из командной строки с помощью:
javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java
Теперь, как вы можете сделать это с муравьем? Задача javac ant компилирует все :
Исходный и целевой каталог
будет рекурсивно сканироваться на Java
исходные файлы для компиляции.
Можно использовать параметры excludes
и includes
, но они проблематичны для этой цели. На самом деле, кажется, что нужно явно настроить все includes
(не автоматический поиск зависимостей), а даже худший , который исключает , имеет приоритет над включениями :
Когда включены и исключение
используется, только файлы / каталоги, которые
соответствовать хотя бы одному из включаемых
шаблоны и не совпадают любой из
исключить шаблоны используются.
Таким образом, вы не можете использовать
<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
excludes="**/*.java" includes="src/path/to/MyClass.java" />
Потому что он ничего не скомпилирует: - (
Есть ли способ получить эту простую командную строку javac
с помощью ant?
Отредактировано: Спасибо за ваш ответ, Сэди, я принимаю его, потому что он работает так, как мне было интересно в этом вопросе. Но у меня есть пара комментариев (слишком длинная, чтобы быть в поле комментариев вашего ответа):
1) Я прочитал документацию (см. Ссылки выше), но неясно, что, просто includes
вы фактически исключаете все остальное
2) Когда вы просто includes
ant регистрируете что-то вроде
[javac] Compiling 1 source file to /my/path/to/build
, даже если зависимости делают его компиляцией (намного) более чем одного исходного файла.