下面是解决这个问题的示例ant文件。
Target "test1"使用antcall从"test"调用。现在,当我有一些具有相同完全限定类名的类时,我希望首先加载来自test1.jar的类,但看起来test1.jar被附加到类路径中,因此选择来自test.jar的类。
是否有办法重置/清除目标test1的类路径,或者将test1.jar添加到类路径中,以便从中加载类。
<project name="TestProj" basedir=".">
<target name="test">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<fileset dir="C:/bb/" includes="test.jar"/>
</classpath>
</java>
</presetdef>
<antcall target="test1"/>
</target>
<target name="test1">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path location="c:/test1.jar"/>
</classpath>
<jvmarg line="-Xms64m -Xmx512m"/>
<jvmarg line="-Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true"/>
</java>
</presetdef>
</target>
</project>
尝试如下:
<path id="test.classpath">
<fileset dir="C:/bb/" includes="test.jar"/>
<path refid="compile.classpath"/>
</path>
<path id="test1.classpath">
<pathelement location="c:/test1.jar"/>
</path>
<project name="TestProj" basedir=".">
<target name="test">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path refid="test.classpath"/>
</classpath>
</java>
</presetdef>
<antcall target="test1"/>
</target>
<target name="test1">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path refid="test1.classpath"/>
</classpath>
<jvmarg line="-Xms64m -Xmx512m"/>
<jvmarg line="-Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true"/>
</java>
</presetdef>
</target>