我在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
环境变量,一切正常。有什么问题?
答案 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,就有可能在这两个程序的依赖关系之间发生冲突。