2013-11-18 3 views
0

Я пытаюсь создать веб-приложение с поддержкой GWT с Gradle (на Ubuntu Linux).Gradle (tomcat-plugin): tomcatRun не может выполнить GWT JS

Я сконфигурировал все, и Gradle удалось успешно создать приложение, но когда я запускаю задачу «tomcatRun», я могу видеть только пустую страницу, которая является результатом не выполняемого javascript GWT (если я просматриваю источник страницы, он есть). Никаких ошибок, никаких предупреждений от 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 

Я также сравнил дерево каталогов получившейся войны с тем, которая используется заданию «tomcatRun» (build/libs/ProjectName), и они кажутся одинаковыми.

У кого-нибудь есть идеи для этого?

// Редактировать: На самом деле, он не отображает пустую страницу, он просто не может выполнить GWT Javascript, чтобы назначить контент единственному div в теле.

ответ

0

ОК, нашел решение.

Фактически вам необходимо скопировать необходимые файлы в каталог src/main/webapp (или сделать скрипт сборки так или иначе лучше настроить плагин tomcat для чтения файлов из другого места - если это возможно), потому что tomcatRun читает файлы оттуда. Я ожидал, что он прочитает их, откуда находится файл WAR (build/libs), но это не так.

Итак, лучший вариант здесь, учитывая, что плагин GWT по-прежнему находится в процессе разработки, заключается в использовании опции tomcatRunWar.

+0

Задача 'tomcatRun' не связывает WAR-файл заранее. Он использует соглашения об исходных каталогах, предоставляемые плагином Java и War, для разрешения файлов. –

+0

Привет! Спасибо, есть ли способ изменить скрипт сборки, чтобы сообщить плану tomcat использовать расположение встроенных файлов? – errikos

+0

Что именно вы имеете в виду? –

Смежные вопросы