忽略ant中的系统环境变量



我在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环境变量,一切都会正常工作。怎么了?

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

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

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

类似地,当运行java程序时,设置fork属性,使其在另一个VM中运行:

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

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

IMO的主要问题是首先使用CLASSPATH环境变量。我发现在使用Java时,最好总是使用-cp或-jar选项,而不依赖于系统CLASSPATH。一旦有两个Java程序都依赖于系统CLASSPATH,这两个程序的依赖关系就有冲突的风险。

相关内容

  • 没有找到相关文章