我有gwt web项目,必须使用应用程序。属性(在客户端)在代码中作为TextResource加载。一切都很好,但现在我想集中所有的属性值在maven pom.xml。所以我提出了申请。属性与占位符,如key1=${param1},并在pom.xml中配置属性param1Value
所以,maven替换了应用程序中的占位符。属性,但似乎GWT编译器使用该应用程序。属性文件从src/main/resources。我检查了编译的js文件,在那里我可以看到占位符没有被它的值从pom.xml(目标的应用程序)取代。
更新:问题是,我正在过滤的属性文件是一个gwt消息资源包文件,从我看到的情况来看,maven创建了一个"生成"文件夹,并根据根项目源文件夹(而不是目标文件夹)中找到的属性文件放置了一个生成的java文件。之后,它将其合并到javascript通用文件中。这意味着我有两种可能性:1)告诉资源插件覆盖位于源文件夹中的属性文件(我对此并不感冒,因为我肯定会在下一个subversion更新中遇到问题)2)告诉gwt-maven-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>
并使用构建帮助器包含它:
<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>
我设法对GWT编译中使用的属性文件使用maven过滤。
我使用的是com.google.gwt.i18n.client。常量接口。
它允许实例化一个扩展常量的接口,方法返回属性文件中的值。
这个属性文件可以通过maven过滤来处理。
这很容易做到:
- 声明一个扩展常量的接口:XxConstants
- 创建属性文件XxConstants。src/main/resource中的属性与你的接口在同一个包中
- 激活maven资源过滤所以xx常量。属性被过滤
- 当GWT正在编译时(使用GWT -maven-plugin),它将使用过滤的属性文件生成一个XxConstants的实例。在gwt代码的
- 中,用gwt创建一个XxConstants实例。create or with gin injection
- 调用方法获取属性值
一个警告:过滤在gwt dev模式下不工作
结果可以在目标中检查。生成的文件夹,其中包含使用过滤属性的接口的Java实现。