14.3节介绍了如何开启资源过滤,在Web项目中,资源文件同样位于src/main/resources/目录下,它们经处理后会位于WAR包的WEB-INF/classes目录下,这也是Java代码编译打包后的目录。也就是说,这类资源文件在打包过后位于应用程序的classpath中。Web项目中还有另外一类资源文件,默认它们的源码位于src/main/webapp/目录,经打包后位于WAR包的根目录。例如,一个Web项目的css源码文件在src/main/webapp/css/目录,项目打包后可以在WAR包的css/目录下找到对应的css文件。这一类资源文件称做web资源文件,它们在打包过后不位于应用程序的classpath中。
与一般的资源文件一样,web资源文件默认不会被过滤。开启一般资源文件的过滤也不会影响到web资源文件。
不过有的时候,我们可能希望在构建项目的时候,为不同的客户使用不一样的资源文件(例如客户的logo图片不同,或者css主题不同)。这时可以在web资源文件中使用Maven属性,例如用${client.logo}表示客户的logo图片,用${client.theme}表示客户的css主题。然后使用profile分别定义这些Maven属性的值,如代码清单14-18所示。
代码清单14-18 针对不同客户web资源的profile
最后需要配置maven-war-plugin对src/main/webapp/这一web资源目录开启过滤,如代码清单14-19所示。
代码清单14-19 为web资源目录src/main/webapp/开启过滤
代码清单14-19中声明了web资源目录src/main/webapp(这也是默认的web资源目录),然后配置filtering开启过滤,并且使用includes指定要过滤的文件,这里是所有css和js文件。读者可以模仿上述配置添加额外的web资源目录,选择是否开启过滤,以及包含或者排除一些该目录下的文件。
配置完成后,可以选择激活某个profile进行构建,如mvn clean install-Pclinet-a,告诉web资源文件使用logo图片a.jpg,使用css主题red。