gradle provideCompile for gwt-user / dev导致其他jar从WAR中消失

时间:2014-04-02 09:36:44

标签: gwt jar gradle war

我通过gradle为GWT应用程序组装WAR。

包含GWT时

dependencies {
    compile "com.google.gwt:gwt-user:2.5.1"
    compile "com.google.gwt:gwt-dev:2.5.1"
    ...
}

然后我在生成的WAR文件中有gwt-user.jar和gwt-dev.jar。他们并不是真的需要而且很大。如果我从WAR中删除这些jar - 应用程序运行良好。

但是当我尝试使用

组装没有这些罐子的WAR时
dependencies {
    providedCompile "com.google.gwt:gwt-user:2.5.1"
    providedCompile "com.google.gwt:gwt-dev:2.5.1"
    ...
}

然后应用程序无法在tomcat中开始说

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [application-context.xml]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482)

和其他奇怪的错误消息。

如何从gradle build中正确排除gwt-user和gwt-dev jars?

1 个答案:

答案 0 :(得分:1)

compile部分中列出的其他jar确实也从WAR中消失了。它可以用

快速检查(你可能无法组装整个战争)
gradle :dependencies

并检查providedCompile部分。在我的例子中,它是validation-api作为gwt-user的子依赖。

+--- com.google.gwt:gwt-user:2.5.1
|    +--- javax.validation:validation-api:1.0.0.GA
|    \--- org.json:json:20090211
+--- com.google.gwt:gwt-dev:2.5.1
|    \--- org.json:json:20090211
\--- javax.servlet:servlet-api:2.5

应用程序需要它并且它的jar被删除导致WAR。

为了坚持下去,我必须在build.gradle中编写以下内容:

providedCompile ("com.google.gwt:gwt-user:$gwtVersion") {
    transitive = false;
}
providedCompile ("com.google.gwt:gwt-dev:$gwtVersion") {
    transitive = false;
}

一切都很顺利。