首先,我指的是这个问题(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依赖项,正如我在开头提到的帖子中所提到但没有成功。
有谁知道这个问题的解决方案是什么?
Btw完整堆栈跟踪是:
| 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
答案 0 :(得分:2)
com / sun / tools / xjc / Options.class位于JAXB发行版附带的jar jaxb-xjc.jar中。通常,javax.xml.bind和xjc工具可通过JDK和Java二进制文件获得。但是,如果某些应用程序需要通过其API调用XML Schema编译器,则该jar中包含的各个类必须可用。