在蚂蚁中忽略系统环境变量

问题描述:

我在ant的build.xml脚本中设置了这个属性,以便在构建过程中忽略系统类路径,但ant仍然在我的java调用中选取系统类路径,并将它与我在建立脚本。在蚂蚁中忽略系统环境变量

<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变量之前调用蚂蚁一切工作正常。任何想法是什么问题?

ANT本身就是一个java程序,所以很难阻止任务使用相同的系统类路径。

要正确地隔离您的Java构建,我建议对javac任务设置以下属性:在运行java程序时

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

相若方式,设置叉属性,以便它在另一个虚拟机运行:

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

'fork = true'为我做了诡计!谢谢。 – multiholle 2012-01-17 23:43:46

此属性AFAIK是必须传递给ant的系统属性(使用ant -Dbuild.sysclasspath=ignore)。但是取消设置CLASSPATH可能很简单。

IMO的主要问题是首先使用CLASSPATH环境变量。我发现最好始终使用-q或-jar选项来使用Java,而不要依赖系统CLASSPATH。只要有两个依赖于系统CLASSPATH的Java程序,这两个程序之间的依赖关系就有可能发生冲突。