Maven
  1. Maven
  2. MNG-2795

Classloader problem loading a resource from a build extension Jar : difference between 2.0.4 and (future) 2.0.5

    Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.5
    • Fix Version/s: 2.0.5
    • Component/s: None
    • Labels:
      None
    • Complexity:
      Intermediate
    • Number of attachments :
      3

      Description

      I had a problem when executing the Checkstyle plugin (version 2.1) with the pre-release of Maven 2.0.5. So I dug a bit to see if this could be related to maven core or not, and here is what I found.

      I isolated the code that breaks the build in the checkstyle plugin: it happens when the plugin tries to load my Checkstyle configuration file, which is actually located in a JAR that is specified in the build extensions. The code lies in the Locator#resolveLocation() method:

      // Attempt a Resource.
      URL url = this.getClass().getClassLoader().getResource( location );

      This code returns null for the "url" variable, which in turns breaks the plugin because it doesn't find any configuration file.

      I haven't had the time to dig more into it, but I found the following issue that might be related to this problem: "MNG-2228 : Classloader problem loading jars from build extensions". Brett and Carlos worked on it and fixed it, so maybe they could tell more about it.

      I attached the logs of the execution with Maven 2.0.4 (which works fine) and Maven 2.0.5 (which breaks). I haven't had the time yet to dig further into that problem.

        Issue Links

          Activity

          Hide
          Jason van Zyl added a comment -

          Can you give me a test project so I can verify this. I need to duplicate your setup.

          Show
          Jason van Zyl added a comment - Can you give me a test project so I can verify this. I need to duplicate your setup.
          Hide
          Jason van Zyl added a comment -

          Fabrice can you try your build with one of these builds:

          http://idisk.maven.org/jvanzyl/Public/maven/

          I just built 2.0.5 again. Maybe you can verify for me or give me your build so I can try.

          Show
          Jason van Zyl added a comment - Fabrice can you try your build with one of these builds: http://idisk.maven.org/jvanzyl/Public/maven/ I just built 2.0.5 again. Maybe you can verify for me or give me your build so I can try.
          Hide
          Fabrice Bellingard added a comment -

          I've just tested my project with your freshly built version, and I'm still having the problem.
          I'm currently trying to give you a simple project so that you can reproduce it. Hopefully I'll come with it soon.

          Show
          Fabrice Bellingard added a comment - I've just tested my project with your freshly built version, and I'm still having the problem. I'm currently trying to give you a simple project so that you can reproduce it. Hopefully I'll come with it soon.
          Hide
          Fabrice Bellingard added a comment -

          OK, I have isolated the problem. Here it is.

          I have a project "Checkstyle-config" that creates a JAR which contains a Checkstyle configuration file (called "MyConventions.xml"). I have another project "TestProject" that references this JAR in the build extensions and that configures the checkstyle plugin to use "MyConventions.xml" as the config file.
          Build the "Checkstyle-config" project with "mvn install", then run "mvn checkstyle:checkstyle" on the "TestProject" Java project. Everything works fine.

          Now, imagine that you develop custom Checks that you bundle in the "Checkstyle-config" JAR along with the configuration file. To be able to do so, you need to define, in that project, some dependencies (Checkstyle API dependency).
          Rebuild the "Checkstyle-config" project with "mvn install" (you will get a JAR containing "MyConventions.xml" and the custom checks binaries). Then run "mvn checkstyle:checkstyle" on the "TestProject" Java project. With Maven 2.0.4, there's no error, but with 2.0.5, the build fails and the log says:

          Embedded error: Unable to find configuration file location.
          Unable to find location 'MyConventions.xml' as URL, File or Resource.
          

          I will attach the projects I've described so that you can try to reproduce it. You just need to comment/uncomment the dependencies to see the build fail or not.

          HTH

          Show
          Fabrice Bellingard added a comment - OK, I have isolated the problem. Here it is. I have a project "Checkstyle-config" that creates a JAR which contains a Checkstyle configuration file (called "MyConventions.xml"). I have another project "TestProject" that references this JAR in the build extensions and that configures the checkstyle plugin to use "MyConventions.xml" as the config file. Build the "Checkstyle-config" project with "mvn install", then run "mvn checkstyle:checkstyle" on the "TestProject" Java project. Everything works fine. Now, imagine that you develop custom Checks that you bundle in the "Checkstyle-config" JAR along with the configuration file. To be able to do so, you need to define, in that project, some dependencies (Checkstyle API dependency). Rebuild the "Checkstyle-config" project with "mvn install" (you will get a JAR containing "MyConventions.xml" and the custom checks binaries). Then run "mvn checkstyle:checkstyle" on the "TestProject" Java project. With Maven 2.0.4, there's no error, but with 2.0.5, the build fails and the log says: Embedded error: Unable to find configuration file location. Unable to find location 'MyConventions.xml' as URL, File or Resource. I will attach the projects I've described so that you can try to reproduce it. You just need to comment/uncomment the dependencies to see the build fail or not. HTH
          Hide
          Jason van Zyl added a comment -

          Used test project and everything works fine.

          Show
          Jason van Zyl added a comment - Used test project and everything works fine.
          Hide
          Fabrice Bellingard added a comment -

          Well, I've just tried this test project again, with a clean installation of Maven (no local repository and the latests build of Maven 2.0.5), and when I uncomment the dependencies in the "Checkstyle-config" project's POM, then the build fails when I do the "mvn checkstyle:checkstyle" on the "TestProject" project....

          This is so weird... I can't see anything specific to my environnement (Java 1.4.2_04). Have you tried with a clean installation as well?

          Show
          Fabrice Bellingard added a comment - Well, I've just tried this test project again, with a clean installation of Maven (no local repository and the latests build of Maven 2.0.5), and when I uncomment the dependencies in the "Checkstyle-config" project's POM, then the build fails when I do the "mvn checkstyle:checkstyle" on the "TestProject" project.... This is so weird... I can't see anything specific to my environnement (Java 1.4.2_04). Have you tried with a clean installation as well?
          Hide
          Julien S added a comment -

          I believe I has the same issue as reported by Fabrice, in a very similar setting (own conventions.xml and custom checker).
          However, the funny part is:

          mvn checkstyle:checkstyle works
          mvn site fails with the above error
          mvn checkstyle:checkstyle site works

          I should also say and moved my custom jar from an extension to a plugin dependency too.

          Hope this helps.

          Show
          Julien S added a comment - I believe I has the same issue as reported by Fabrice, in a very similar setting (own conventions.xml and custom checker). However, the funny part is: mvn checkstyle:checkstyle works mvn site fails with the above error mvn checkstyle:checkstyle site works I should also say and moved my custom jar from an extension to a plugin dependency too. Hope this helps.
          Hide
          Tom Guyette added a comment -

          It's not clear why this bug was closed.

          We're seeing this exact issue – checkstyle failing when a parent pom defines a dependency on a jar that contains the configuration xml file.

          We see it in Maven 2.0.5 and still in Maven 2.0.7. Works fine in Maven 2.0.4.

          Show
          Tom Guyette added a comment - It's not clear why this bug was closed. We're seeing this exact issue – checkstyle failing when a parent pom defines a dependency on a jar that contains the configuration xml file. We see it in Maven 2.0.5 and still in Maven 2.0.7. Works fine in Maven 2.0.4.
          Hide
          Josh Kitterman added a comment -

          I still see this issue with Maven 2.0.9. 'mvn checkstyle:checkstyle site' works, but 'mvn site' fails with the error:

          Embedded error: Error rendering Maven report: Unable to find configuration file at location ...
          Could not find resource ...

          I have a custom jar configured as a build extension containing the configuration xml file. I can confirm it works in Maven 2.0.4, but not 2.0.5+.

          Show
          Josh Kitterman added a comment - I still see this issue with Maven 2.0.9. 'mvn checkstyle:checkstyle site' works, but 'mvn site' fails with the error: Embedded error: Error rendering Maven report: Unable to find configuration file at location ... Could not find resource ... I have a custom jar configured as a build extension containing the configuration xml file. I can confirm it works in Maven 2.0.4, but not 2.0.5+.

            People

            • Assignee:
              Jason van Zyl
              Reporter:
              Fabrice Bellingard
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: