我一直得到一个我无法理解的NoClassDefFoundError。我有一个很明显的类,因为我可以访问该类中定义的变量。我已经验证了类的存在,但是当我试图调用我需要的函数时,我会得到一个NoClassDefFoundError。下面是我得到的错误日志:
[INFO_|08/04 08:18:41|MaintenanceCronReport.main:375] Testing :Test Variable
[ERROR|08/04 08:18:41|Cron$CronJob.run:1423] Exception: [CronMaintenance_1min] org.opengts.scheduler.MaintenanceCronReport.main: -account=ALL -db.sql.provider=mysql -db.sql.host=localhost -db.sql.port=3306 -db.sql.dbname=test -db.sql.user=test -db.sql.password=test -smtp.host=smtp.gmail.com -smtp.port=25 -smtp.user=test@test.com -smtp.user.emailAddress=test@test.com -smtp.password= -smtp.enableSSL=true -sendMail=true -saveOnHD=false -pathToTMP=C:\tmp\ -pathToGTS=C:\Users\User\workspace\GTS\ -emailTo=test@test.com -log.include.date=true [*/1 * * * *] {thread}
java.lang.NoClassDefFoundError: org/opengts/war/report/ReportFactory
at org.opengts.scheduler.MaintenanceCronReport.main(MaintenanceCronReport.java:376)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.opengts.util.MethodAction.invoke(MethodAction.java:389)
at org.opengts.util.MethodAction.invoke(MethodAction.java:372)
at org.opengts.extra.util.Cron$CronJob.run(Cron.java:1420)
at org.opengts.util.ThreadPool$ThreadJob.run(ThreadPool.java:650)
Caused by: java.lang.ClassNotFoundException: org.opengts.war.report.ReportFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 more
[INFO_|08/04 08:18:41|Cron$CronJob.run:1426] CronEnd : [CronMaintenance_1min] org.opengts.scheduler.MaintenanceCronReport.main: -account=ALL -db.sql.provider=mysql -db.sql.host=localhost -db.sql.port=3306 -db.sql.dbname=test -db.sql.user=test -db.sql.password=test -smtp.host=smtp.gmail.com -smtp.port=25 -smtp.user=test@test.com -smtp.user.emailAddress=test@test.com -smtp.password= -smtp.enableSSL=true -sendMail=true -saveOnHD=false -pathToTMP=C:\tmp\ -pathToGTS=C:\Users\User\workspace\GTS\ -emailTo=test@test.com -log.include.date=true [*/1 * * * *] {thread}完整的代码太长了,不能放在这里,所以我希望本节能够完成。在这里,我可以很好地访问变量TEST_VARIABLE,但是尝试调用下一行的静态方法测试会抛出上面显示的错误。
Print.logInfo("Testing :" +ReportFactory.TEST_VARIABLE);
Print.logInfo(ReportFactory.test());变量TEST_VARIABLE和方法测试只是简单地定义为:
public static final String TEST_VARIABLE= "Test Variable";
public static String test()
{
return "TEST METHOD RETURN";
}任何帮助都是非常感谢的。提前谢谢你。
发布于 2015-08-04 05:41:28
见JLS§12.4.1。它的部分内容是:
类或接口类型T将在第一次出现以下情况之前立即初始化:. 使用由T声明的静态字段,且该字段不是常量变量(§4.12.4)。
请注意,这意味着如果字段不是常量变量,则类将在第一次访问字段之前被初始化。但是,如果字段是一个常量变量,这一点就不适用了,就像在您的例子中一样。因此,对ReportFactory.test()的调用很可能是适用§12.4.1的第一类访问。这并不能解释为什么要获得异常(首先需要检查类路径),但这应该有助于解释为什么在成功访问TEST_VARIABLE之后会出现此异常。
发布于 2015-08-04 05:32:39
类路径中没有完全的依赖项,请确保将所有必需的jars放入类路径中。
发布于 2015-08-04 09:22:11
我的问题已经解决了。正如预期的那样,我在类路径中丢失了必需的jar文件。感谢所有回复的人。我很感激。
https://stackoverflow.com/questions/31801285
复制相似问题