Ant Javac and Commandline Javac give different results
我有一个类可以导入一些 servlet 库。当我从命令行编译它时很好。
当我使用 ant compile 任务编译它时,它给出了在其路径中找不到 servlet 库的错误。
这是一个已知/常见的情况吗?
这是我的 Ant 目标:
1 2 3 4
| <target name="compile" depends="prepare" description="compile the source">
<echo>=== COMPILE === SRCDIR: ${src}/com/udfr/src/java </echo> <!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}/com/udfr/src/java" destdir="${dist}/WEB-INF/classes"/>
</target> |
由于某种原因,当您在命令行中编译程序时,包含 Servlet API 的 JAR 文件是类路径的一部分。但是,它不在 javac Ant 任务的类路径中。
您应该明确地将 JAR 文件添加到您的 javac Ant 任务中的类路径中。有几种方法可以做到这一点;请阅读 http://ant.apache.org/manual/Tasks/javac.html
-
实际上,有趣的是我的 CLASSPATH 已设置。我的意思是,Javac 有效。只是不是来自我在乔恩回答后发布的ant任务。
-
@Genadinik 我很确定 CLASSPATH Ant 任务会忽略 CLASSPATH 环境变量,因此这可以解释为什么命令行有效而 Ant 任务无效。请尝试在 javac Ant 任务上指定 CLASSPATH 属性。
-
我不确定——我的猜测是 CLASSPATH 是为特定进程设置的,而运行 ANT(例如 Eclipse)的进程不知道 CLASSPATH。尝试在 Javac 任务本身中设置类路径。
-
是的,很有趣,添加这个有效: \\\\t \\\\tclasspath="/usr/local/tomcat/lib/*:/usr/local/jdk1.6.0_24/j??re/lib/ext/servlet.j ??ar" 但是只添加这个没有:\\\\t \\\\tclasspath="/usr/local/tomcat/lib/*" - 知道为什么更优雅的解决方案在这里不起作用吗?
-
@Genadinik您应该阅读Ant中的路径结构:ant.apache.org/manual/using.html#path
如果您没有在 javac 任务的类路径中正确指定 servlet 库,这是很常见的情况...我怀疑这是问题所在。如果您发布失败的任务和有效的命令行,我们将能够提供更多帮助。
- 这是 ant 任务: \\\\t <target name="compile" depends="prepare" description="compile the source" > \\\\t \\\\t<echo>=== COMPILE == = SRCDIR: ${src}/com/udfr/src/java </echo> \\\\t <!-- 将java代码从${src}编译成${build} --> \\\\t <javac srcdir= "${src}/com/udfr/src/java" destdir="${dist}/WEB-INF/classes"/> \\\\t </target>
-
@Genadinik:基本上,您根本没有指定类路径。