2012-01-17 14 views
1

ビルド中にシステムクラスパスを無視するようにantのbuild.xmlスクリプトでこのプロパティを設定しましたが、antはまだ私のJava呼び出しでシステムクラスパスを取得し、ビルドスクリプト。antでシステム環境変数を無視する

<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 envirmoent変数の設定を解除した場合。何が問題なの?

答えて

2

ANTはそれ自体Javaプログラムなので、タスクが同じシステムクラスパスを使用するのを防ぐことは困難です。

正しくJavaのビルドを単離するために、私はjavacタスクに次の属性を設定することをお勧めしたい:

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

と似て、javaプログラムを実行するときに、それは別のVMで実行されるように、フォークの属性を設定します:

<java ...fork="true" classpathref="class.path.that.i.control"... 
+0

「fork = true」は私のためのトリックでした!ありがとう。 – multiholle

1

このプロパティAFAIKは、(ant -Dbuild.sysclasspath=ignoreを使用して)antに渡す必要があるシステムプロパティです。しかし、CLASSPATHの設定を解除するのはおそらく簡単です。

メインプロブラムIMOは、最初にCLASSPATH環境変数を使用することです。私は、Javaを使用して常に-cpまたは-jarオプションを使用し、システムのCLASSPATHに依存しないことをお勧めします。両方ともシステムのCLASSPATHに依存する2つのJavaプログラムがあるとすぐに、これら2つのプログラムの依存関係の間に衝突の危険があります。

関連する問題