【问题标题】:GWT Does Not Load *.nocache.jsGWT 不加载 *.nocache.js
【发布时间】:2012-09-30 23:44:03
【问题描述】:

我有这个使用 gwt-maven-archetype 构建的 Maven 项目。虽然它与mvn gwt:run 目标完美运行,但是当我尝试在tomcat7 容器中运行它mvn tomcat:run 或mvn gwt:compile && mvn tomcat:run 时,它不会加载GWT 动态创建的小部件。

根据 Google Chrome 控制台,它找不到 *.nocache.js 文件,即使在 /target/ 文件夹中它正是预期的位置。

我目前正在尝试在入口点模块中显示一个简单的“Hello”标签:

GWT 入口点

public class Hello implements EntryPoint {


    public void onModuleLoad() {    
        Label hello = new Label("TESTESTSTSTS");

        RootPanel.get("helloContainer").add(hello);

    }

}

*.html

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <link type="text/css" rel="stylesheet" href="veltisto.css">
    <title>Web Application Starter Project</title>
    <script type="text/javascript" language="javascript" src="veltisto/veltisto.nocache.js"></script>
  </head>
  <body>
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
    <noscript>
      <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
        Your web browser must have JavaScript enabled
        in order for this application to display correctly.
      </div>
    </noscript>
    <div id="helloContainer"></div>
  </body>
</html>

POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <!-- POM file generated with GWT webAppCreator -->
    <modelVersion>4.0.0</modelVersion>
    <groupId>gr.veltisto</groupId>
    <artifactId>web</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>GWT Maven Archetype</name>

    <properties>
        <!-- Convenience property to set the GWT version -->
        <gwtVersion>2.4.0</gwtVersion>
        <!-- GWT needs at least java 1.5 -->
        <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
            <version>${gwtVersion}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>${gwtVersion}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <classifier>sources</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.gwtbootstrap</groupId>
            <artifactId>gwt-bootstrap</artifactId>
            <version>2.0.4.0</version>
        </dependency>
    </dependencies>

    <build>
        <!-- Generate compiled stuff in the folder used for developing mode -->
        <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

        <plugins>

            <!-- Copy static web files before executing gwt:run -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                        <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>exploded</goal>
                                </goals>
                        </execution>
                </executions>
                <configuration>
                    <webappDirectory>${webappDirectory}</webappDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>             
                    <path>/veltisto</path>
                </configuration>
            </plugin>


            <!-- GWT Maven Plugin -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>2.4.0</version>
                <executions>
                    <execution>
                                <goals>
                            <goal>compile</goal>
                                </goals>
                        </execution>
                </executions>
                <!-- Plugin configuration. There are many available options, 
                   see gwt-maven-plugin documentation at codehaus.org -->
                <configuration>
                    <runTarget>veltisto.html</runTarget>
                    <hostedWebapp>${webappDirectory}</hostedWebapp>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

*.GWT.XML

<module rename-to='veltisto'>
    <!-- Inherit the core Web Toolkit stuff. -->
    <inherits name='com.google.gwt.user.User' />
    <inherits name="com.google.gwt.uibinder.UiBinder" />
    <!-- We need the JUnit module in the main module, -->
    <!-- otherwise eclipse complains (Google plugin bug?) -->
    <inherits name='com.google.gwt.junit.JUnit' />

    <!-- Inherit the default GWT style sheet. You can change -->
    <!-- the theme of your GWT application by uncommenting -->
    <!-- any one of the following lines. -->
    <inherits name='com.google.gwt.user.theme.standard.Standard' />
    <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
    <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->

    <!-- Other module inherits -->

    <inherits name="com.google.gwt.uibinder.UiBinder" />
    <inherits name="com.github.gwtbootstrap.Bootstrap" />

    <!-- Specify the app entry point class. -->
    <entry-point class='gr.veltisto.web.client.Hello' />

    <!-- Specify the paths for translatable code -->
    <source path='client' />
    <source path='shared' />

</module>

【问题讨论】:

  • 尝试将“maven-war-plugin”的阶段从“compile”更改为“package”

标签: gwt maven tomcat7 gwt-maven-plugin


【解决方案1】:

tomcat7:run 只使用src/main/webapp。你会想要使用tomcat7:run-war(它会做一个package)或tomcat7:run-war-only(如果你已经有一个war:exploded结构)。

【讨论】:

  • 它实际上只适用于 tomcat:run-war。当我指定目标tomcat7:run-war 它仍然不加载.nocache.js
  • 顺便说一句,tomcat: 前缀使用的 org.codehaus.mojo:tomcat-maven-plugin 最新发布是 2 年。该项目现在已移至 Apache Tomcat 项目并拆分为 tomcat6-maven-plugin 和 tomcat7-maven-plugin(您使用),分别具有前缀 tomcat6: 和 tomcat7: 前缀。使用tomcat:run,您的tomcat7-maven-plugin 配置(&lt;path&gt;/veltisto&lt;/path&gt;)将不会被使用。
  • 同样,mvn jetty:run-war 也为我解决了这个问题。
【解决方案2】:

使用 firebug 或 chrome 的检查器,您是否看到 .nocache.js 和 .cache.html 文件正确加载?还是有像 404 这样的错误?如果有 404,在你的 war 目录中查找错误指定的路径 - 文件在吗?

如果.nocache.js文件丢失或者放错了地方,很可能是你列出的*.html页面到编译好的JS的路径不对。

如果.cache.html 文件丢失,通常意味着 gwt:compile 被跳过,或者 gwt:run 或 gwt:debug 在编译期间或之后运行。不要在gwt:compile 后面跟着gwt:run 或:debug:,因为后两者会删除编译后的文件。

最后一个想法:tomcat:run 阶段可能会尝试获取已完成的.war 文件,而您的war:exploded 不会创建一个。此外,当您运行gwt:compile 时,这可能不会导致编译完成的war 目录被构建。要处理所有这些问题,请考虑让您的构建工作首先生成一个 war 文件,然后尝试使 tomcat:run 正常运行。这里的第一步是将gwt:compile 映射到prepare-package 阶段,然后确保完成的战争包含.nocache.js 和.cache.html 文件符合预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多