Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java代码生成和运行时执行,Java.lang.NoClassDefFoundError_Java_Code Generation_Noclassdeffounderror - Fatal编程技术网

Java代码生成和运行时执行,Java.lang.NoClassDefFoundError

Java代码生成和运行时执行,Java.lang.NoClassDefFoundError,java,code-generation,noclassdeffounderror,Java,Code Generation,Noclassdeffounderror,我在大学里用Java做一个项目。当我们达到一个开发状态,希望在一个专用的基准网格(由uni提供)上运行一些基准时,我们遇到了一些问题 程序本身生成代码并在运行时执行(我们在初始化时预编译一些代码),这是需要的,因为我们进行了一些优化 现在,如果我们将代码提交到作业队列并通过“ant Main”运行它,则会发生以下错误: [java] Exception in thread "main" java.lang.NoClassDefFoundError: javax.tools.ToolProvid

我在大学里用Java做一个项目。当我们达到一个开发状态,希望在一个专用的基准网格(由uni提供)上运行一些基准时,我们遇到了一些问题

程序本身生成代码并在运行时执行(我们在初始化时预编译一些代码),这是需要的,因为我们进行了一些优化

现在,如果我们将代码提交到作业队列并通过“ant Main”运行它,则会发生以下错误:

 [java] Exception in thread "main" java.lang.NoClassDefFoundError: javax.tools.ToolProvider
 [java]    at propnet.PropNetComputations.compilePropnet(PropNetComputations.java:72)
 [java]    at propnet.PropNetStateMachine.initialize(PropNetStateMachine.java:145)
 [java]    at propnet.PropNetStateMachine.initialize(PropNetStateMachine.java:109)
 [java]    at statemachine.StateMachineGamer.metaGame(StateMachineGamer.java:177)
 [java]    at core.request.StartRequest.process(StartRequest.java:47)
 [java]    at core.GamePlayer.run(GamePlayer.java:82)
 [java]    at core.Main.main(Main.java:34)
编译似乎没有任何问题,但由于NoClassDefFoundError,执行似乎失败了。起初,我们认为这可能是一个版本问题,所以我们测试了各种Java版本(sun 1.6x、1.7x和openjdk 1.6x),但版本本身似乎没有问题


你知道怎么解决这个问题吗?提前感谢您提供的任何帮助

我将尝试通过以下两种方式来解决这个问题,顺序如下

  • 生成代码的VM是否与执行代码的VM相同?运行库说它试图运行该类,但当它查找该类时,却找不到该类。您可能缺少编译时使用的依赖项,但该依赖项不在执行代码的类路径中

  • 这不太可能,但我遇到了这个问题。有时,类路径中可能有两个相同的依赖项。您可能还编译了与正在运行的代码具有不同依赖关系的代码。它们的名称可能相同,但可能是不同的版本。如果依赖项更改了类的内容,则这可能会导致类未找到错误。如果是这样的话,那么您就幸运了,因为通常很难跟踪由此产生的错误


  • 希望这有帮助

    您是否尝试过使用JDK而不是JRE来运行应用程序。据我所知,JRE不包括
    javax.tools.*
    类,但JDK包括。您还可以尝试手动将
    tools.jar
    添加到类路径中。

    NoClassDefFound仅仅意味着程序或库中存在依赖于类路径中不存在的类的类。如果您不直接从程序中引用这个类,编译就可以了


    在您的情况下,类路径中可能缺少tools.jar。添加它,一切都会正常工作。

    Ant构建中的类路径设置是什么,基准网格的主机操作系统是什么?