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

@requiresDependencyResolution in process-classes post compile

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    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

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          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

                Slack

                  Issue deployment