использовать системный путь к классам для задачи ant javac

Я хочу, чтобы задача 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 были банки. Итак, как это можно сделать?

6
задан T-Bull 6 May 2011 в 22:31
поделиться