Фильтровать имена файлов в Maven - PullRequest
2 голосов
/ 25 марта 2011

Я бы хотел иметь возможность фильтровать имена файлов, а также содержимое файлов в Maven.

Приведенный ниже фрагмент позволяет фильтровать содержимое файлов, но мне также нужно иметь возможность переименовывать файлы.

Сценарий использования таков, что я бы хотел, чтобы все статические ресурсы в моем веб-приложении были пронумерованы, чтобы AmazonF 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 Ответ

1 голос
/ 25 марта 2011

Я сделал нечто подобное, используя плагин antrun - иногда вам просто нужно вернуться в ant.

фрагмент pom

<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>

...