[
https://jira.codehaus.org/browse/MRRESOURCES-56?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Robert Scholte updated MRRESOURCES-56:
--------------------------------------
Description:
Issue:
The maven-remote-resources-plugin (1.2.1) fails to create a usable Resource
Bundle if the outputDirectory configuration parameter is specified and does not
explicitly contain ${project.build.outputDirectory} - this makes
${project.build.outputDirectory} the only viable configuration.
The documentation for the remote-resources:bundle goal: (see:
http://maven.apache.org/plugins/maven-remote-resources-plugin/bundle-mojo.html#outputDirectory)
states:
outputDirectory:
The directory where you want the resource bundle manifest written to.
Type: java.io.File
Required: No
Expression: ${project.build.outputDirectory}
Reproduction the issue:
With this initial POM:
{code:xml}
<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>org.gteley</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/database*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>
{code}
With this project directory structure:
{noformat}
test/
|
+src/
|
+ main/
|
+ resources
|
`database.ddl
`database.sql
{noformat}
Execute this command: mvn clean package to obtain this good result:
{noformat}
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
{noformat}
Everything is fine, the contents of the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) are as required and expected for subsequent
consumption by the remote-resource:process goal..
Now, amend the POM to explicitly specify the default value for the
outputDirectory parameter:
{code:xml}
(...)
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
$\{project.build.outputDirectory}
</outputDirectory>
</configuration>
(...)
{code}
Execute this command again: mvn clean package to obtain the same good result.
OK far, now amend the POM to explicitly specify an alternative value
(${project.build.directory}) for the outputDirectory parameter:
{code:xml}
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
$\{project.build.directory}
</outputDirectory>
</configuration>
{code}
The result below now reveals the issue, the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) is created, but without the necessary
META-INF/maven/remote-resources.xml file:
{noformat}
test/
|
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ classes/
|
`database.ddl
`database.sql
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
{noformat}
By specifying ${project.build.directory} the
META-INF/maven/remote-resources.xml file lies at the same directory level as
the src and target directories (as expected) - but the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) does not now contain the
META-INF/maven/remote-resources.xml file rendering useless for subsequent
processing by the remote-resource:process goal:
Another way to also render the Bundled Resource useless for processing by the
remote-resource:process goal is to append a subdirectory to the valid
${project.build.outputDirectory} configuration.
Amend the POM again this time specify an additional subdirectory to the
${project.build.outputDirectory} configuration of the outputDirectory parameter
like this:
{code:xml}
(...)
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
$\{project.build.outputDirectory}/somedirectory
</outputDirectory>
</configuration>
(...)
{code}
Execute this command: mvn clean package to obtain this bad result:
{noformat}
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ somedirectory
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ somedirectory
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
{noformat}
The META-INF/maven/remote-resources.xml file now stems from the somedirectory/
directory, and not from the Jar's root directory as so again the Resource
Bundle cannot be consumed by the remote-resource:process goal
One other avenue I've found that prevents the
META-INF/maven/remote-resources.xml file from appearing in the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) is to update the execution section of the POM to
include a phase like this:
{code:xml}
(...)
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/database*</include>
</includes>
</configuration>
(...)
{code}
Execute this command: mvn clean package to obtain this bad result:
{noformat}
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
{noformat}
This time, the remote-resources.xml correctly appears in the classes directory
under classes/META-INF/maven/remote-resources.xml - but it does not get
included in the Resource Bundle (test-0.0.1-SNAPSHOT.jar).
was:
Issue:
The maven-remote-resources-plugin (1.2.1) fails to create a usable Resource
Bundle if the outputDirectory configuration parameter is specified and does not
explicitly contain ${project.build.outputDirectory} - this makes
${project.build.outputDirectory} the only viable configuration.
The documentation for the remote-resources:bundle goal: (see:
http://maven.apache.org/plugins/maven-remote-resources-plugin/bundle-mojo.html#outputDirectory)
states:
outputDirectory:
The directory where you want the resource bundle manifest written to.
Type: java.io.File
Required: No
Expression: ${project.build.outputDirectory}
Reproduction the issue:
With this initial POM:
{code:xml}
<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>org.gteley</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/database*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>
{code}
With this project directory structure:
{noformat}
test/
|
+src/
|
+ main/
|
+ resources
|
`database.ddl
`database.sql
{noformat}
Execute this command: mvn clean package to obtain this good result:
{noformat}
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
{noformat}
Everything is fine, the contents of the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) are as required and expected for subsequent
consumption by the remote-resource:process goal..
Now, amend the POM to explicitly specify the default value for the
outputDirectory parameter:
(...)
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
${project.build.outputDirectory}
</outputDirectory>
</configuration>
(...)
Execute this command again: mvn clean package to obtain the same good result.
OK far, now amend the POM to explicitly specify an alternative value
(${project.build.directory}) for the outputDirectory parameter:
(...)
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
${project.build.directory}
</outputDirectory>
</configuration>
(...)
The result below now reveals the issue, the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) is created, but without the necessary
META-INF/maven/remote-resources.xml file:
test/
|
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ classes/
|
`database.ddl
`database.sql
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
By specifying ${project.build.directory} the
META-INF/maven/remote-resources.xml file lies at the same directory level as
the src and target directories (as expected) - but the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) does not now contain the
META-INF/maven/remote-resources.xml file rendering useless for subsequent
processing by the remote-resource:process goal:
Another way to also render the Bundled Resource useless for processing by the
remote-resource:process goal is to append a subdirectory to the valid
${project.build.outputDirectory} configuration.
Amend the POM again this time specify an additional subdirectory to the
${project.build.outputDirectory} configuration of the outputDirectory parameter
like this:
(...)
<configuration>
<includes>
<include>**/database*</include>
</includes>
<outputDirectory>
${project.build.outputDirectory}/somedirectory
</outputDirectory>
</configuration>
(...)
Execute this command: mvn clean package to obtain this bad result:
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ somedirectory
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
` remote-resources.xml
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ somedirectory
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
The META-INF/maven/remote-resources.xml file now stems from the somedirectory/
directory, and not from the Jar's root directory as so again the Resource
Bundle cannot be consumed by the remote-resource:process goal
One other avenue I've found that prevents the
META-INF/maven/remote-resources.xml file from appearing in the Resource Bundle
(test-0.0.1-SNAPSHOT.jar) is to update the execution section of the POM to
include a phase like this:
(...)
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/database*</include>
</includes>
</configuration>
(...)
Execute this command: mvn clean package to obtain this bad result:
test/
|
+src/
|
+target/
|
+test-0.0.1-SNAPSHOT.jar/
|
`database.ddl
`database.sql
|
+ META-INF\
|
` MANIFEST.MF
|
+ maven
|
+ org.gteley/
|
`pom.properties
`pom.xml
|
+ classes/
|
`database.ddl
`database.sql
|
+ META-INF\
|
+ maven
|
` remote-resources.xml
|
+ maven-archiver/
|
` pom.properties
|
+ maven-shared-archive-resources/
+ test-classes/
This time, the remote-resources.xml correctly appears in the classes directory
under classes/META-INF/maven/remote-resources.xml - but it does not get
included in the Resource Bundle (test-0.0.1-SNAPSHOT.jar).
I've added some formatting, but there seems to be a bug:
Where you read $\\{project.build.outputDirectory}
you should actually read ${project.build.outputDirectory}
> The maven-remote-resources-plugin (1.2.1) fails to create a usable Resource
> Bundle if the outputDirectory configuration parameter is specified and does
> not explicitly contain ${project.build.outputDirectory}
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: MRRESOURCES-56
> URL: https://jira.codehaus.org/browse/MRRESOURCES-56
> Project: Maven 2.x Remote Resources Plugin
> Issue Type: Bug
> Affects Versions: 1.2.1
> Environment: Window XP, Java 1.6
> Reporter: Gareth Tudor Eley
> Attachments: test.zip
>
>
> Issue:
> The maven-remote-resources-plugin (1.2.1) fails to create a usable Resource
> Bundle if the outputDirectory configuration parameter is specified and does
> not explicitly contain ${project.build.outputDirectory} - this makes
> ${project.build.outputDirectory} the only viable configuration.
> The documentation for the remote-resources:bundle goal: (see:
> http://maven.apache.org/plugins/maven-remote-resources-plugin/bundle-mojo.html#outputDirectory)
> states:
> outputDirectory:
> The directory where you want the resource bundle manifest written to.
> Type: java.io.File
> Required: No
> Expression: ${project.build.outputDirectory}
> Reproduction the issue:
> With this initial POM:
> {code:xml}
> <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>org.gteley</groupId>
> <artifactId>test</artifactId>
> <version>0.0.1-SNAPSHOT</version>
> <build>
> <plugins>
> <plugin>
> <artifactId>maven-remote-resources-plugin</artifactId>
> <version>1.2.1</version>
> <executions>
> <execution>
> <goals>
> <goal>bundle</goal>
> </goals>
> </execution>
> </executions>
> <configuration>
> <includes>
> <include>**/database*</include>
> </includes>
> </configuration>
> </plugin>
> </plugins>
> </build>
> </project>
> {code}
> With this project directory structure:
> {noformat}
> test/
> |
> +src/
> |
> + main/
> |
> + resources
> |
> `database.ddl
> `database.sql
> {noformat}
> Execute this command: mvn clean package to obtain this good result:
> {noformat}
> test/
> |
> +src/
> |
> +target/
> |
> +test-0.0.1-SNAPSHOT.jar/
> |
> `database.ddl
> `database.sql
> |
> + META-INF\
> |
> ` MANIFEST.MF
> |
> + maven
> |
> ` remote-resources.xml
> |
> + org.gteley/
> |
> `pom.properties
> `pom.xml
> |
> + classes/
> |
> `database.ddl
> `database.sql
> |
> + META-INF\
> |
> + maven
> |
> ` remote-resources.xml
> |
> + maven-archiver/
> |
> ` pom.properties
> |
> + maven-shared-archive-resources/
> + test-classes/
> {noformat}
> Everything is fine, the contents of the Resource Bundle
> (test-0.0.1-SNAPSHOT.jar) are as required and expected for subsequent
> consumption by the remote-resource:process goal..
> Now, amend the POM to explicitly specify the default value for the
> outputDirectory parameter:
> {code:xml}
> (...)
> <configuration>
> <includes>
> <include>**/database*</include>
> </includes>
> <outputDirectory>
> $\{project.build.outputDirectory}
> </outputDirectory>
> </configuration>
> (...)
> {code}
> Execute this command again: mvn clean package to obtain the same good result.
> OK far, now amend the POM to explicitly specify an alternative value
> (${project.build.directory}) for the outputDirectory parameter:
> {code:xml}
> <configuration>
> <includes>
> <include>**/database*</include>
> </includes>
> <outputDirectory>
> $\{project.build.directory}
> </outputDirectory>
> </configuration>
> {code}
> The result below now reveals the issue, the Resource Bundle
> (test-0.0.1-SNAPSHOT.jar) is created, but without the necessary
> META-INF/maven/remote-resources.xml file:
> {noformat}
> test/
> |
> |
> + META-INF\
> |
> ` MANIFEST.MF
> |
> + maven
> |
> ` remote-resources.xml
> |
> + org.gteley/
> |
> `pom.properties
> `pom.xml
> |
> +src/
> |
> +target/
> |
> +test-0.0.1-SNAPSHOT.jar/
> |
> `database.ddl
> `database.sql
> |
> + classes/
> |
> `database.ddl
> `database.sql
> |
> + maven-archiver/
> |
> ` pom.properties
> |
> + maven-shared-archive-resources/
> + test-classes/
> {noformat}
> By specifying ${project.build.directory} the
> META-INF/maven/remote-resources.xml file lies at the same directory level as
> the src and target directories (as expected) - but the Resource Bundle
> (test-0.0.1-SNAPSHOT.jar) does not now contain the
> META-INF/maven/remote-resources.xml file rendering useless for subsequent
> processing by the remote-resource:process goal:
> Another way to also render the Bundled Resource useless for processing by the
> remote-resource:process goal is to append a subdirectory to the valid
> ${project.build.outputDirectory} configuration.
> Amend the POM again this time specify an additional subdirectory to the
> ${project.build.outputDirectory} configuration of the outputDirectory
> parameter like this:
> {code:xml}
> (...)
> <configuration>
> <includes>
> <include>**/database*</include>
> </includes>
> <outputDirectory>
> $\{project.build.outputDirectory}/somedirectory
> </outputDirectory>
> </configuration>
> (...)
> {code}
> Execute this command: mvn clean package to obtain this bad result:
> {noformat}
> test/
> |
> +src/
> |
> +target/
> |
> +test-0.0.1-SNAPSHOT.jar/
> |
> `database.ddl
> `database.sql
> |
> + somedirectory
> |
> + META-INF\
> |
> ` MANIFEST.MF
> |
> + maven
> |
> ` remote-resources.xml
> |
> + org.gteley/
> |
> `pom.properties
> `pom.xml
> |
> + classes/
> |
> `database.ddl
> `database.sql
> |
> + somedirectory
> |
> + META-INF\
> |
> + maven
> |
> ` remote-resources.xml
> |
> + maven-archiver/
> |
> ` pom.properties
> |
> + maven-shared-archive-resources/
> + test-classes/
> {noformat}
> The META-INF/maven/remote-resources.xml file now stems from the
> somedirectory/ directory, and not from the Jar's root directory as so again
> the Resource Bundle cannot be consumed by the remote-resource:process goal
> One other avenue I've found that prevents the
> META-INF/maven/remote-resources.xml file from appearing in the Resource
> Bundle (test-0.0.1-SNAPSHOT.jar) is to update the execution section of the
> POM to include a phase like this:
> {code:xml}
> (...)
> <executions>
> <execution>
> <phase>package</phase>
> <goals>
> <goal>bundle</goal>
> </goals>
> </execution>
> </executions>
> <configuration>
> <includes>
> <include>**/database*</include>
> </includes>
> </configuration>
> (...)
> {code}
> Execute this command: mvn clean package to obtain this bad result:
> {noformat}
> test/
> |
> +src/
> |
> +target/
> |
> +test-0.0.1-SNAPSHOT.jar/
> |
> `database.ddl
> `database.sql
> |
> + META-INF\
> |
> ` MANIFEST.MF
> |
> + maven
> |
> + org.gteley/
> |
> `pom.properties
> `pom.xml
> |
> + classes/
> |
> `database.ddl
> `database.sql
> |
> + META-INF\
> |
> + maven
> |
> ` remote-resources.xml
> |
> + maven-archiver/
> |
> ` pom.properties
> |
> + maven-shared-archive-resources/
> + test-classes/
> {noformat}
> This time, the remote-resources.xml correctly appears in the classes
> directory under classes/META-INF/maven/remote-resources.xml - but it does not
> get included in the Resource Bundle (test-0.0.1-SNAPSHOT.jar).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira