Maven 2 & 3

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

Vote (0)
Watch (4)

Dates

  • Created:
    Updated:
    Resolved: