[
http://jira.codehaus.org/browse/MNG-4738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=229462#action_229462
]
Jesse Glick commented on MNG-4738:
----------------------------------
Sorry, but with my very limited knowledge of Maven internals I have been unable
to set up a test environment in which result.artifactResolutionNodes is
nonempty so as to test use of the executor. Mostly I try setting various fields
on things, and then something in Maven throws an NPE (too late to trivially
diagnose what it expected to be non-null). I will attach what I have gotten so
far in the hope that it will be useful. Probably there is some mocking
framework available that would make this far easier.
> DefaultArtifactResolver forks non-daemon threads
> ------------------------------------------------
>
> Key: MNG-4738
> URL: http://jira.codehaus.org/browse/MNG-4738
> Project: Maven 2 & 3
> Issue Type: Bug
> Components: Embedding
> Affects Versions: 3.0-beta-1
> Environment: Ubuntu Lucid, JDK 6u21
> Reporter: Jesse Glick
> Priority: Minor
>
> I am working on embedding Maven 3 (beta 1). I ran into a problem with Maven
> execution hanging at the end.
> When we run a "process" in-VM, we try to emulate a forked Java as much as is
> reasonable. A new thread group is created, whatever work needs to be done is
> done from a new thread in that group, and then we wait for the "process" to
> end by checking that all non-daemon threads in the group have exited.
> In the case of Maven execution, typically DefaultArtifactResolver is called
> at some point. By default, this creates a ThreadPoolExecutor with 5
> non-daemon threads in it (which are created inside the thread group of the
> caller). Although all tasks are certainly completed by the end of the Maven
> run, these 5 threads remain alive, and so the thread group cannot be
> considered dead.
> It seems to me that DefaultArtifactResolver is at fault here. It should not
> be spawning non-daemon threads. Although it shuts down the executor upon
> being finalized, there is no guarantee of this happening in a timely manner.
> Since the tasks being run in the threads are only active within the dynamic
> scope of calls to resolve, it should be safe to mark the executor threads as
> daemon. I would be happy to supply a patch incl. test case if you agree with
> the premise.
> The workaround is to set maven.artifact.threads=1 before starting Maven
> execution, so that no threads need be spawned at all.
--
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