我有一个以前由一个模块组成的GWT maven webapp项目。由于需求的演变,我需要将一些代码提取到单独的模块中以使其可重用。到目前为止,这个过程进展顺利,直到我决定提取本地化代码以便在另一个项目中使用它为止。

我所拥有的是MyAppConstantsMyAppMessages接口以及相应的.properties文件,这些文件通过GWT.create()在客户端代码中使用。我将它们移至单独的模块,添加了Localization.gwt.xml文件,并在pom.xml中指定了以下内容:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <configuration>
        <module>com.myapp.Localization</module>
        <!-- Do not compile source files, just check them -->
        <validateOnly>true</validateOnly>
        <!-- i18n -->
        <i18nConstantsBundle>com.myapp.client.MyAppConstants_ru</i18nConstantsBundle>
        <i18nMessagesBundle>com.myapp.client.MyAppMessages_ru</i18nMessagesBundle>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>i18n</goal>
                <goal>resources</goal>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>


在主应用程序模块中,我只是继承了Localization.gwt.xml。作为编译的结果,我可以看到.cache.html文件不包含它们曾经拥有的本地化常量和消息(它们看起来像\u0410\u043B...)。我想发生这种情况是因为GWT编译器在成功执行maven插件的com.myapp.client.MyAppConstants_ru.java阶段后通常不会在.generated文件夹中看到源文件(例如i18n)。而是可以在localization.jar中找到它们。

我觉得我缺少了一些东西,因为这似乎不是要解决的重要任务。处理这种情况的正确方法是什么?

最佳答案

事实证明,为了进行适当的本地化,在GWT编译时,您需要在类路径中具有.properties文件。最初,我从localization.jar中过滤掉了它们,因为它们的存在导致GWT编译失败,并显示以下消息:


重新绑定结果“ com.myapp.client.MyAppConstants_ru”必须是一个类


我深入研究了gwt-dev.jar的内容,发现编译器实际上检查了classpath中本地化属性文件的存在,以确定绑定结果。

所以我的问题解决了:


删除<goal>i18n</goal>localization模块中的相应配置
确保.properties文件进入localization.jar


这让我感到奇怪,i18ngwt-maven-plugin目标有什么用?

08-18 19:27
查看更多