Gradle(tomcat-plugin):tomcatRun无法执行GWT JS

时间:2013-11-18 11:40:33

标签: gwt web-applications deployment gradle tomcat7

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

好的,找到了解决方案。

你实际上必须将所需的文件复制到src / main / webapp目录中(或者让构建脚本执行该操作,或者甚至更好地配置tomcat-plugin以从其他地方读取文件 - 如果可能的话),因为tomcatRun从那里读取文件。我希望它能从WAR文件所在的位置读取它们(build / libs),但事实并非如此。

因此,假设GWT插件仍在进行中,那么这里的最佳选择是使用tomcatRunWar选项。