我通过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?
答案 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;
}
一切都很顺利。