Игнорирование системных переменных среды в ant - PullRequest
1 голос
/ 17 января 2012

Я установил это свойство в своем скрипте build.xml для ant, чтобы игнорировать системный путь к классу во время сборки, но ant все еще выбирает системный путь к классу в моем вызове java и объединяет его с моим classpath, указанным в сценарии сборки.

<property name="build.sysclasspath" value="ignore" />

<path id="classpath">
    <pathelement path="${buildDir}/classes" />
    <fileset dir="${prjdir}">
        <include name="lib/*.jar"/>
    </fileset>
</path>

<java classname="com.ibm.biginsights.fs.gpfs.LoggingInjector" failonerror="true">
    <classpath refid="classpath" />
</java>

Если я переустановил переменную окружения $CLASSPATH перед вызовом ant, все работает нормально.В чем проблема?

Ответы [ 2 ]

2 голосов
/ 18 января 2012

ANT сама по себе является java-программой, поэтому трудно запретить задачам использовать тот же системный путь к классам.

Чтобы правильно изолировать вашу сборку Java, я бы рекомендовал установить следующие атрибуты для задачи javac :

<javac .... includeAntRuntime="false" includeAntRuntime="false" ...

Аналогично, при запуске java программ установите атрибут fork так, чтобы он работал на другой виртуальной машине:

<java  ...fork="true" classpathref="class.path.that.i.control"...
1 голос
/ 17 января 2012

Это свойство, AFAIK, является системным свойством, которое нужно передать в ant (используя ant -Dbuild.sysclasspath=ignore). Но сбросить CLASSPATH, вероятно, так же просто.

Основной проблемой, IMO, является использование переменной окружения CLASSPATH. Я считаю предпочтительным всегда использовать опцию -cp или -jar при использовании Java, а не полагаться на систему CLASSPATH. Как только у вас есть две Java-программы, которые обе используют систему CLASSPATH, возникает риск конфликта между зависимостями этих двух программ.

...