You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Peter Nilsson <pe...@orcsoftware.com> on 2007/04/19 10:37:00 UTC

Plugin execution for a specific packaging

Hi,

I have a build tree with 30+ projects of different packaging (jar, pom, dll,
so, plugin, etc) built with Maven and I would like to specify in the top
pom.xml that certain plugins are used for all projects of a given packaging.
For example, I would like to have the CheckStyle plugin run on all projects
with packaging "jar".

Of course I can set the configuration of the plugins in the top pom (with a
pluginmanagement tag) and then just invoke the plugin explicitly in the
projects but I would like to enforce that the plugin is used for all
projects of the given packaging. It is very easy for example to forget to
add CheckStyle to a new jar project.

Adding the possibility of using a packaging filter to an execution element
would solve it, but there are perhaps other ways? Any ideas?

	Peter


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


RE: Plugin execution for a specific packaging

Posted by Peter Nilsson <pe...@orcsoftware.com>.
Unfortunately it doesn't work. Project properties (or user properties
defined in pom) cannot be used to activate a profile.

I found a thread where someone had tried the same thing without success:
http://www.nabble.com/Can-I-activate-a-profile-based-on-module-type--tf14098
16s177.html

Back to reorganize the build tree I suppose.

Anyhow, thanks for the help Jeroen.

	Peter

-----Original Message-----
From: Jeroen Leenarts [mailto:jeroen.leenarts@gmail.com] 
Sent: den 19 april 2007 11:11
To: Maven Users List
Subject: Re: Plugin execution for a specific packaging

I've looked it up in the docs:
http://maven.apache.org/pom.html#Properties

It might actually be "project.packaging".
Jeroen

On 19/04/07, Jeroen Leenarts <je...@gmail.com> wrote:
>
> You might be on to something there....
>
> The page:
> http://maven.apache.org/guides/introduction/introduction-to-profiles.html
> mentiones this piece of code. Activiation based on a property.
>
> This will activate the profile when the system property "debug" is
> specified with any value:
>
> <profiles>
>   <profile>
>     <activation>
>       <property>
>
>         <name>debug</name>
>       </property>
>     </activation>
>     ...
>   </profile>
> </profiles>
>
>
> Wouldn't a property named "packaging" with the relevant value work?
> Packaging is the tag defining a projects, ehr, packaging. Which is exactly
> the granularity you want to configure at.
>
> Well worth to try.
>
> Jeroen
>
> On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
> >
> > Yes, for the plugins we have developed in house it is no problem but
> > that is
> > not what I am struggling with right now (as you noticed).
> >
> > Reorganizing the tree is an option and is exactly what I am considering
> > right now. However, I would rather keep a functional organization of my
> > build tree and use features of the build system for controlling the
> > build of
> > different type of artifacts. A functional organization makes it easier
> > for
> > developers to check out and build only the part of the tree they are
> > working
> > on. A build tree organized after artifact type does not map to
> > responsible
> > developer/team very well.
> >
> > Perhaps it would be possible to use profiles for controlling the use of
> > plugins and let the packaging activate the profile?
> >
> > Thanks.
> >
> >   Peter
> >
> > -----Original Message-----
> > From: Jeroen Leenarts [mailto:jeroen.leenarts@gmail.com]
> > Sent: den 19 april 2007 10:44
> > To: Maven Users List
> > Subject: Re: Plugin execution for a specific packaging
> >
> > So yes it is possible, but not declarativly..
> >
> > (I just read your post again, and see that you are using standard Maven
> > mojo's and are not developing your own.)
> >
> > You probably noticed that running a mojo for all projects is easy. But
> > that
> > running for a subtype is more work.
> >
> > You could consider using an inheritance tree for your poms.
> >
> > + toplevel pom
> > --jar pom
> > ----FooBar pom
> > --ejb pom
> > ----FooBarEjb pom
> >
> > You would then define the checkstyle stuff in the jar of ejb poms.
> >
> > But it will probably not fit somewhere.
> >
> > jeroen
> >
> >
> > On 19/04/07, Jeroen Leenarts < jeroen.leenarts@gmail.com> wrote:
> > >
> > > This will wett your appetite:
> > >
> > > /**
> > >       * @parameter expression="${project.packaging}"
> > >       * @readonly
> > >       */
> > >      private String packaging;
> > >
> > >     /**
> > >      * @see org.apache.maven.plugin.Mojo#execute ()
> > >      */
> > >     public void execute() throws MojoExecutionException,
> > > MojoFailureException {
> > >         getLog().info(packaging);
> > >         if (packaging == null || !packaging.equals("ejb")) {
> > >
> > > Regards,
> > >
> > > Jeroen
> > >
> > > On 19/04/07, Peter Nilsson < peterni@orcsoftware.com> wrote:
> > > >
> > > > Hi,
> > > >
> > > > I have a build tree with 30+ projects of different packaging (jar,
> > pom,
> > > > dll,
> > > > so, plugin, etc) built with Maven and I would like to specify in the
> > top
> > > > pom.xml that certain plugins are used for all projects of a given
> > > > packaging.
> > > > For example, I would like to have the CheckStyle plugin run on all
> > > > projects
> > > > with packaging "jar".
> > > >
> > > > Of course I can set the configuration of the plugins in the top pom
> > > > (with a
> > > > pluginmanagement tag) and then just invoke the plugin explicitly in
> > the
> > > > projects but I would like to enforce that the plugin is used for all
> > > > projects of the given packaging. It is very easy for example to
> > forget
> > > > to
> > > > add CheckStyle to a new jar project.
> > > >
> > > > Adding the possibility of using a packaging filter to an execution
> > > > element
> > > > would solve it, but there are perhaps other ways? Any ideas?
> > > >
> > > >         Peter
> > > >
> > > >
> > > >
> > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > > > For additional commands, e-mail: users-help@maven.apache.org
> > > >
> > > >
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
>


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


Re: Plugin execution for a specific packaging

Posted by Jeroen Leenarts <je...@gmail.com>.
I've looked it up in the docs:
http://maven.apache.org/pom.html#Properties

It might actually be "project.packaging".
Jeroen

On 19/04/07, Jeroen Leenarts <je...@gmail.com> wrote:
>
> You might be on to something there....
>
> The page:
> http://maven.apache.org/guides/introduction/introduction-to-profiles.html
> mentiones this piece of code. Activiation based on a property.
>
> This will activate the profile when the system property "debug" is
> specified with any value:
>
> <profiles>
>   <profile>
>     <activation>
>       <property>
>
>         <name>debug</name>
>       </property>
>     </activation>
>     ...
>   </profile>
> </profiles>
>
>
> Wouldn't a property named "packaging" with the relevant value work?
> Packaging is the tag defining a projects, ehr, packaging. Which is exactly
> the granularity you want to configure at.
>
> Well worth to try.
>
> Jeroen
>
> On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
> >
> > Yes, for the plugins we have developed in house it is no problem but
> > that is
> > not what I am struggling with right now (as you noticed).
> >
> > Reorganizing the tree is an option and is exactly what I am considering
> > right now. However, I would rather keep a functional organization of my
> > build tree and use features of the build system for controlling the
> > build of
> > different type of artifacts. A functional organization makes it easier
> > for
> > developers to check out and build only the part of the tree they are
> > working
> > on. A build tree organized after artifact type does not map to
> > responsible
> > developer/team very well.
> >
> > Perhaps it would be possible to use profiles for controlling the use of
> > plugins and let the packaging activate the profile?
> >
> > Thanks.
> >
> >   Peter
> >
> > -----Original Message-----
> > From: Jeroen Leenarts [mailto:jeroen.leenarts@gmail.com]
> > Sent: den 19 april 2007 10:44
> > To: Maven Users List
> > Subject: Re: Plugin execution for a specific packaging
> >
> > So yes it is possible, but not declarativly..
> >
> > (I just read your post again, and see that you are using standard Maven
> > mojo's and are not developing your own.)
> >
> > You probably noticed that running a mojo for all projects is easy. But
> > that
> > running for a subtype is more work.
> >
> > You could consider using an inheritance tree for your poms.
> >
> > + toplevel pom
> > --jar pom
> > ----FooBar pom
> > --ejb pom
> > ----FooBarEjb pom
> >
> > You would then define the checkstyle stuff in the jar of ejb poms.
> >
> > But it will probably not fit somewhere.
> >
> > jeroen
> >
> >
> > On 19/04/07, Jeroen Leenarts < jeroen.leenarts@gmail.com> wrote:
> > >
> > > This will wett your appetite:
> > >
> > > /**
> > >       * @parameter expression="${project.packaging}"
> > >       * @readonly
> > >       */
> > >      private String packaging;
> > >
> > >     /**
> > >      * @see org.apache.maven.plugin.Mojo#execute ()
> > >      */
> > >     public void execute() throws MojoExecutionException,
> > > MojoFailureException {
> > >         getLog().info(packaging);
> > >         if (packaging == null || !packaging.equals("ejb")) {
> > >
> > > Regards,
> > >
> > > Jeroen
> > >
> > > On 19/04/07, Peter Nilsson < peterni@orcsoftware.com> wrote:
> > > >
> > > > Hi,
> > > >
> > > > I have a build tree with 30+ projects of different packaging (jar,
> > pom,
> > > > dll,
> > > > so, plugin, etc) built with Maven and I would like to specify in the
> > top
> > > > pom.xml that certain plugins are used for all projects of a given
> > > > packaging.
> > > > For example, I would like to have the CheckStyle plugin run on all
> > > > projects
> > > > with packaging "jar".
> > > >
> > > > Of course I can set the configuration of the plugins in the top pom
> > > > (with a
> > > > pluginmanagement tag) and then just invoke the plugin explicitly in
> > the
> > > > projects but I would like to enforce that the plugin is used for all
> > > > projects of the given packaging. It is very easy for example to
> > forget
> > > > to
> > > > add CheckStyle to a new jar project.
> > > >
> > > > Adding the possibility of using a packaging filter to an execution
> > > > element
> > > > would solve it, but there are perhaps other ways? Any ideas?
> > > >
> > > >         Peter
> > > >
> > > >
> > > >
> > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > > > For additional commands, e-mail: users-help@maven.apache.org
> > > >
> > > >
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
>

Re: Plugin execution for a specific packaging

Posted by Jeroen Leenarts <je...@gmail.com>.
You might be on to something there....

The page:
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
mentiones this piece of code. Activiation based on a property.

This will activate the profile when the system property "debug" is specified
with any value:

<profiles>
  <profile>
    <activation>
      <property>
        <name>debug</name>
      </property>
    </activation>
    ...
  </profile>
</profiles>


Wouldn't a property named "packaging" with the relevant value work?
Packaging is the tag defining a projects, ehr, packaging. Which is exactly
the granularity you want to configure at.

Well worth to try.

Jeroen

On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
>
> Yes, for the plugins we have developed in house it is no problem but that
> is
> not what I am struggling with right now (as you noticed).
>
> Reorganizing the tree is an option and is exactly what I am considering
> right now. However, I would rather keep a functional organization of my
> build tree and use features of the build system for controlling the build
> of
> different type of artifacts. A functional organization makes it easier for
> developers to check out and build only the part of the tree they are
> working
> on. A build tree organized after artifact type does not map to responsible
> developer/team very well.
>
> Perhaps it would be possible to use profiles for controlling the use of
> plugins and let the packaging activate the profile?
>
> Thanks.
>
>   Peter
>
> -----Original Message-----
> From: Jeroen Leenarts [mailto:jeroen.leenarts@gmail.com]
> Sent: den 19 april 2007 10:44
> To: Maven Users List
> Subject: Re: Plugin execution for a specific packaging
>
> So yes it is possible, but not declarativly..
>
> (I just read your post again, and see that you are using standard Maven
> mojo's and are not developing your own.)
>
> You probably noticed that running a mojo for all projects is easy. But
> that
> running for a subtype is more work.
>
> You could consider using an inheritance tree for your poms.
>
> + toplevel pom
> --jar pom
> ----FooBar pom
> --ejb pom
> ----FooBarEjb pom
>
> You would then define the checkstyle stuff in the jar of ejb poms.
>
> But it will probably not fit somewhere.
>
> jeroen
>
>
> On 19/04/07, Jeroen Leenarts <je...@gmail.com> wrote:
> >
> > This will wett your appetite:
> >
> > /**
> >       * @parameter expression="${project.packaging}"
> >       * @readonly
> >       */
> >      private String packaging;
> >
> >     /**
> >      * @see org.apache.maven.plugin.Mojo#execute ()
> >      */
> >     public void execute() throws MojoExecutionException,
> > MojoFailureException {
> >         getLog().info(packaging);
> >         if (packaging == null || !packaging.equals("ejb")) {
> >
> > Regards,
> >
> > Jeroen
> >
> > On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
> > >
> > > Hi,
> > >
> > > I have a build tree with 30+ projects of different packaging (jar,
> pom,
> > > dll,
> > > so, plugin, etc) built with Maven and I would like to specify in the
> top
> > > pom.xml that certain plugins are used for all projects of a given
> > > packaging.
> > > For example, I would like to have the CheckStyle plugin run on all
> > > projects
> > > with packaging "jar".
> > >
> > > Of course I can set the configuration of the plugins in the top pom
> > > (with a
> > > pluginmanagement tag) and then just invoke the plugin explicitly in
> the
> > > projects but I would like to enforce that the plugin is used for all
> > > projects of the given packaging. It is very easy for example to forget
> > > to
> > > add CheckStyle to a new jar project.
> > >
> > > Adding the possibility of using a packaging filter to an execution
> > > element
> > > would solve it, but there are perhaps other ways? Any ideas?
> > >
> > >         Peter
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > > For additional commands, e-mail: users-help@maven.apache.org
> > >
> > >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>

RE: Plugin execution for a specific packaging

Posted by Peter Nilsson <pe...@orcsoftware.com>.
Yes, for the plugins we have developed in house it is no problem but that is
not what I am struggling with right now (as you noticed).

Reorganizing the tree is an option and is exactly what I am considering
right now. However, I would rather keep a functional organization of my
build tree and use features of the build system for controlling the build of
different type of artifacts. A functional organization makes it easier for
developers to check out and build only the part of the tree they are working
on. A build tree organized after artifact type does not map to responsible
developer/team very well.

Perhaps it would be possible to use profiles for controlling the use of
plugins and let the packaging activate the profile?

Thanks.

  Peter

-----Original Message-----
From: Jeroen Leenarts [mailto:jeroen.leenarts@gmail.com] 
Sent: den 19 april 2007 10:44
To: Maven Users List
Subject: Re: Plugin execution for a specific packaging

So yes it is possible, but not declarativly..

(I just read your post again, and see that you are using standard Maven
mojo's and are not developing your own.)

You probably noticed that running a mojo for all projects is easy. But that
running for a subtype is more work.

You could consider using an inheritance tree for your poms.

+ toplevel pom
--jar pom
----FooBar pom
--ejb pom
----FooBarEjb pom

You would then define the checkstyle stuff in the jar of ejb poms.

But it will probably not fit somewhere.

jeroen


On 19/04/07, Jeroen Leenarts <je...@gmail.com> wrote:
>
> This will wett your appetite:
>
> /**
>       * @parameter expression="${project.packaging}"
>       * @readonly
>       */
>      private String packaging;
>
>     /**
>      * @see org.apache.maven.plugin.Mojo#execute ()
>      */
>     public void execute() throws MojoExecutionException,
> MojoFailureException {
>         getLog().info(packaging);
>         if (packaging == null || !packaging.equals("ejb")) {
>
> Regards,
>
> Jeroen
>
> On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
> >
> > Hi,
> >
> > I have a build tree with 30+ projects of different packaging (jar, pom,
> > dll,
> > so, plugin, etc) built with Maven and I would like to specify in the top
> > pom.xml that certain plugins are used for all projects of a given
> > packaging.
> > For example, I would like to have the CheckStyle plugin run on all
> > projects
> > with packaging "jar".
> >
> > Of course I can set the configuration of the plugins in the top pom
> > (with a
> > pluginmanagement tag) and then just invoke the plugin explicitly in the
> > projects but I would like to enforce that the plugin is used for all
> > projects of the given packaging. It is very easy for example to forget
> > to
> > add CheckStyle to a new jar project.
> >
> > Adding the possibility of using a packaging filter to an execution
> > element
> > would solve it, but there are perhaps other ways? Any ideas?
> >
> >         Peter
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
>


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


Re: Plugin execution for a specific packaging

Posted by Jeroen Leenarts <je...@gmail.com>.
So yes it is possible, but not declarativly..

(I just read your post again, and see that you are using standard Maven
mojo's and are not developing your own.)

You probably noticed that running a mojo for all projects is easy. But that
running for a subtype is more work.

You could consider using an inheritance tree for your poms.

+ toplevel pom
--jar pom
----FooBar pom
--ejb pom
----FooBarEjb pom

You would then define the checkstyle stuff in the jar of ejb poms.

But it will probably not fit somewhere.

jeroen


On 19/04/07, Jeroen Leenarts <je...@gmail.com> wrote:
>
> This will wett your appetite:
>
> /**
>       * @parameter expression="${project.packaging}"
>       * @readonly
>       */
>      private String packaging;
>
>     /**
>      * @see org.apache.maven.plugin.Mojo#execute ()
>      */
>     public void execute() throws MojoExecutionException,
> MojoFailureException {
>         getLog().info(packaging);
>         if (packaging == null || !packaging.equals("ejb")) {
>
> Regards,
>
> Jeroen
>
> On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
> >
> > Hi,
> >
> > I have a build tree with 30+ projects of different packaging (jar, pom,
> > dll,
> > so, plugin, etc) built with Maven and I would like to specify in the top
> > pom.xml that certain plugins are used for all projects of a given
> > packaging.
> > For example, I would like to have the CheckStyle plugin run on all
> > projects
> > with packaging "jar".
> >
> > Of course I can set the configuration of the plugins in the top pom
> > (with a
> > pluginmanagement tag) and then just invoke the plugin explicitly in the
> > projects but I would like to enforce that the plugin is used for all
> > projects of the given packaging. It is very easy for example to forget
> > to
> > add CheckStyle to a new jar project.
> >
> > Adding the possibility of using a packaging filter to an execution
> > element
> > would solve it, but there are perhaps other ways? Any ideas?
> >
> >         Peter
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
>

Re: Plugin execution for a specific packaging

Posted by Jeroen Leenarts <je...@gmail.com>.
This will wett your appetite:

/**
      * @parameter expression="${project.packaging}"
      * @readonly
      */
     private String packaging;

    /**
     * @see org.apache.maven.plugin.Mojo#execute()
     */
    public void execute() throws MojoExecutionException,
MojoFailureException {
        getLog().info(packaging);
        if (packaging == null || !packaging.equals("ejb")) {

Regards,

Jeroen

On 19/04/07, Peter Nilsson <pe...@orcsoftware.com> wrote:
>
> Hi,
>
> I have a build tree with 30+ projects of different packaging (jar, pom,
> dll,
> so, plugin, etc) built with Maven and I would like to specify in the top
> pom.xml that certain plugins are used for all projects of a given
> packaging.
> For example, I would like to have the CheckStyle plugin run on all
> projects
> with packaging "jar".
>
> Of course I can set the configuration of the plugins in the top pom (with
> a
> pluginmanagement tag) and then just invoke the plugin explicitly in the
> projects but I would like to enforce that the plugin is used for all
> projects of the given packaging. It is very easy for example to forget to
> add CheckStyle to a new jar project.
>
> Adding the possibility of using a packaging filter to an execution element
> would solve it, but there are perhaps other ways? Any ideas?
>
>         Peter
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>