【发布时间】:2015-02-13 02:24:13
【问题描述】:
我有一个 Main 类,其中包含声明到名为 mainPkg 的包中的 main() 方法。
现在我使用一个 ANT 脚本来执行 Javac 的编译,这个目标:
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<echo>INTO compile TASK</echo>
<echo>BASE DIR: ${basedir}</echo>
<echo>CLASSPATH: ${basedir}\lib\ojdbc6.jar</echo>
<javac srcdir="src/mainPkg/" destdir="build/classes">
<classpath>
<fileset refid="classpath.compile"/>
</classpath>
</javac>
</target>
好的,它会在这个目录(位于项目根目录)内创建编译后的 Main.class 文件:build/classes/mainPkg/(最后一个目录有包名)
好的,现在我的疑问是:为什么如果我进入 build/classes/ 文件夹并在这里执行:
java mainPkg.Main
它有效,事实上我获得了这个输出(在某些时候有一个例外,但这是另一个与我此时要求无关的问题):
C:\Projects\edi-sta\build\classes>java mainPkg.Main
Hello World !!!
0
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at mainPkg.Main.main(Unknown Source)
但是如果我进入 build/classes/mainPkg/ 目录(包)它不起作用并且我得到一个“无法找到或加载主类” strong> 错误信息?
事实:
Directory di C:\Projects\edi-sta\build\classes\mainPkg
12/02/2015 17:39 <DIR> .
12/02/2015 17:39 <DIR> ..
12/02/2015 17:39 1.190 Main.class
1 File 1.190 byte
2 Directory 8.091.906.048 byte disponibili
C:\Projects\edi-sta\build\classes\mainPkg>java Main
Errore: impossibile trovare o caricare la classe principale Main
你能解释一下为什么会这样吗?
Tnx
【问题讨论】:
-
ant 脚本使用编译器类路径中的 odbc jar,但要运行它,您必须自己提供(或将其打包到 jar 中)。
标签: java jakarta-ee ant jvm javac