Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [m2e-dev] [m2eclipse-dev] About lifecycle mapping extensibility

Sure.

People use checkstyle and pmd in maven.

The goal is to take the exact configuration from the maven plugins and
push it into the corresponding eclipse plugin.

A parent project might have a pluginManagement that supplies some of
the configuration, while the leaf project might add or override some
of them.

When someone runs maven, these various overlapping sections are
resolved into a set of properties that make up the configurations for
a particular execution. That's the properties that I want to turn
around and push into the corresponding eclipse plugin.

I thought I was being pretty clever to use the execution plan to get
this, but people have asked me to make this work even when they bind
the plugin to a phase that isn't in the relevant execution plan.

--benson




On Wed, Jan 19, 2011 at 9:12 AM, Igor Fedorenko <igor@xxxxxxxxxxxxxx> wrote:
> Can you explain what you are trying to achieve?
>
> --
> Regards,
> Igor
>
> On 11-01-18 10:20 PM, Benson Margulies wrote:
>>
>> Igor,
>>
>> I'd love to go try this out with the checkstyle/pmd stuff. Could you
>> possibly help me out by answering the following question I posed on
>> the maven user list?
>>
>> Consider a project with an arbitrary structure of parent that might
>> contain plugins and plugin management.
>>
>> In an M2Eclipse plugin I'm maintain, I am asking the question:
>>
>> "Is there an execution of GROUP:ARTIFACT:GOAL, and, if so, what is the
>> contents of the<configuration/>  element?"
>>
>> I currently do this by walking an execution plan.
>>
>> This depends on the plugin being bound to a phase in the lifecycle
>> used to build the execution plan.
>>
>> users have asked me if I can't come up with some other scheme that
>> does not require the lifecycle binding.
>>
>> Is there a way to navigate the plugins of the 'effective pom' to this
>> effect using the API?
>>
>> --benson
>>
>>
>> On Tue, Jan 18, 2011 at 7:54 PM, Igor Fedorenko<igor@xxxxxxxxxxxxxx>
>>  wrote:
>>>
>>> FYI, I've just pushed implementation of "secondary" project configurator
>>> support [1] and corresponding test [2].
>>>
>>> At this point we are mostly done with changes to lifecycle mapping and
>>> project configuration API. Now is a good time to start looking at it and
>>> give us feedback whether the new API works or does not work for your m2e
>>> extensions.
>>>
>>> [1]
>>>
>>> http://git.eclipse.org/c/m2e/m2e-core.git/commit/?id=d24be2000cccd5bd4dff3dd8ef6227f3f3a1a5ad
>>> [2]
>>>
>>> https://github.com/sonatype/m2e-core-tests/commit/94694312fa6368254fba5353b9fa00027b76db6d
>>>
>>> --
>>> Regards,
>>> Igor
>>>
>>>
>>>
>>>
>>> On 11-01-15 12:51 AM, Igor Fedorenko wrote:
>>>>
>>>> Our goal for build lifecycle mapping work is two fold. First, for any
>>>> maven project, we want m2e to be able to tell with reasonable confidence
>>>> if current eclipse installation supports development of the project or
>>>> not. Second, we want m2e to be able to find and offer installation of
>>>> additional components needed to support the project. So when somebody
>>>> imports a war project into a stock m2e installation, we want m2e to tell
>>>> the user that war development is not supported but m2e-wtp can be
>>>> installed to provide such support should the user allows m2e to do so.
>>>>
>>>> Our current thinking is to base "supported/not supported" determination
>>>> using combination of project packaging type and maven plugins bound to
>>>> project build lifecycle. On command line, these fully define build
>>>> behaviour and results and thus provide direct indication of IDE features
>>>> required to work on the project.
>>>>
>>>> We also believe that "supported/not supported" determination should be
>>>> metadata-driven. This is needed to enable discovery and installation of
>>>> additional required components. As added benefit, it will also allow m2e
>>>> to avoid unnecessary bundle activation, which I believe is one of soft
>>>> requirements for release train participants.
>>>>
>>>> Although project configurator API remains mostly unchanged in 0.13.x,
>>>> m2e core will not blindly call all installed configurators for all
>>>> workspace projects any more. Instead the core will use "the build
>>>> lifecycle mapping metadata", as we call it, to only invoke applicable
>>>> project configurators.
>>>>
>>>> This mapping metadata can contain two element types.<lifecycleMapping/>
>>>> tells m2e what lifecycle mapping strategy it should use for what
>>>> packaging type.<pluginExecution/>  tells m2e what project configuration
>>>> it should use what plugin execution. m2e considers a maven project
>>>> "supported" if there is one and only one mapping element for project
>>>> packaging type and each interesting plugin execution.
>>>>
>>>> Couple of real-world mapping metadata examples
>>>>
>>>> [1]
>>>>
>>>>
>>>> https://github.com/sonatype/m2eclipse-tycho/blob/master/org.sonatype.tycho.m2e/lifecycle-mapping-metadata.xml
>>>>
>>>> [2]
>>>>
>>>>
>>>> https://github.com/sonatype/m2eclipse-extras/blob/master/org.maven.ide.eclipse.temporary.mojos/lifecycle-mapping-metadata.xml
>>>>
>>>>
>>>>
>>>> And now, finally, I get to JBoss Tools Maven integration ;-)
>>>>
>>>> We discussed this internally, and we think m2e core can support your use
>>>> case by extending mapping metadata with notion of "secondary" project
>>>> configurators. When finding mapping for a plugin execution, m2e core
>>>> will require one and only one regular (or primary) configurator, but
>>>> will allow any number of secondary configurators. The core will
>>>> guarantee primary configurators are invoked before their secondaries.
>>>>
>>>> For example, mapping for the CDI configurator will tell m2e to enable
>>>> the CDI configurator for maven-compile-plugin as secondary to the java
>>>> configurator from m2e-jdt.
>>>>
>>>> We do not plan to add metadata to describe fine-grained configurator
>>>> activation conditions like "if cdi-api.ja artifact is present on
>>>> classpath". As a consequence of this, m2e will not be able to reliably
>>>> detect if secondary configurators are required or not and will not be
>>>> able to automatically discover and install them. So users will have to
>>>> download and install JBossTools manually.
>>>>
>>>> --
>>>> Regards,
>>>> Igor
>>>>
>>>> On 11-01-05 12:39 PM, Snjezana Peco wrote:
>>>>>
>>>>> JBoss Maven Integration includes five Maven Configurators. Some of them
>>>>> work with WTP projects (war, ejb or ear), some with simple Java
>>>>> projects.
>>>>> The CDI configurator, for instance, enables CDI capabilities if a
>>>>> project contains the javax.enterprise:cdi-api dependency. The project
>>>>> can, but doesn't have to be a WTP project.
>>>>> All our configurators depend on m2-eclipse wtp and m2eclipse Java
>>>>> configurators. They have a higher priority and suppose that m2eclipse
>>>>> configurators are executed. For instance: the JSF configurator adds the
>>>>> WTP JSF facet to the project. It considers that the m2eclipse-core
>>>>> configurator has created a Java project and the m2eclipse-wtp
>>>>> configurator has created a WTP project and added the base facets (Web
>>>>> Module, Java Facet ...).
>>>>> The JBoss Maven Configurators aren't the only configurators dependents
>>>>> on other configurators. Some WTP configurators (war, ejb) depend on
>>>>> Java
>>>>> configurators.
>>>>>
>>>>> Snjeza
>>>>>
>>>>> Igor Fedorenko wrote:
>>>>>>
>>>>>> Quick observation, you are "hooking" to war-plugin and/or war
>>>>>> packaging
>>>>>> type, but have additional conditions you need to check, i.e. presence
>>>>>> of
>>>>>> certain dependencies.
>>>>>>
>>>>>> --
>>>>>> Regards,
>>>>>> Igor
>>>>>>
>>>>>> On 10-12-28 03:27 AM, Max Rydahl Andersen wrote:
>>>>>>>
>>>>>>> On Dec 22, 2010, at 06:02, Igor Fedorenko wrote:
>>>>>>>
>>>>>>>> Fred,
>>>>>>>>
>>>>>>>> I think having specific use case in front of us will make discussion
>>>>>>>> much more productive. Can you or somebody from JBoss Tools team
>>>>>>>> provide
>>>>>>>> a sample project and explain how it builds on command line and what
>>>>>>>> should happen inside IDE? Don't worry about current or proposed
>>>>>>>> m2e-core
>>>>>>>> API, assume m2e-core can do anything you want at this point.
>>>>>>>
>>>>>>> A quick response over the holidays:
>>>>>>>
>>>>>>> Our usecase for the configurators in JBoss Tools have primarily been
>>>>>>> that
>>>>>>> we enable the framework specific natures/facets based on maven
>>>>>>> dependencies
>>>>>>> and in some cases maven plugin usage.
>>>>>>>
>>>>>>> i.e. we enable basic CDI support in Eclipse (enables the CDI nature)
>>>>>>> if the cdi-api.jar artifact is referenced;
>>>>>>> and we enable the CDI Facet if the the project has the WTP WAR facet
>>>>>>> enabled (which it will have if the
>>>>>>> WTP-m2eclipse plugin is installed)
>>>>>>>
>>>>>>> Similar story goes for hibernate, seam, jsf and portal in our current
>>>>>>> code base:
>>>>>>> https://anonsvn.jboss.org/repos/jbosstools/trunk/maven/plugins
>>>>>>>
>>>>>>> Some of these does a little bit more; i.e. our Seam plugins needs to
>>>>>>> workaround MNGECLIPSE-2433
>>>>>>>
>>>>>>>
>>>>>>> (https://anonsvn.jboss.org/repos/jbosstools/trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/FixClasspathConfigurator.java)
>>>>>>>
>>>>>>> and we also need to setup additional metadata about certain
>>>>>>> directories (i.e. where is the model src folder, where is test etc.
>>>>>>> that we can get from the pom.xml)
>>>>>>>
>>>>>>>
>>>>>>> https://anonsvn.jboss.org/repos/jbosstools/trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/SeamProjectConfigurator.java
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Thus we basically doesn't hook into any plugin lifecycles; we purely
>>>>>>> (for now) extend upon the implicit usage of dependencies as a way to
>>>>>>> enable/disable features in IDE since that is what the user does by
>>>>>>> including the dependencies.
>>>>>>>
>>>>>>> /max
>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Regards,
>>>>>>>> Igor
>>>>>>>>
>>>>>>>> On 10-12-21 07:16 PM, Fred Bricon wrote:
>>>>>>>>>
>>>>>>>>> Hello World,
>>>>>>>>>
>>>>>>>>> as you may or may not know, m2e-core's API will change in the
>>>>>>>>> project
>>>>>>>>> configuration area, starting from v0.13 or later.
>>>>>>>>> First of all, I must confess I haven't looked at the new lifecycle
>>>>>>>>> API
>>>>>>>>> yet so feel free to bash me.
>>>>>>>>> After talking to Igor and *_from what I understand_*, project
>>>>>>>>> configurators will be bound to packaging type and/or mojo
>>>>>>>>> execution.
>>>>>>>>>
>>>>>>>>> The lifecycle mapping API is not finished yet, but that would
>>>>>>>>> probably
>>>>>>>>> mean if 2 plugins claim they need to configure the same packaging,
>>>>>>>>> an
>>>>>>>>> error message could be displayed to the user, asking him to choose
>>>>>>>>> which
>>>>>>>>> one to use, in the pom. That makes sense when these 2 plugins are
>>>>>>>>> competing against each other and I'm all for it.
>>>>>>>>>
>>>>>>>>> But if things go that way, in the case of WTP projects, if another
>>>>>>>>> 3rd
>>>>>>>>> party plugin - say JBoss Tools- needs to enhance current JavaEE
>>>>>>>>> projects
>>>>>>>>> behavior (adding JSF, Seam or more facets),
>>>>>>>>> it would first break current m2eclipse-wtp/jbt integration, then
>>>>>>>>> users
>>>>>>>>> would have to explicitely configure their pom.xml.
>>>>>>>>> I really think having to modify the pom.xml to adapt to the IDE is
>>>>>>>>> a
>>>>>>>>> wrong idea - IN THIS CASE -, when we could get it to work smoother.
>>>>>>>>>
>>>>>>>>> It'd be better, IMHO, if 3rd party plugins could "extend" or
>>>>>>>>> "contribute
>>>>>>>>> to" an existing lifecycle mapping.
>>>>>>>>>
>>>>>>>>> <discussion>open</discussion>
>>>>>>>>>
>>>>>>>>> regards,
>>>>>>>>>
>>>>>>>>> Fred Bricon
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> "Have you tried turning it off and on again" - The IT Crowd
>>>>>>>
>>>>>
>>>> _______________________________________________
>>>> m2e-dev mailing list
>>>> m2e-dev@xxxxxxxxxxx
>>>> https://dev.eclipse.org/mailman/listinfo/m2e-dev
>>>
>>> _______________________________________________
>>> m2e-dev mailing list
>>> m2e-dev@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/m2e-dev
>>>
>> _______________________________________________
>> m2e-dev mailing list
>> m2e-dev@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/m2e-dev
>
> _______________________________________________
> m2e-dev mailing list
> m2e-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/m2e-dev
>


Back to the top