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)