Issue Details (XML | Word | Printable)

Key: MNG-1390
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Jesse McConnell
Votes: 1
Watchers: 2
Operations

If you were logged in you would be able to see more operations.
Maven 2

@requiresDependencyResolution in process-classes post compile

Created: 01/Nov/05 08:24 PM   Updated: 11/Jan/07 01:50 AM
Component/s: Inheritance and Interpolation
Affects Version/s: 2.0
Fix Version/s: 2.0.x

Time Tracking:
Original Estimate: 3 hours
Original Estimate - 3 hours
Remaining Estimate: 3 hours
Remaining Estimate - 3 hours
Time Spent: Not Specified
Remaining Estimate - 3 hours

Complexity: Expert


 Description  « Hide
I was looking back into some plugins I had written a while back and ran across an oddity.

it appears that when using a plugin in the process-classes phase, after the compiler plugin has done its thing, the @requiresDependencyResolution javadoc flag will toggle the presense of dependencies that are scoped to provided in the dependencies section when calling project.getCompileClasspathElements(); (a difference of 80 vs 24 when not using the flag and then using it)

this are two snippits of code from the plugin

/**

  • A plugin for generating * java file containing all the classes in a src tree.
    *
  • @goal generate
  • @requiresDependencyResolution
  • @description Functions Generator plugin
  • @author jesse <jesse@g.com>
    */

List classpathFiles = project.getCompileClasspathElements();

URL[] urls = new URL[classpathFiles.size() + 1];

getLog().debug("" + classpathFiles.size());

for (int i = 0; i < classpathFiles.size(); ++i) { getLog().debug((String)classpathFiles.get(i)); urls[i] = new File((String)classpathFiles.get(i)).toURL(); }

urls[classpathFiles.size()] = new File( buildDirectory + "/classes" ).toURL();

URLClassLoader ucl = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());

being used with the following plugin declaration:

<plugin>
<groupId>gallup.maven</groupId>
<artifactId>services-provider-maven-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<fullyQualifiedFileName>com/g/util/ServiceProvider.java</fullyQualifiedFileName>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>


analyzing the debug output when I run the plugin without the @requiresDependencyResolution I get 80 dependencies and it builds out the classloader correctly..

but if I add the @requiresDependencyResolution statement I go down to 24 dependencies being put into the classloader...and the discrepency corresponds to the presense of the <scope>provided</scope> statement.



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Grégory Joseph added a comment - 13/Jan/06 03:29 PM
I'm running into a similar issue with MOJO-239 :
My mojo is bound to the generate-sources phase, and if it adds a source root with project.addCompileSourceRoot, then the compiler plugin looses his mind and can't find some dependency(ies). On the other hand, if I don't add a source root (keepJava=false in the mojo, which is the default), then everything is fine.