[ http://jira.codehaus.org/browse/MNG-4810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=235523#action_235523 ]
Lincoln Baxter, III commented on MNG-4810: ------------------------------------------ BTW - it probably goes without saying that this was not an issue in Maven 3 Beta 2 :) > Maven cannot build if loaded in a classloader that is not backed by a real > JAR file / classpath > ----------------------------------------------------------------------------------------------- > > Key: MNG-4810 > URL: http://jira.codehaus.org/browse/MNG-4810 > Project: Maven 2 & 3 > Issue Type: Bug > Components: Class Loading > Affects Versions: 3.0-beta-3 > Environment: Mac OSX & Linux, Java 1.6, Maven 3 beta 3 > Reporter: Lincoln Baxter, III > Attachments: arquillian-maven-bug.tar.gz > > > Maven fails to find required class files (resulting in null pointer > exceptions) because the ClassLoader implementation in which it was loaded > does not meet maven's assumptions of what type of information a ClassLoader > URL should return. > (From another perspective, that ClassLoader does not behave like a normal > ClassLoader, but maven should probably not be contstrained to classloaders > that provide their information as if they were backed by a JAR file; not all > classloaders are going to use those semantics, as provided in this example, > when the URLClassSpace instance loaded by the DefaultPlexusContainer attempts > to read the "/MANIFEST.ML" out of a non-jar-based classloader. > Please run example tests in attached project. > I attempted to patch this by ignoring exceptions when attempting to pull > manifests, but it appears that maven uses those manifests to populate some > kind of bean container (I'm guessing guice which is abstracted via a plexus > facade.) > Then I attempted to modify the URLClassLoader instance in which the > application was actually running, in order to provide a manifest, but it > appears that maven is still just processing "Class-Path" elements and > attempting to source those files directly, which might not work (but I had > trouble getting this to work, so it may just have been something I was doing > wrong.) > If I knew more about why maven was trying to use the classloader in this way, > I might be able to give more insightful thought into the nature/potential > solutions of/for this issue. I do know that maven is making some assumptions > about how the internals of classloaders are working, here in URLClassSpace: > ` > private static String[] getClassPathEntries( final URL url ) > throws IOException > { > final URL manifestURL; > if ( url.getPath().endsWith( "/" ) ) > { > manifestURL = new URL( url, MANIFEST_ENTRY ); > } > else > { > manifestURL = new URL( "jar:" + url + "!/" + MANIFEST_ENTRY ); > } > final InputStream in = manifestURL.openStream(); > try > { > final String classPath = new Manifest( in > ).getMainAttributes().getValue( "Class-Path" ); > return null != classPath ? classPath.split( " " ) : NO_ENTRIES; > } > finally > { > in.close(); > } > } > ` > I hope I have provided enough information, and that the attached test-case > provides useful. > Just run the attached project via 'mvn test' or 'mvn package' and you'll see > the issue. > Thanks. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira