自己使用的java ide一直是IDEA,在项目中需要使用maven的filter进行开发、线上环境的不同的变量的管理,根据maven-war-plugin进行过滤时,总是不能得到预期的变量替换。最终在idea的官网找到了问题所在:
IntelliJ IDEA's Make features are capable of filtering Maven resources. However, IntelliJ IDEA yet does not support filtering web resources.
很悲剧,浪费了一上午的时间解决这个问题。
最后的解决办法是:要么创建module时,对需要使用filter功能的文件不要放在web module中;要么通过ant命令或自行写maven插件解决,在idea编译后、运行web容器前,将target\classes目录下的文件复制到target\web_fileName\WEB-INF\classes下面(因为idea对target\classes下面的文件进行filter,而不会对web_fileName\WEB-INF\classes下面的文件进行过滤)。最终还是自己写了个maven插件搞定,源代码见附件。
附两种filter的使用:
通用filter配置(可解决idea中的问题)
IntelliJ IDEA's Make features are capable of filtering Maven resources. However, IntelliJ IDEA yet does not support filtering web resources.
很悲剧,浪费了一上午的时间解决这个问题。
最后的解决办法是:要么创建module时,对需要使用filter功能的文件不要放在web module中;要么通过ant命令或自行写maven插件解决,在idea编译后、运行web容器前,将target\classes目录下的文件复制到target\web_fileName\WEB-INF\classes下面(因为idea对target\classes下面的文件进行filter,而不会对web_fileName\WEB-INF\classes下面的文件进行过滤)。最终还是自己写了个maven插件搞定,源代码见附件。
附两种filter的使用:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<filters>
<filter>
${base.dir}/*.properties
</filter>
</filters>
<webResources>
<resource>
<directory>
${base.dir}/src/webapp/patches/
</directory>
<includes>
<include>resources-config.xml</include> <!--对哪些文件进行filter-->
</includes>
<filtering>true</filtering> <!--启用filter功能-->
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
通用filter配置(可解决idea中的问题)
<build>
<filters>
<filter>${user.home}/filter.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>