Я хочу, чтобы задача javac использовала jar-файлы из системного пути к классам, под которым я подразумеваю путь к классам, установленный в среде оболочки перед запуском ant. В моей системе этот путь к классам
CLASSPATH=D:\local\lib\java\*;.;C:\lib\java\*;C:\lib\java\db\*
. У меня там есть популярные баночки, которые используются во многих проектах. Базовый фрагмент, который я использую в файле сборки, -
<target name="build">
<mkdir dir="${obj}" />
<javac srcdir="${src}" destdir="${obj}"
includes="**/*.java"
excludes="**/package-info.java **/deprecated/*.java"
includeAntRuntime="no" debug="true" debuglevel="source,lines"
>
<compilerarg value="-Xlint"/>
</javac>
</target>
Таким образом, ant передает только выходной каталог как путь к классам.
[javac] '-classpath'
[javac] 'D:\dev\tbull-projects\jsonc\obj'
(jsonc - это проект, над которым я работаю, а D: \ dev \ tbull-projects \ jsonc
- это рабочий каталог.)
Некоторое время я просматривал документацию и сделал две попытки. Первым было добавление атрибута classpath = "$ {java.class.path}"
к тегу javac. Это передаст компилятору чрезвычайно длинный путь к классам, в котором будут перечислены все файлы jar из собственного каталога lib и, наконец, tools.jar из JDK. Не тот путь к классам, который мне нужен.
Второй выстрел - установка
<property name="build.sysclasspath" value="first" />
до вызова javac, и это привело меня в правильное направление. Теперь эти строки были среди вывода:
dropping D:\dev\tbull-projects\jsonc\D:\local\lib\java\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\lib\java\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\lib\java\db\* from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\Program Files\Java\jdk1.6.0_18\jre\lib\sunrsasign.jar from path as it doesn't exist
dropping D:\dev\tbull-projects\jsonc\C:\Program Files\Java\jdk1.6.0_18\jre\classes from path as it doesn't exist
Что ж, вы можете представить, что этих путей на самом деле не существует. Я просто не понимаю, почему муравей построил их таким образом. Он бы знал, как выполнять арифметику пути в Windows, не так ли?
Может быть, мой подход ошибочен более фундаментально, поэтому я дам вам знать, что мне на самом деле нужно. Итак, я разрабатываю этот проект (библиотеку), который использует другую библиотеку. Проект будет с открытым исходным кодом, поэтому я хочу, чтобы другие разработчики могли собрать его после того, как они загрузили библиотеку зависимостей и поместили ее где-нибудь в их путь к классам.
Из того, что я видел в других вопросах Что касается ant + classpath, похоже, что это особый способ распространять библиотеки зависимостей с исходным кодом (так что путь к классам может быть таким же, как ./libs). Но я определенно не хочу, чтобы в моем репозитории git были банки. Итак, как это можно сделать?