问题
I assemble WAR for GWT application through gradle.
When GWT is included like
dependencies {
compile "com.google.gwt:gwt-user:2.5.1"
compile "com.google.gwt:gwt-dev:2.5.1"
...
}
then I have gwt-user.jar and gwt-dev.jar in resulting WAR file. They are not really needed and are big. If I delete these jars from WAR - application works well.
But when I try to assemble WAR without these jars inside using
dependencies {
providedCompile "com.google.gwt:gwt-user:2.5.1"
providedCompile "com.google.gwt:gwt-dev:2.5.1"
...
}
then the application cannot start in tomcat saying
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)
and other strange error messages.
How can I correctly exclude just gwt-user and gwt-dev jars from gradle build?
回答1:
Other jars that are listed in compile
section did disappear from WAR too. It can be quickchecked (you may not assemble the whole war) with
gradle :dependencies
and checking providedCompile
section. In my case it was validation-api
as subdependency of 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
It is required by the app and its jar was removed resulting WAR.
To persist them, I had to write the following in build.gradle:
providedCompile ("com.google.gwt:gwt-user:$gwtVersion") {
transitive = false;
}
providedCompile ("com.google.gwt:gwt-dev:$gwtVersion") {
transitive = false;
}
and everything went ok.
来源:https://stackoverflow.com/questions/22807307/gradle-providedcompile-for-gwt-user-dev-causes-other-jars-to-disappear-from-war