java.lang.ClassNotFoundException:org.apache.derby.iapi.services.property.PropertyUtil

时间:2013-03-19 07:20:00

标签: java-ee netbeans glassfish derby classnotfoundexception

当我在Netbeans中创建Java Web应用程序并尝试部署并运行它时,会抛出以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/derby/iapi/services/property/PropertyUtil
    at org.apache.derby.impl.drda.NetworkServerControlImpl.getPropertyInfo(Unknown Source)
    at org.apache.derby.impl.drda.NetworkServerControlImpl.<init>(Unknown Source)
    at org.apache.derby.drda.NetworkServerControl.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.iapi.services.property.PropertyUtil
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 3 more

Clean and Build工作正常。早些时候,我曾经在我现在面临问题的机器上成功部署和运行另一个Java Web应用程序。

我使用的是Netbeans 7.1。我试图升级到Netbeans 7.3,但这并没有解决问题。我还尝试将MySQL Connector / J JAR文件放在Glassfish的/lib文件夹中,但这并没有解决问题。

2 个答案:

答案 0 :(得分:3)

获取Derby类的ClassNotFoundException有两个基本原因:

  1. 您缺少CLASSPATH中的一个Derby jar。例如,您可能已将derbynet.jar放入CLASSPATH但没有derby.jar。
  2. 您的CLASSPATH中有多个Derby jar副本,并且版本不兼容。例如,您的类路径中可能有两个不同的Derby.jar类,而较旧的类与新的类不兼容。
  3. 有三件事可以使这更复杂:

    1. Derby的jar文件经常捆绑到其他包中。例如,我相信有一个与Glassfish捆绑在一起的Derby副本,因此与Glassfish捆绑在一起的Derby版本与您在应用程序中打包的版本之间可能存在冲突
    2. 使用Java的现代版本,Java虚拟机本身将在启动时“自动加载”Derby JDBC驱动程序,这意味着有时Derby在您打算加载之前已经加载了,这可能会使您控制哪个版本的能力变得复杂你正在使用德比。
    3. Java-EE类路径规则很复杂,应用程序的运行类路径是根据每个应用程序类路径位置,应用程序服务器提供的类路径位置和系统类路径位置构建的。
    4. Derby'sysinfo'工具旨在帮助诊断CLASSPATH问题,因此您可以尝试使用它来更全面地了解在类路径中找到的Derby jar副本。

      希望这有帮助!

答案 1 :(得分:1)

该机器唯一的问题是,有人删除了Java。 :(