Добавление в Java разрывов путей к классам - PullRequest
1 голос
/ 14 июля 2011

Я хотел иметь определенный JAR в моем classpath для легкого доступа с REPL Jython.Таким образом, в моем .bashrc я положил:

export CLASSPATH=:/home/tmacdonald/path/to/jar/thing.jar

Однако, это нарушает муравей для компиляции того, что JAR может компилировать JAR из другого подпакета:

$ ant jar
Invalid implementation version between Ant core and Ant optional tasks.
 core    : 1.8.0 in file:/usr/share/ant/lib/ant.jar
 optional: 1.5.1 in file:/home/tmacdonald/path/to/jar/lib/gt2-2.3.3/ant-optional-1.5.1.jar
$ echo $CLASSPATH
:/home/tmacdonald/path/to/jar/thing.jar

Изменение пути к классам исправляет это:

$ export CLASSPATH=
$ !ec
echo $CLASSPATH

$ ant jar
[Compiles successfully.]

Но кажется неловким, и не то, что мне нужно постоянно менять мой путь к классу, в зависимости от того, хочу ли я запустить ant или JYthon REPL.Я признаю, что мои знания как муравья, так и пути к классам довольно слабые.Я просто думаю о classpath как о «PATH для библиотек Java; или PYTHONPATH для Java», и я только когда-либо добавляю небольшие изменения в существующие файлы конфигурации Ant, которые я унаследовал - мне никогда не приходилось их настраивать.

Так что мне было бы интересно услышать, что на самом деле происходит (и, кстати, как это вызывает мою проблему), чтобы я мог быть немного более образованным, и, конечно, я бы тоже хотел исправить ситуацию.Спасибо!

1 Ответ

2 голосов
/ 14 июля 2011

Я не думаю, что Ant должен знать или заботиться о переменных среды.Правильный способ сделать это - установить CLASSPATH внутри самого Ant build.xml.

Вот производственные и тестовые пути к классам, которые я использую в своих файлах Ant build.xml:

<path id="production.class.path">
    <pathelement location="${production.classes}"/>
    <pathelement location="${production.resources}"/>
    <fileset dir="${production.lib}">
        <include name="**/*.jar"/>
    </fileset>
</path>

<path id="test.class.path">                            
    <path refid="production.class.path"/>
    <pathelement location="${test.classes}"/>
    <pathelement location="${test.resources}"/>
    <fileset dir="${test.lib}">
        <include name="**/*.jar"/>
    </fileset>
</path>

Как видите, нет никаких ссылок на ${classpath}, и не должно быть.

...