2012-04-18 98 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之前