GWT不使用来自目标的资源属性文件,而是使用src / main / resources中的一次。如何使用占位符?

时间:2011-08-31 11:56:07

标签: gwt maven resources placeholder

我有gwt web项目,它必须使用在代码中作为TextResource加载的application.properties(在客户端)。一切正常,但现在我想集中maven pom.xml中的所有属性值。所以我使用key1 = $ {param1}等占位符创建了application.properties,并在pom.xml中配置了属性param1Value

所以,发生的事情是maven替换了目标dir中application.properties中的占位符,但似乎gwt编译器使用src / main / resources中的application.properties文件。我查看了已编译的js文件,我可以看到占位符没有替换为pom.xml中的值(目标的application.properties是正确的)。

更新: 问题是,我正在过滤的属性文件是一个gwt消息资源包文件,从我看到,maven创建一个“生成”文件夹,并根据在根项目源文件夹中找到的属性文件放置生成的java文件,不在目标文件夹中。之后,它将它合并到javascript通用文件中。 这意味着我有两种可能性: 1)告诉资源插件覆盖位于sources文件夹中的属性文件(我不是很酷,因为我将在下一次subversion更新时遇到问题) 2)告诉gwt-maven-plugin在target / classes文件夹中查找属性文件,我认为这是不可能的

您怎么看?

2 个答案:

答案 0 :(得分:4)

我通过使用资源解决了同样的问题:copy-resources execution和build-helper plugin。 特别是,配置资源插件:

  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
      <execution>
        <id>filter-sources</id>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <phase>generate-sources</phase>
        <configuration>
          <outputDirectory>${project.build.directory}/gwt-extra</outputDirectory>
          <resources>
            <resource>
              <filtering>true</filtering>
              <directory>src/main/filtered-sources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

并使用build helper包含它:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
      <execution>
        <id>add-source-gwt</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${project.build.directory}/gwt-extra</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>

答案 1 :(得分:1)

我设法对GWT编译中使用的属性文件使用maven过滤 我使用com.google.gwt.i18n.client.Constants界面。

它允许实例化一个扩展常量的接口,方法返回从属性文件中获取的值 该属性文件可以通过maven过滤进行处理。

这很容易做到:

  • 声明一个扩展常量的接口:XxConstants
  • 在与您的界面相同的包中的src / main / resource中创建属性文件XxConstants.properties
  • 激活maven资源过滤,以便过滤XxConstants.properties
  • 当GWT正在编译时(使用gwt-maven-plugin),它将使用过滤的属性文件生成一个XxConstants实例。
  • 在您的gwt代码中,使用GWT.create或使用gin注入创建XxConstants实例
  • 调用方法以获取属性值

有一点需要注意:过滤在gwt dev模式下无法正常工作

结果可以在target.generated文件夹中检查,该文件夹将包含使用过滤属性的接口的java实现。