【问题标题】:Ignoring system environment variables in ant忽略ant中的系统环境变量
【发布时间】:2012-01-17 19:09:35
【问题描述】:

我在我的 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 环境变量,一切正常。有什么问题?

【问题讨论】:

    标签: bash shell ant build classpath


    【解决方案1】:

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

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

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

    同样,在运行java程序时,设置fork属性,使其在另一个VM中运行:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-02-03
        • 2012-12-03
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 2012-08-09
        • 2012-03-29
        • 1970-01-01
        • 2022-01-03
        相关资源
        最近更新 更多