Hi Stuart, I think I found the problem. In maven-dependency-tree:{2.1,2.2} the Contextualizable.contextualize() method is invoked concurrently with the two buildDependencyGraph() methods. This is why the container field is null. I simply synchronized the methods against each other.
Stephen On Mon, Feb 1, 2016 at 10:35 AM, Stephen Evanchik <evanc...@gmail.com> wrote: > Hi Stuart, > > I was looking at some parallel builds we ran over the weekend and notice > some failures. I started to track them down and noticed that there was a > very strange error message which seems to indicate that maven-bundle-plugin > is not thread safe or has a fairly serious bug: > > [ERROR] Failed to execute goal > org.apache.felix:maven-bundle-plugin:3.0.1:manifest (bundle-manifest) on > project PROJECT_A: Execution bundle-manifest of goal > org.apache.felix:maven-bundle-plugin:3.0.1:manifest failed: A Jar can only > accept a valid file or directory: /full/build/path/PROJECT_B/target/classes > > There is a compile dependency between the projects (PROJECT_A depends on > PROJECT_B) but it looks like PROJECT_B was not yet built. > > Stephen > > > > On Thu, Jan 28, 2016 at 8:37 PM, Stephen Evanchik <evanc...@gmail.com> > wrote: > >> Hi Stuart, >> >> A final update for tonight: I was able to reproduce the problem with >> maven-bundle-plugin:3.0.0 but not with maven-bundle-plugin:2.5.4 even >> though it looks like the DefaultDependencyGraphBuilder is in all three >> versions. >> >> Stephen >> >> On Thu, Jan 28, 2016 at 6:18 PM, Stephen Evanchik <evanc...@gmail.com> >> wrote: >> >>> Hi Stuart, >>> >>> Thanks for confirming the behavior. I too noticed the redundant >>> packaging and execution stanzas. I suspect the original developer that >>> added this project didn't understand how the bundle extension worked. >>> >>> When I noticed the redundancy I updated all of the projects to use the >>> <execution>/<package> jar pattern hoping that the problem would go away. >>> Unfortunately, I saw an improvement but still have build failures. >>> >>> I'm not sure if this is a bug in Maven, maven-dependency-tree or, >>> maven-bundle-plugin >>> >>> Stephen >>> >>> >>> On Thu, Jan 28, 2016 at 5:43 PM, Stuart McCulloch <mccu...@gmail.com> >>> wrote: >>> >>>> Hi Stephen, >>>> >>>> I've been able to recreate this with Maven 3.3.9 (by cloning your >>>> example >>>> project several times in a multi-module project) - will investigate >>>> further >>>> over the weekend. >>>> >>>> I did notice you're using the 'bundle' packaging, but you also have an >>>> explicit execution of the 'bundle' goal which should already be covered >>>> by >>>> the 'bundle' packaging's lifecycle - is there a reason for this extra >>>> execution? >>>> On 28 Jan 2016 18:00, "Stephen Evanchik" <evanc...@gmail.com> wrote: >>>> >>>> > Hi Stuart, >>>> > >>>> > I am using Maven 3.3.3 please disregard my earlier email. I did see >>>> this >>>> > problem in 3.3.1 so there doesn't seem to be a difference. I am going >>>> to >>>> > try with 3.3.9 but I'm not going to hold out hope that it will make a >>>> > difference. >>>> > >>>> > I think the problem is that DefaultDependencyGraphBuilder does not get >>>> > initialized properly. This only occurs in parallel builds and is >>>> strongly >>>> > associated with relative timing. For example, if I issue a mvn -T2.0C >>>> > install I will see the failure >80% of the time but if I use mvn -X >>>> -T2.0C >>>> > I cannot reproduce the failure at all. >>>> > >>>> > I'm not sure embedding a pom is the right approach but here's a >>>> pastbin >>>> > link to a sample project that fails: >>>> > >>>> > https://paste.apache.org/dpeQ >>>> > >>>> > >>>> > Stephen >>>> > >>>> > >>>> > On Wed, Jan 27, 2016 at 4:49 AM, Stuart McCulloch <mccu...@gmail.com> >>>> > wrote: >>>> > >>>> > > On Wednesday, 27 January 2016 at 06:03, Stephen Evanchik wrote: >>>> > > > Hi everyone, >>>> > > > >>>> > > > I'm having trouble tracking down an intermittent but frequent >>>> build >>>> > > failure >>>> > > > using the maven-bundle-plugin to wrap non-OSGi projects. I'm using >>>> > Maven >>>> > > > 3.3.1 and see the following NPE: >>>> > > > >>>> > > > Caused by: java.lang.NullPointerException >>>> > > > at >>>> > > > >>>> > > >>>> > >>>> org.apache.maven.shared.dependency.graph.internal.DefaultDependencyGraphBuilder.buildDependencyGraph(DefaultDependencyGraphBuilder.java:60) >>>> > > > at >>>> > > > >>>> > > >>>> > >>>> org.apache.felix.bundleplugin.BundlePlugin.buildDependencyGraph(BundlePlugin.java:334) >>>> > > > at >>>> > > > >>>> > >>>> org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:359) >>>> > > > at >>>> > > > >>>> > > >>>> > >>>> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) >>>> > > > ... 11 more >>>> > > > >>>> > > > whenever I invoke a parallel build (-T2.0C for example). >>>> > > > >>>> > > > There are many projects that will fail with this exception. I can >>>> > > provide a >>>> > > > fairly simple one if that makes sense. >>>> > > > >>>> > > > >>>> > > >>>> > > a reproducible test project is always helpful - have you tried a >>>> more >>>> > > recent version of Maven like 3.3.3 or 3.3.9 to see if that helps? >>>> > > > It looks like the 3.0.1 version is using maven-dependency-tree-2.1 >>>> > whose >>>> > > > buildDependency method looks like: >>>> > > > >>>> > > > public DependencyNode buildDependencyGraph( MavenProject project, >>>> > > > ArtifactFilter filter ) >>>> > > > throws DependencyGraphBuilderException >>>> > > > { >>>> > > > try >>>> > > > { >>>> > > > String hint = isMaven31() ? "maven31" : isMaven2x() ? "maven2" >>>> > > > : "maven3"; >>>> > > > getLogger().debug( "building " + hint + " dependency graph for >>>> > > > " + project.getId() ); >>>> > > > >>>> > > > DependencyGraphBuilder effectiveGraphBuilder = >>>> > > > (DependencyGraphBuilder) container.lookup( >>>> > > > DependencyGraphBuilder.class.getCanonicalName(), hint ); >>>> > > > >>>> > > > >>>> > > > where the NPE is on: >>>> > > > >>>> > > > DependencyGraphBuilder effectiveGraphBuilder = >>>> > > > (DependencyGraphBuilder) container.lookup( >>>> > > > DependencyGraphBuilder.class.getCanonicalName(), hint ); >>>> > > > >>>> > > > >>>> > > > I'm not sure why this could NPE as it seems like the >>>> > > > Contextualizable.contextualize() is called successfully for other >>>> > > projects >>>> > > > in the build. >>>> > > > >>>> > > > Any ideas on how to track this down? I can't enable debugging >>>> (mvn -X) >>>> > > > because that affects the timing just enough to avoid the issue. >>>> > > > >>>> > > > Thanks, >>>> > > > Stephen >>>> > > >>>> > > >>>> > > >>>> > >>>> > >>>> > -- >>>> > Stephen Evanchik >>>> > http://stephen.evanchik.com >>>> > >>>> >>> >>> >>> >>> -- >>> Stephen Evanchik >>> http://stephen.evanchik.com >>> >> >> >> >> -- >> Stephen Evanchik >> http://stephen.evanchik.com >> > > > > -- > Stephen Evanchik > http://stephen.evanchik.com > -- Stephen Evanchik http://stephen.evanchik.com