Problem accessing dependency resource via reflection in maven 2 plugin
----------------------------------------------------------------------
Key: MNG-3262
URL: http://jira.codehaus.org/browse/MNG-3262
Project: Maven 2
Issue Type: Bug
Affects Versions: 2.0.7
Reporter: Gary S. Weaver
I've written a Maven 2 mojo that is having trouble instantiating (via
reflection) a properties resource of dependency that is included as a
"compile"-scope dependency in the project (pom.xml) that is utilizing my plugin.
(Even though I need the plugin to access a dependency that is in "provided"
scope, for now I'm using compile scope since the maven documentation states
that @requiresDependencyResolution doesn't support provided scope.)
Here are the details:
1) I have the following dependency:
---start---
<dependencies>
<dependency>
<groupId>com.atlassian.confluence</groupId>
<artifactId>confluence</artifactId>
<version>2.6.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
---end---
2) In the pom.xml of the project that utilizes my plugin, the mojo of the
plugin I wrote is configured with the execution:
---start---
<execution>
<id>get_ConfluenceActionSupport.properties</id>
<phase>compile</phase>
<goals>
<goal>extractProperties</goal>
</goals>
<configuration>
<fullyQualifiedProperties>com.atlassian.confluence.core.ConfluenceActionSupport.properties</fullyQualifiedProperties>
<outputFile>target/classes/com/atlassian/confluence/core/ConfluenceActionSupport.properties</outputFile>
</configuration>
</execution>
---end---
3) In the Maven 2 mojo it calls the following code (just copied/pasted the
relevant portion):
---start---
// load properties with reflection and save to file
InputStream in = null;
OutputStream out = null;
boolean foundFile = false;
try {
String resource = cleanResourceName(fullyQualifiedProperties);
System.out.println("Getting " + resource);
in = getClass().getResourceAsStream (resource);
if (in != null)
{
Properties result = new Properties();
result.load (in); // Can throw IOException
out = new BufferedOutputStream(new
FileOutputStream(outputPathname));
result.store(out, "");
foundFile = true;
}
}
---end---
When executed, it can't find the properties file in the classloader. As you can
see from the following output, I'm putting the resource string together
correctly as
"/com/atlassian/confluence/core/ConfluenceActionSupport.properties" which if
you interrogate the above confluence dependency, you should be able to find.
---start---
[INFO] [i18nsanity-pt:extractProperties {execution:
get_ConfluenceActionSupport.properties}]
[INFO] Extracting properties file from classpath...
fullyQualifiedProperties=com.atlassian.confluence.core.ConfluenceActionSupport.properties
outputFile=/usr/svn/community/confluence/plugins/americanenglishlanguagepack/trunk/target/classes/com/atlassian/confluence/core/ConfluenceActionSupport.properties
Getting /com/atlassian/confluence/core/ConfluenceActionSupport.properties
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed properties extraction!
Embedded error: Could not find properties file on classpath:
com.atlassian.confluence.core.ConfluenceActionSupport.properties
---end---
Thanks!
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira