maven-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Igor Fedorenko <i...@ifedorenko.com>
Subject Re: Injecting MavenProject
Date Wed, 22 Feb 2017 03:54:41 GMT
MavenProject is injected as a MojoExecutionScope'd component (see
DefaultBuildPluginManager around line 119). Since old-style Plexus
components are singleton's by default, there is only one
AsciidoctorParser instance which holds the first MavenProject it was
used with for the entire build.

Couple of ways to solve this.

If AsciidoctorParser instances are cheap to create and are disposable,
then the easiest solution is to make AsciidoctorParser as non-singleton
(this is the default for jsr330 components, and for plexus @Component
use instantiationStrategy = "per-lookup").

If AsciidoctorParser must be a singleton, then you need to use
javax.inject.Provider to access current context MavenProject instance.

Hope this helps.

-- 
Regards,
Igor

On Tue, Feb 21, 2017, at 05:12 PM, Hervé BOUTEMY wrote:
> ie. see line 61 of the maven-plugin-tools annotations reference
> documentation
> 
> http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/
> index.html#Supported_Annotations
> 
> Regards,
> 
> Hervé
> 
> Le mardi 21 février 2017, 19:47:05 CET Robert Scholte a écrit :
> > On Tue, 21 Feb 2017 16:16:55 +0100, Petar Tahchiev <paranoiabla@gmail.com>
> > 
> > wrote:
> > > Hello guys,
> > > 
> > > I've recently found out something weird while working with the
> > > asciidoctor
> > > maven plugin.My project has the following structure:
> > > 
> > > PARENT:
> > >  - MODULEA
> > >  - MODULEB
> > >  - MODULEC
> > > 
> > > and the asciidoctor team have created this doxia parser to be able to
> > > render asciidoc content as part of your maven site:
> > > 
> > > https://github.com/asciidoctor/asciidoctor-maven-plugin/blob/master/src/ma
> > > in/java/org/asciidoctor/maven/site/AsciidoctorParser.java#L53> 
> > > Note that they are injecting the MavenProject like this:
> > >     @Requirement
> > >     protected MavenProject project;
> > > 
> > > and when I run the site generation at the PARENT (mvn clean site) this
> > > parser gets called 4 times, and all the 4 times the MavenProject that
> > > gets
> > > injected is PARENT.
> > > 
> > > However, if I run the site generation at PARENT but tell it to resume
> > > from
> > > MODULEA:
> > > 
> > > mvn clean site -rf :MODULEA
> > > 
> > > then the MavenProject is MODULEA every time. First time it is MODULEA,
> > > second time it is MODULEA and third time it is MODULEA.
> > > 
> > > This may seem like a very small difference, but if you use properties
> > > like
> > > ${project.build.directory} then suddenly your site and images are
> > > generated
> > > in wrong folders.
> > > 
> > > My questions is:
> > >   1) Does it look like a bug in Maven reactor? Or perhaps plexus?
> > 
> > MavenProject is not something which should work like this. It would mean
> > that project is a @Named component (JSR330), which it isn't. So I think
> > that it leaks to the plexus context, which shouldn't happen, but might
> > explain why you always get the same instance.
> > A MavenProject is something which needs to be passed as an argument.
> > 
> > Robert
> > 
> > >   2) Is there any special way that I can inject the current child module
> > > 
> > > of
> > > the mulit-module build. I want the MavenProject that is injected to be
> > > first time MODULEA, second time MODULEB and third time MODULEC.
> > > 
> > > Regarding point 2 I saw Anders had the same question here:
> > > 
> > > http://maven.40175.n5.nabble.com/Get-hold-of-MavenProject-object-of-a-modu
> > > le-in-a-multi-module-build-td5811486.html
> > > 
> > > but I didn't get the answer.
> > > 
> > > Thank you.
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> > For additional commands, e-mail: dev-help@maven.apache.org
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Mime
View raw message