ANT Java Target模拟Java命令失败:找不到指定主类
问题原因与解决方案
核心问题
你混淆了Ant脚本中classpath路径的基准目录:
Ant的<java>任务里,classpath的路径默认是**基于build.xml所在的项目根目录(basedir)**解析的,而不是dir属性指定的工作目录。但你的原Java命令是先切换到../Reinforcement Learning Task Generator目录,再使用相对该目录的classpath路径,两者的路径解析逻辑完全不一致,导致Ant找不到主类的class文件。
修正后的Ant脚本
方案一:使用classpath子元素(推荐,可读性更强)
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project name="Builds" default="generate_rl"> <target name="generate_rl"> <java classname="edu.uky.ai.rl.Generate" dir="../Reinforcement Learning Task Generator" fork="true" > <classpath> <!-- 对应原命令中cd后的bin目录,基于build.xml所在目录解析 --> <pathelement location="../Reinforcement Learning Task Generator/bin"/> <!-- 对应原命令中的../Utilities/bin --> <pathelement location="../Utilities/bin"/> <!-- 对应原命令中的../Reinforcement Learning/bin --> <pathelement location="../Reinforcement Learning/bin"/> </classpath> </java> </target> </project>
方案二:直接指定classpath属性
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project name="Builds" default="generate_rl"> <target name="generate_rl"> <java classname="edu.uky.ai.rl.Generate" dir="../Reinforcement Learning Task Generator" classpath="../Reinforcement Learning Task Generator/bin;../Utilities/bin;../Reinforcement Learning/bin" fork="true" > </java> </target> </project>
验证方法
如果想确认classpath是否正确,可以在<java>任务前添加<echo>输出实际路径:
<target name="generate_rl"> <path id="rl-classpath"> <pathelement location="../Reinforcement Learning Task Generator/bin"/> <pathelement location="../Utilities/bin"/> <pathelement location="../Reinforcement Learning/bin"/> </path> <echo message="实际Classpath: ${toString:rl-classpath}"/> <java classname="edu.uky.ai.rl.Generate" dir="../Reinforcement Learning Task Generator" fork="true" classpathref="rl-classpath" > </java> </target>
内容的提问来源于stack exchange,提问作者Stephen Ware
相关产品推荐
相关产品推荐

