【问题标题】:ClassNotFoundException with ant's java task and classpathClassNotFoundException 与 ant 的 java 任务和类路径
【发布时间】:2009-07-15 04:43:45
【问题描述】:

我正在尝试在 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/ 对吗?

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

projectName/src/code/control/MyClass

如果是类路径问题,我该如何解决?我一直难以理解“把它放在你的类路径”这个概念......如果有人可以在 ant 上下文中对类路径提供一点解释,我将非常感激。

感谢您对此的任何帮助。蚂蚁的版本是1.7.0

【问题讨论】:

  • 请注意 ClassNotFoundExceptions 和 NoClassDefFoundErrors 不是同义词。
  • 你有没有注意到你的目标“编译”依赖于“运行”?所以 run 会在编译前被调用... fix: (...) (...)

标签: java ant classpath


【解决方案1】:

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 程序。

【讨论】:

  • 感谢赛斯,这很有效。只是想知道类路径,它不是在安装 Eclipse 时自动设置的吗?我知道我可以从命令行的任何目录执行 java -version。我认为这是自动处理的,但是当我需要在类路径上“放置一些东西”时,我该怎么做?希望我不会离题太多。再次感谢
  • 当您使用“java -version”时,即使用 PATH 变量查找 java 可执行文件。如果您需要在类路径上放置一些东西,只需将 .class 文件复制到类路径指定的目录之一即可。如果要复制包中的内容,则需要所有目录。
【解决方案2】:

你应该包括类路径,例如

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

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

【讨论】:

    【解决方案3】:

    如下更改您的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多