Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-1390

@requiresDependencyResolution in process-classes post compile

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Not A Problem
    • 2.0
    • None
    • None

    Description

      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.

      Attachments

        Issue Links

          Activity

            People

              bentmann Benjamin Bentmann
              jmcconnell Jesse McConnell
              Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 3h
                  3h
                  Remaining:
                  Remaining Estimate - 3h
                  3h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified