忽略ant中的系统环境变量

时间:2012-01-17 19:09:35

标签: bash shell ant build classpath

我在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>

如果在调用ant之前取消设置$CLASSPATH环境变量,一切正常。有什么问题?

2 个答案:

答案 0 :(得分:2)

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

为了正确隔离您的java版本,我建议在javac任务上设置以下属性:

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

类似地,在运行java程序时,设置fork属性以便它在另一个VM中运行:

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

答案 1 :(得分:1)

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

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