java - GWT Maven 插件 : Generating non-String parameters in the Messages class

标签 java gwt maven

我的“Messages.properties”文件中有一个属性,它有一个使用数字格式的参数:

my.message=File exceeds {0,number,0.0}MB.

当我运行 gwt:i18n Maven 目标时,它会根据我的“Messages.properties”文件中的属性生成一个Messages 接口(interface)(与正常情况一样):

public interface Messages extends com.google.gwt.i18n.client.Messages {
  //...

  @DefaultMessage("File exceeds {0,number,0.0}MB.")
  @Key("my.message")
  String my_message(String arg0);

  //...
}

问题是方法参数是一个String。当我运行该应用程序时,它给我一个错误,因为消息参数需要一个数字,但提供了一个字符串(错误消息是“只有数字子类可以格式化为数字”)。

如何配置 Maven 使其将此参数更改为数字(如 floatNumber)?谢谢。

最佳答案

鉴于上述讨论,我决定补充我之前的回答。 首先,据我所知,您无法使用现有的 i18n Maven 目标(和 GWT 的 I18NCreator)来执行要求的操作。 其次,在对我建议的生成器解决方案进行更多研究后,我发现:

  • Michael 是正确的,您不会像上面建议的那样使用接口(interface)方法查找属性(GWT 中的错误)在编译时发现错误。然而,这仍然是最简单/最快捷的方法。
  • 您可以通过编写自己的接口(interface)来确保编译时检查 与属性文件保持同步,每个属性都有一个方法,然后获取您的 生成器编写一个实现该接口(interface)的类。注意 当您更改属性文件中的属性时,您只需要 更改您编写的界面。如果你已经编写了生成器 正确的,它永远不必再改变!最好的方法 关于方法名称可能遵循 GWT:如果调用属性 the.prop.one,则方法名为the_prop_one(..)。
  • 如果你真的不想手动维护一个接口(interface),唯一的 我可以看到的方式是让你编写你自己的 I18NCreator 版本。 这是因为 maven 目标 i18n 不是 GWT 编译器 参数,而是调用 maven 插件来编写
    基于在中找到的属性文件的消息/常量接口(interface) 类路径。因此,如果您编写自己的 I18NCreator,您将
    还必须编写一个 Maven 插件,您可以在之前调用它 编译 GWT 应用程序。或者,为了更简单,您可以简单地 手动运行 I18NCreator(使用古老的 java 命令运行 它)每次你改变你的属性文件键(当然,
    当只有实际消息发生变化时,无需运行它。

就个人而言,我只会编写和维护我的属性文件和手动镜像它的界面。 Generator 总是会查看属性文件并生成属性对应的方法(根据实际消息需要任何参数),因此如果您编写的接口(interface)反射(reflect)了属性文件,Generator 生成的类将始终正确实现。

关于java - GWT Maven 插件 : Generating non-String parameters in the Messages class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854403/

相关文章:

java - 如何使用 Selenium 和 Java 在网页上查找文本并获取其 XPath 或 CSS

java - 对于 Java 中特定上下文中的每个 block

WEB-INF 之外的 Spring XML 文件

java - Linux 中的 Oozie 4.0.1 构建错误

java - 从maven项目中的相对路径读取文件

java - Android HttpURLConnection 方法在 API 23 中被删除?

java - A* 实现问题

java - 如何配置从maven在GWT项目中运行

google-app-engine - 使用 appcfg 将 .war 文件上传到 Google 应用引擎 (GAE)

java - 如何使用maven-flatten解决pom.xml父项目修订中的fecth问题?