使用ant的java任务和类路径的ClassNotFoundException

时间:2009-07-15 04:43:45

标签: java ant classpath

我正在尝试在eclipse中编译并运行一个简单的java类。编译任务工作正常,因为我没有指定目标文件夹,所以构建文件与源位于同一目录中。哪个没关系,目前我需要的是学习如何使用main()方法运行该类。

我尝试过使用类的完全限定名(带包名等)和类名,但总是得到java.lang.ClassNotFoundException

    Buildfile: C:\Users....\build.xml
    run:
         [java] java.lang.NoClassDefFoundError: code/control/MyClass
         [java] Caused by: java.lang.ClassNotFoundException: code.control.MyClass
         [java]     at java.net.URLClassLoader$1.run(Unknown Source)
         [java]     at java.security.AccessController.doPrivileged(Native Method)
         [java]     at java.net.URLClassLoader.findClass(Unknown Source)
         [java]     at java.lang.ClassLoader.loadClass(Unknown Source)
         [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
         [java]     at java.lang.ClassLoader.loadClass(Unknown Source)
         [java]     at java.lang.ClassLoader.loadClassInternal(Unknown Source)
         [java] Could not find the main class: code.control.MyClass.  Program will exit.
         [java] Exception in thread "main" 
         [java] Java Result: 1
    compile:
    default:
    BUILD SUCCESSFUL
 Total time: 234 milliseconds

下面是我的build.xml文件中的目标:

<target name="default" depends="compile" description="learn">

</target>

  <target name="compile" depends="run">
            <javac srcdir="src/" />
   </target>

  <target name="run">
  <java classname="code.control.MyClass" fork="true"/>
</target>

我无法弄清楚为什么找不到这门课。 MyClass包含main()方法,因为我没有指定类路径,所以它应该查看当前目录,即src / right?

开发目录是通常的eclipse文件结构:

PROJECTNAME / SRC /代码/控制/ MyClass的

如果是类路径问题,我该如何解决?我总是有把握“把它放在你的类路径上”这个概念的问题......如果有人能在蚂蚁语境中对类路径做一点解释,我会非常感激。

感谢您提供任何帮助。 ant的版本是1.7.0

3 个答案:

答案 0 :(得分:8)

classpath是Java运行时查找.class文件的位置,类似于操作系统使用PATH变量查找可执行文件的方式。

在构建脚本中尝试此操作:

   <target name="run">
    <java fork="true" classname="code.control.MyClass">
        <classpath>
            <path location="src/"/>
        </classpath>
    </java>

有一个HelloWorld version for ant用于构建一个带有ant的Java程序。

答案 1 :(得分:4)

你应该包括类路径,例如

<java classpath="${bin}" classname="code.control.MyClass">

其中$ {bin}是您的输出文件夹。

答案 2 :(得分:1)

如下所示更改build.xml并尝试:

<target name="default" depends="run" description="learn">

</target>

  <target name="compile" >
            <javac srcdir="src/" />
   </target>

  <target name="run" depends="compile">
  <java classname="code.control.MyClass" fork="true"/>
</target>