Я хочу, чтобы задача javac использовала jars из системного classpath, под которым я подразумеваю classpath, который устанавливается в среде оболочки до запуска 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 передает только выходной каталог как classpath.
[javac] '-classpath'
[javac] 'D:\dev\tbull-projects\jsonc\obj'
(jsonc - проект, над которым я работаю,и D:\dev\tbull-projects\jsonc
- рабочий каталог.) Некоторое время я просматривал документацию и сделал две попытки.Сначала добавляли атрибут classpath="${java.class.path}"
в тег javac.Это передало бы чрезвычайно длинный путь к классу компилятору, перечисляя каждый отдельный jar-файл из собственной директории lib ant и, наконец, 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, не так ли?
Может быть, мой подход более фундаментален, поэтому я дам вам знать, что я на самом деле преследую.Поэтому я занимаюсь разработкой этого проекта (библиотеки), в котором используется другая библиотека.Проект будет с открытым исходным кодом, поэтому я хочу, чтобы другие разработчики могли создавать его после того, как они скачали библиотеку зависимостей и поместили ее где-то в их classpath.
Из того, что я виделв других вопросах, касающихся ant + classpath, кажется, что распространять библиотеки зависимостей с исходным кодом - это обычная мода (поэтому classpath может быть таким же, как ./libs).Но я, конечно же, не хочу, чтобы в моем git-репо были банки.Так как это можно сделать?