John Harvey created MRESOURCES-193:
--------------------------------------

             Summary: Generated properties appear to be ignored by the 
resources plugin
                 Key: MRESOURCES-193
                 URL: https://jira.codehaus.org/browse/MRESOURCES-193
             Project: Maven Resources Plugin
          Issue Type: Bug
          Components: copy
    Affects Versions: 2.7, 2.6, 2.5, 2.4.3, 2.4.2, 2.4.1, 2.4, 2.3
         Environment: Running on Mac OS X
Apache Maven 3.2.3
Java version: 1.6.0_65, vendor: Apple Inc.
            Reporter: John Harvey


There are currently two plugins that I'm aware of that can generate a property; 
one is the build-helper-maven-plugin from org.codehaus.mojo, and the other is 
gmaven-plugin from org.codehaus.groovy.maven.  What these plugins do is allow 
you to run a regex on a pre-defined property and therefore generate a new 
property.

For my project, I'm trying to transform the 1.6.0-SNAPSHOT project.version into 
a simpler new string, essentially v1p6p0.  I'm doing this with a regex, and the 
variable this will be stored in is called target.version.encoded.  I'd like to 
use that property name to create a directory with that name during 
resources:resources execution.  Note that I can easily do this with a hardcoded 
property.

The regex happens at the validate phase of the build.
The resources copy happens at the process-resources phase of the build.
I have an ANT task that runs in-between these two processes during the 
initialize phase of the build, in order to print out the variable, which 
verifies that it was created properly.  Unfortunately, when the 
resources:resources phase runs, the newly-generated property is ignored, and a 
directory called ${target.version.encoded} is created.  My pom is below, 
followed by the important part of the log that I see.

In the pom-file, you can comment out the "TEST 1" plugin section and replace it 
with the "TEST2" and you'll see similar results.  If you don't run the pom with 
the "prod" profile, you can also see everything work with the hard-coded 
property for target.version.encoded.


Here is the pom:

<project xmlns="http://maven.apache.org/POM/4.0.0";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                        http://maven.apache.org/xsd/maven-4.0.0.xsd";>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fake</groupId>
    <artifactId>fake-parent</artifactId>
    <version>1.6.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>fake parent pom</name>
    <description>Fake Parent pom</description>  

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <properties>
                <target.version.encoded>dev</target.version.encoded>
            </properties>
        </profile>

        <profile>
            <id>prod</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>

            <build>
                <plugins>
     <!-- TEST 1 (enabled)  -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>1.9.1</version>
                        <executions>
                            <execution>
                                <id>regex-target.version.encoded</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>regex-property</goal>
                                </goals>
                                <configuration>
                                    <name>target.version.encoded</name>
                                    <value>${project.version}</value>
                                    
<regex>^([0-9]+)\.([0-9]+)\.([0-9]+)(-SNAPSHOT)?$</regex>
                                    <replacement>v$1p$2p$3</replacement>
                                    <failIfNoMatch>true</failIfNoMatch>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
    <!-- TEST 2 (disabled for now)
                    <plugin>
                        <groupId>org.codehaus.groovy.maven</groupId>
                        <artifactId>gmaven-plugin</artifactId>
                         <executions>
                            <execution>
                                <phase>validate</phase>
                                <goals>
                                    <goal>execute</goal>
                                </goals>
                                <configuration>
                                    <source>
                                        
System.setProperty("target.version.encoded", "${version}".replace('-SNAPSHOT', 
''))
                                        
project.properties.setProperty("target.version.encoded", 
"${version}".replace('-SNAPSHOT', ''))
                                    </source>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
-->
                </plugins>
            </build>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                              
<echo>=======================================</echo>
                              <echo>DYNAMIC VARIABLES</echo>
                              
<echo>=======================================</echo>
                              <echo>[target.version.encoded] 
${target.version.encoded}</echo>
                              
<echo>=======================================</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <param>${target.version.encoded}</param>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <filtering>false</filtering>
                <directory>${basedir}/</directory>
                
<targetPath>${project.build.directory}/${target.version.encoded}</targetPath>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>Maven Central</id>
            <url>http://repo1.maven.org/maven2</url>
        </repository>
    </repositories>

</project>

Command: mvn -Pprod clean install

Log:
[INFO] --- build-helper-maven-plugin:1.9.1:regex-property 
(regex-target.version.encoded) @ fake-parent ---
[INFO] 
[INFO] --- maven-antrun-plugin:1.1:run (default) @ fake-parent ---
[INFO] Executing tasks
     [echo] =======================================
     [echo] DYNAMIC VARIABLES
     [echo] =======================================
     [echo] [target.version.encoded] v1p6p0
     [echo] =======================================
[INFO] Executed tasks
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ 
fake-parent ---
[WARNING] Using platform encoding (MacRoman actually) to copy filtered 
resources, i.e. build is platform dependent!
[INFO] Copying 1 resource to 
/Users/user/git/example2/target/${target.version.encoded}

Result:
 - You can see that the ant task clearly knows target.version.encoded, whereas 
the replacer version does not.  When I look in target/, I see a directory 
called "${target.version.encoded}".

Note that if you run the command without the -Pprod profile, 
target.version.encoded becomes "dev", and the target/dev directory is created 
appropriately.

I tried with versions 2.3 through 2.7 of the resources plugin, and with both 
property-creator plugins.  Since both produce the same result, I am suspicious 
of the resources plugin.  However, the issue could be that those plugins 
produce non-standard output, although that does not seem to be the case based 
on the fact that the ant script works fine with the newly-created property.

Any help would be appreciated.



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to