Drools Maven依赖与GWT冲突

3

我有一个maven gwt项目,需要在服务器上集成drools(5.4.0.CR1)。

问题是似乎drools需要drools-pipeline作为依赖项才能找到类:

org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl

当添加此内容后,Drools正常运行,但会破坏GWT...

我阅读了一篇类似问题的文章,但是针对旧版本的描述,说这是由于“org.eclipse.jdt”的不同版本导致的,可以通过添加以下内容来解决问题:

<exclusions>
    <exclusion>
        <groupId>org.eclipse.jdt.core.compiler</groupId>
        <artifactId>ecj</artifactId>
    </exclusion>
</exclusions>

但是这并不起作用...

有趣的是,在从eclipse检查时,我发现这个类实际上存在于drools-compiler jar中,看起来与已经引用的pom“drools-multiproject”相同。

非常感谢任何帮助... 谢谢。


更新1:

当启用“drools-pipline”的依赖项时,我会收到以下错误,并且内部jetty服务器不运行(其他依赖项导致服务器运行但不是开发模式),但它没有加载开发模式:

   [INFO] log4j: reset attribute= "false".
   [INFO] log4j: Threshold ="null".
   [INFO] log4j: Retreiving an instance of org.apache.log4j.Logger.
   [INFO] log4j: Setting [org.drools.grid] additivity to [true].
   [INFO] log4j: Level value for org.drools.grid is  [INFO].
   [INFO] log4j: org.drools.grid level set to INFO
   [INFO] log4j: Level value for root is  [ERROR].
   [INFO] log4j: root level set to ERROR
   [INFO] log4j: Class name: [org.apache.log4j.ConsoleAppender]
   [INFO] log4j: Setting property [target] to [System.out].
   [INFO] log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
   [INFO] log4j: Setting property [conversionPattern] to [%-4r %-5p %x- %m%n].
   [INFO] log4j: Adding appender named [console] to category [root].

更新2:

查看 drools-pipeline pom 文件时,我发现它被描述为 drools-camel 的遗留版本,因此我用 drools-camel 进行了替换... 现在事情加载正常了,但如果我在 drools-camel 依赖项上使用排除,GWT 就可以工作,但 drools 抱怨找不到它,如果我删除排除,GWT 就会出现问题:

java.lang.NoSuchFieldError: warningThreshold
at com.google.gwt.dev.javac.JdtCompiler.getCompilerOptions(JdtCompiler.java:400)
at com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.<init>(JdtCompiler.java:228)
at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:689)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:215)
at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:406)
at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:299)
at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:325)
at com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:105)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:190)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
at java.lang.Thread.run(Thread.java:662)
2个回答

3
我们在guvnor中也遇到了这个问题。这是因为GWT编译器无法分离其编译器和编译类路径。更糟糕的是,gwt-dev会屏蔽几个jar文件(是的,gwt-dev jar文件很邪恶:)。这里有一个谷歌代码问题与此相关(有几个相关问题)
无论如何,这是修复方法:
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.3.0</version>
    <configuration>
      ...
      <gwtSdkFirstInClasspath>true</gwtSdkFirstInClasspath><!-- The GWT compiler must the correct JDT version -->
      ...
    </configuration>

1
注意,drools本身与此无关。导致问题的是drools使用的jdt eclipse编译器与gwt-dev jar中的不兼容版本产生冲突。 - Geoffrey De Smet
其实解决方案是编辑运行配置,并将GWT Jars移到Maven依赖的上面,这在链接中有详细描述。 我也按照回答中的步骤进行了操作。 请在回答中明确说明这一点。 - AhHatem

0

我遇到了同样的问题,使用配置中的<gwtSdkFirstInClasspath>true</gwtSdkFirstInClasspath>解决方案对我没有起作用。我所做的是重新排列"Eclipse - Run Configurations ..."中的类路径,将GWT SDK放在Maven依赖之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接