2012-04-18 99 views
2

我有一个maven gwt项目,应该在服务器上集成drools(5.4.0.CR1)。drools maven与GWT的依赖冲突

这里的问题是,它似乎是Drools的需要滴料,pipline的依赖性为它找到类:

org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl 

它增加时,使Drools的正常运行,但打破GWT ...

我已阅读描述类似的问题,但与旧版本的说法,这是因为不同版本的“org.eclipse.jdt”的,它可能是固定的一篇文章中加入:

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

但这不起作用...

有趣的是,当从月食检查时,我发现这个类实际存在于drools-compiler jar中,它看起来像是与pom“drools-multiproject”一样已经被引用。

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


更新1:

这是实现“滴料,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-pipline pom时,我发现它被描述为遗留给drools-camel,所以我用drools-camel替换它...现在东西加载正确,但是如果我使用上面的排除放置滴料,骆驼依赖GWT工作,但滴料不会抱怨无法找到它,如果我删除排除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) 

回答

3

我们guvnor也有这个问题。这是因为GWT编译器无法分离它的编译器和编译类路径。更糟的是,gwt-dev遮蔽了几个罐子(是的,gwt-dev瓶子是邪恶的:)。 Here's an issue at google code for it (there are several related issue)

总之,这里的修复:

<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中的不兼容版本遮蔽。 – 2012-04-18 16:28:41

+0

实际上,解决方案是编辑运行配置并将gwt jars移动到maven依赖关系之上,这在链接中进行了描述。 我也做了什么回答 请在答案中澄清这一点。 – AhHatem 2012-04-19 15:19:22

0

我有同样的问题,而在配置方面采用<gwtSdkFirstInClasspath>true</gwtSdkFirstInClasspath>我没有工作的解决方案。我所做的是对“Eclipse - 运行配置...”中的Classpath重新排序,将GWT SDK放在Maven Dependencies之前