在Maven中过滤文件名

时间:2011-03-25 12:28:41

标签: maven-2 filter maven filtering war

我希望能够在Maven中过滤文件名和文件内容。

以下代码段可以过滤文件内容,但我也需要能够重命名文件。

使用场景是我希望我的webapp中的所有静态资源都被编号,因此Amazon的CloudFront可以将它们视为不同的版本。自然地手动管理数字是不切实际的,所以我希望构建过程能够做到这一点。

例如一个名为

的文件
logo_VERSION.jpg

最终会被称为

logo_254.jpg

如果没有编写自定义插件,这是否可行?


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <directory>/src/main/webapp</directory>
                        <filtering>true</filtering>
                    </resource>
                </webResources>
                ...

1 个答案:

答案 0 :(得分:1)

我使用antrun插件做了类似的事情 - 有时你只需要回到蚂蚁中。

pom snippet

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>build</id>
                    <phase>prepare-package</phase>
                    <configuration>
                        <tasks>
                            <property name="project.version" value="${project.version}"/>
                            <property name="all.environs" value="DEV1,DEV2,DEV3,DEV4,UAT,PROD"/>
                            <property name="application.environments" 
                                        value="${application.environments}" />

                            <ant antfile="${basedir}/build.xml" target="setup" />
                            <ant antfile="${basedir}/build.xml" target="build"/>

                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

的build.xml

<property name="ant-contrib-jar" value="${user.home}/.ant/lib/ant-contrib-1.0b3.jar"/>

<target name="setup" unless="ant-contrib.present">
    <echo>Getting ant-contrib</echo>
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${ant-contrib-jar}"
         src="http://nexus.inhouse.com:8081/nexus/content/repositories/central/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/>  
</target>

<target name="taskdefs">
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="${ant-contrib-jar}"/>
        </classpath>
    </taskdef>
</target>

<target name="build" depends="taskdefs">

    <echo message="basedir: ${basedir}"/>
    <echo message="project.version: ${project.version}"/>

    <foreach list="${application.environments}" target="jar-resources" param="app.env" trim="true">

        <param name="basedir" value="${basedir}" />
        <param name="project.version" value="${project.version}" />

    </foreach>

</target>

<target name="jar-resources">

    <mkdir dir="${basedir}/target/${app.env}"/>

    <copy todir="${basedir}/target/${app.env}">
        <fileset dir="${basedir}/src/main/resources">
            <include name="mail_config.properties"/>
            <include name="service.properties"/>
        </fileset>
    </copy>

    <filterset id="applicationFilterSet">
        <filtersfile file="${basedir}/src/main/filters/filter-${app.env}.properties"/>
        <filter token="PROJECT.VERSION" value="${project.version}"/>
    </filterset>

    <copy file="${basedir}/src/main/resources/coresystem.properties"  
        tofile="${basedir}/target/${app.env}/coresystem.properties.${app.env}">
        <filterset refid="applicationFilterSet"/>
    </copy>

    <copy file="${basedir}/src/main/resources/extraProps.properties"  
        tofile="${basedir}/target/${app.env}/extraProps_${app.env}.properties">
        <filterset refid="applicationFilterSet"/>
    </copy>

    <jar destfile="${basedir}/target/MyApp-env-${project.version}-${app.env}.jar"
        basedir="${basedir}/target/${app.env}" />

</target>