java - 新版本 Grails 中出现 Drools 异常

标签 java grails groovy drools

首先,我指的是这个问题( LINK ),它对我没有帮助,因为当时框架的版本较低,所以我开始新问题。

所以我正在使用 Grails 2.4.3 框架并尝试在其中使用 Drools 规则引擎。 Java版本是1.0.8_20,groovy版本是2.3.9。 BuildConfig 中的依赖项是:

runtime 'org.drools:drools-core:5.5.0.Final'
runtime 'org.drools:knowledge-api:5.5.0.Final'

在这行代码中:

KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder()

我得到这个异常:

Error initializing the application: com/sun/tools/xjc/Options
Caused by ClassNotFoundException: com.sun.tools.xjc.Options

我尝试将 drools-core/knowledge-api 的版本更改为更高版本(最高 6.0.1.Final),但不断收到相同的错误。我还尝试导入这个奇怪的 xjc 依赖项,如我在开始时提到的帖子中提到的,但没有成功。

谁知道这个问题的解决办法是什么?

顺便说一句,完整的堆栈跟踪是:

| Error 2014-12-19 18:04:49,851 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing Grails: com/sun/tools/xjc/Options
Message: com/sun/tools/xjc/Options
    Line | Method
->> 2688 | privateGetDeclaredMethods        in java.lang.Class
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   1962 | getDeclaredMethods               in     ''
|     46 | getLocked . . . . . . . . . . .  in org.codehaus.groovy.util.LazyReference
|     33 | get                              in     ''
|     46 | doCall . . . . . . . . . . . . . in account.manager.rule.knowledge.Knowledge$_initialize_closure1
|     43 | initialize                       in account.manager.rule.knowledge.Knowledge
|     39 | $tt__initialize . . . . . . . .  in account.manager.RuleSyncService
|     24 | doCall                           in BootStrap$_closure1
|    327 | evaluateEnvironmentSpecificBlock in grails.util.Environment
|    320 | executeForEnvironment            in     ''
|    296 | executeForCurrentEnvironment . . in     ''
|    266 | run                              in java.util.concurrent.FutureTask
|   1142 | runWorker . . . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor
|    617 | run                              in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run . . . . . . . . . . . . . .  in java.lang.Thread
Caused by ClassNotFoundException: com.sun.tools.xjc.Options

最佳答案

com/sun/tools/xjc/Options.class 位于 JAXB 发行版附带的 jar jaxb-xjc.jar 中。通常,javax.xml.bind 和 xjc 工具可通过 JDK 和 Java 二进制文件获得。但是,如果某些应用程序需要通过其 API 调用 XML 架构编译器,则该 jar 中包含的各个类必须可用。

关于java - 新版本 Grails 中出现 Drools 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570133/

相关文章:

java - 是否可以通过 Groovy 中的类别添加 methodMissing Hook ?

java - IN Thread-Safe如何写Map等线程读取

hibernate - map 构造函数不适用于应用程序销毁

rest - Grails 3应用程序中使用Spring Security Rest对 “refresh_token”请求的403响应

java - 在 Junit 或 Groovy/Spock 测试中测试匿名类

groovy - 如何通过函数将文件集传递到 Gradle Ant 任务中?

java - 无法停止读取java中的输入

java - 使用支持库时以编程方式覆盖操作栏

java - 使用 Netty 的异步 HTTP 客户端

Grails RabbitMQ native 过滤发送给消费者的消息