Maven webResources即时过滤

时间:2011-01-23 16:34:53

标签: spring tomcat maven maven-war-plugin

我正在使用maven-war-plugin来过滤WEB-INF中的一些资源。主要是静态的东西,如:

var url = ${contextRoot}/save.json;

<link href="static/css/layout-${buildNumber}.css"/>

一切都很有效。我的问题是它创造了一个发展的噩梦。我通常热部署到本地tomcat,我的IDE处理将更改(保存时)复制到目标目录。但是当发生这种情况时,我最终会在我的文件中使用文字$ {property},而不是最初由war插件替换它。我更愿意动态测试视图/静态资源更改,而不必为每次更改重新部署。

我已经乱搞了tomcat插件来运行它,但是当我使用它时,除非我使用它进行部署,否则不会发生资源过滤,在这种情况下我会失去热插拔功能。

我正在使用spring,我可以使用主题,过滤主题属性,然后使用它来替换视图中的值。但是js / css /其他静态的东西呢?

有没有办法让战争插件“即时过滤”?任何人都可以推荐一种更好的方式来完成我想要做的事情吗?我觉得我已经看了很长时间,并对此事有一些洞察力。

2 个答案:

答案 0 :(得分:2)

如果你使用m2e和m2e-wtp的eclipse,你可以获得即时的网络资源过滤。 这在此解释:https://community.jboss.org/en/tools/blog/2011/05/03/m2eclipse-wtp-0120-new-noteworthy

并在那里演示:http://bit.ly/wGcD4j

请注意,在此视频中,Maven Profile Management UI来自JBoss Tools 3.3.0.Beta1(http://docs.jboss.org/tools/whatsnew/maven/maven-news-3.3.0。 Beta1.html)

答案 1 :(得分:1)

最后我保留了相同的方法,但改变了我的方法来实现这一目标。

对于Javascript,我将需要过滤的任何内容放入一个Constants文件中:

// Constants.js

var BASE_URL = '${contextRoot}';

这背后的原因是Constants.js文件很少会被修改,并避免在运行中重新部署该文件的问题。

我的另一个例子是使用${buildNumber}来避免跨部署的浏览器资源缓存。我发现将构建号附加到查询字符串也是如此:

<link href="static/css/layout.css?${buildNumber}"/>