我正在尝试使用Gradle(在Ubuntu Linux上)构建支持GWT的Web应用程序。
我已经配置了所有内容,Gradle设法成功构建应用程序,但是当我运行任务" tomcatRun"时,我只能看到一个空白页面,这是GWT javascript未执行的结果(如果我查看页面源,它就在那里)。没有错误,没有来自Tomcat的警告,只有那个空白页面。
但是,当我运行" tomcatRunWar"时,一切都很完美。我无法弄清楚可能出现的问题或者为什么会发生这种情况。
这是我的gradle.build
文件:
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'tomcat'
apply plugin: 'eclipse-wtp'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.gradle.api.plugins:gradle-tomcat-plugin:1.0"
}
}
repositories {
mavenCentral()
}
dependencies {
/* Tomcat plugin dependencies */
def tomcatVersion = '7.0.47'
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
}
/* Google Web Toolkit */
def gwtVersion = '2.5.1'
providedCompile "com.google.gwt:gwt-user:${gwtVersion}"
providedCompile "com.google.gwt:gwt-dev:${gwtVersion}"
runtime "com.google.gwt:gwt-servlet:${gwtVersion}"
/* Spring Security */
def springVersion = '3.1.4.RELEASE'
compile "org.springframework.security:spring-security-web:${springVersion}"
compile "org.springframework.security:spring-security-config:${springVersion}"
}
/* Task to compile the client package GWT code to JavaScript */
task gwtCompile (dependsOn: classes, type: JavaExec) {
buildDir = "${project.buildDir}/gwt"
extraDir = "${project.buildDir}/extra"
inputs.source sourceSets.main.java.srcDirs
inputs.dir sourceSets.main.output.resourcesDir
outputs.dir buildDir
doFirst {
file(buildDir).mkdirs()
}
main = "com.google.gwt.dev.Compiler"
classpath {
[
sourceSets.main.java.srcDirs, // Java source
sourceSets.main.output.resourcesDir, // Generated resources
sourceSets.main.output.classesDir, // Generated classes
sourceSets.main.compileClasspath, // Dependencies
]
}
args = [
'<package_path_to_GWT_module>', // Our GWT module
'-war', buildDir,
'-logLevel', 'INFO',
'-localWorkers', '2',
'-compileReport',
'-extra', extraDir,
]
maxHeapSize = '256M'
}
/* Make the war plugin depend on the gwtCompile task */
war.dependsOn gwtCompile
/* Include the contents of the GWT compilation in the generated WAR file */
war {
from gwtCompile.buildDir
}
/* Configure the eclipse plugin in case it is used */
eclipse {
project {
natures 'com.google.gwt.eclipse.core.gwtNature'
buildCommand 'com.google.gdt.eclipse.core.webAppProjectValidator'
buildCommand 'com.google.gwt.eclipse.core.gwtProjectValidator'
}
classpath {
containers 'com.google.gwt.eclipse.core.GWT_CONTAINER'
}
}
我的目录树如下所示:
ProjectHome
-- src
-- main
-- java
-- <packages>
-- webapp
-- WEB-INF
-- web.xml
-- index.html
-- test
-- build.gradle
我还将生成的WAR目录树与'tomcatRun&#39;任务(build / libs / ProjectName),它们看起来完全相同。
有没有人对此有任何想法?
// 编辑:实际上,它不显示空白页面,它只是无法执行GWT Javascript,将内容分配给正文中唯一的div。
答案 0 :(得分:0)
好的,找到了解决方案。
你实际上必须将所需的文件复制到src / main / webapp目录中(或者让构建脚本执行该操作,或者甚至更好地配置tomcat-plugin以从其他地方读取文件 - 如果可能的话),因为tomcatRun从那里读取文件。我希望它能从WAR文件所在的位置读取它们(build / libs),但事实并非如此。
因此,假设GWT插件仍在进行中,那么这里的最佳选择是使用tomcatRunWar选项。