2014-04-12 23 views
0

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

我有什么是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插件的i18n阶段后,在.generated文件夹中没有看到源文件(f.e.,com.myapp.client.MyAppConstants_ru.java),通常它们驻留在该文件夹中。相反,它们可以在localization.jar中找到。

我觉得我错过了一些东西,因为这看起来不是一个不平凡的任务来解决。处理这种情况的正确方法是什么?

回答

1

事实证明,为了有适当的本地化,您需要在GWT编译时在类路径中有.properties文件。起初,我筛选出来的localization.jar,因为他们的存在而引起GWT编译错误,像这样的消息:

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

我挖成gwt-dev.jar内容,并发现编译器实际上检查了类路径中是否存在本地化属性文件以确定绑定结果。

所以我的问题是要解决:

  • 去除<goal>i18n</goal>localization模块
  • 对应的配置,确保.properties文件做他们的方式localization.jar

这使我不知道,有什么使用i18ngwt-maven-plugin的目标?