Le sam. 11 juil. 2020 à 14:43, Robert Scholte <rfscho...@apache.org> a
écrit :

> Packaging should refer to the type of resulting main artifact.
> I see quite often that the jar-lifecycle is used, whereas the result is
> not a jar. They try to fix this by changing the phase the none for several
> goals.
> Also, I know it is possible to generate a war with the soapui-maven-plugin
> based on a soapui config file, so this one should have packaging: war,
> binding: pom
>

I dont think it makes sense today, it is common to have 4-5 different
"packaging" per module - strictly speaking we always had pom and jar for
jat packaging. Nowdays we have jar, zip, openapi.json, docker, remote image
(oci) *per* module (often the project itself) and it is a good thing
compared to be forced to split in 5 fake module just to respect 1
package/module IMHO so let's drop packaging notion which is no more
matching the way we work/dev today and focus on lifecycle/binding only IMHO.



> Robert
> On 11-7-2020 12:59:23, Romain Manni-Bucau <rmannibu...@gmail.com> wrote:
> Le sam. 11 juil. 2020 à 12:39, Robert Scholte a
> écrit :
>
> > such solution confirms that packaging is used for 2 different things,
> > which should be split in the next pom definition:
> > packaging: the resulting artifact
> > binding: the bindings to use for the default/build lifecycle.
> >
>
> This just replace the term packaging by binding. At the end you define a
> chain of plugins for a module which leads to artifacts, whatever terms you
> use this does not change much (and is the only goal of a build right? ;)).
> Today packaging defines a binding and the actual packaging is just one
> plugin of the binding loaded from packaging string so IMHO it is the same.
>
>
>
> > Robert
> > On 11-7-2020 12:09:49, Hervé BOUTEMY wrote:
> > are really your plugin bindings so specific to your build that they could
> > not be reused and need full ad-hoc definition?
> >
> > I imagined to provide composite packaging: war+front+living-doc+docker
> >
> > in fact, "front", "living-doc", "docker" could provide secondary sets of
> > reusable plugins bindings: each build would compose (with "+") based on
> his
> > requirements
> >
> > this could be injected by the LifecycleBindingsInjector [1]
> >
> > WDYT?
> >
> > Regards,
> >
> > Hervé
> >
> > [1]
> >
> https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java#L63
> >
> > Le vendredi 10 juillet 2020, 19:33:35 CEST Romain Manni-Bucau a écrit :
> > > Looked a bit on how to impl this kind of extension and it would help if
> > > maven wouldn't assume everything is hardcoded in components.xml (or eq)
> > or
> > > if sisu would enable to reuse its plexus scanner which has a very low
> > > visibility today. It is also weird to not have access to the guice
> > injector
> > > in components and have to go through the plexuscontainer to lookup
> beans.
> > >
> > > As code often says more than words, here a small hello world showing
> that
> > > reusing this part of maven "core" is not that trivial:
> > >
> > > @Component(role = AbstractMavenLifecycleParticipant.class)
> > > public class CustomLifecycleExtension extends
> > > AbstractMavenLifecycleParticipant {
> > > @Inject
> > > private PlexusContainer container;
> > >
> > > @Override
> > > public void afterProjectsRead(final MavenSession session) throws
> > > MavenExecutionException {
> > > final Path root =
> > > session.getRequest().getMultiModuleProjectDirectory().toPath();
> > > final Path configFolder = root.resolve(".extensions/custom");
> > >
> > > final Path mappings = configFolder.resolve("mappings.xml");
> > > if (Files.exists(mappings)) {
> > > final ComponentSetDescriptor componentSet =
> > > readAs(mappings, ComponentSetDescriptor.class, null);
> > > System.out.println(componentSet);
> > > }
> > >
> > > super.afterProjectsRead(session);
> > > }
> > >
> > > private T readAs(final Path path, final Class type, final
> > > String wrapper) {
> > > try {
> > > final ClassRealm container = this.container.getContainerRealm();
> > > final Class converterType = container
> > >
> > > .loadClass("org.eclipse.sisu.plexus.PlexusBeanConverter"); final Class
> > > typeLiteralType = container
> > > .loadClass("com.google.inject.TypeLiteral");
> > > final Object converter = this.container.lookup(converterType);
> > > return type.cast(converterType.getMethod("convert",
> > > typeLiteralType, String.class).invoke(
> > > converter,
> > > typeLiteralType.getMethod("get",
> > > Class.class).invoke(null, type),
> > > (wrapper != null ? "" : "") +
> > > new String(Files.readAllBytes(path),
> > > StandardCharsets.UTF_8)
> > > .replaceFirst("]+\\?>",
> > > "").trim() + (wrapper != null ? "" : ""))); } catch
> > > (final Exception e) {
> > > throw new IllegalStateException(e);
> > > }
> > > }
> > > }
> > >
> > > Indeed it can't work since componentsetdescriptor uses
> > plexusconfiguration
> > > which is not instantiable but it shows the workarounds needed to just
> > > lookup plexus converter and reuse plexus xml binding.
> > >
> > > The code should just look like that IMHO:
> > >
> > > @Component(role = AbstractMavenLifecycleParticipant.class)
> > > public class CustomLifecycleExtension extends
> > > AbstractMavenLifecycleParticipant {
> > > @Inject
> > > private PlexusBeanConverter converter;
> > >
> > > @Override
> > > public void afterProjectsRead(final MavenSession session) throws
> > > MavenExecutionException {
> > > final Path root =
> > > session.getRequest().getMultiModuleProjectDirectory().toPath();
> > > final Path configFolder = root.resolve(".extensions/custom");
> > >
> > > final Path mappings = configFolder.resolve("mappings.xml");
> > > if (Files.exists(mappings)) {
> > > final ComponentSetDescriptor componentSet =
> > > readAs(mappings, ComponentSetDescriptor.class, null);
> > > System.out.println(componentSet);
> > > }
> > >
> > > super.afterProjectsRead(session);
> > > }
> > >
> > > private T readAs(final Path path, final Class type, final
> > > String wrapper) {
> > > try {
> > > return type.cast(
> > > converter.convert(TypeLiteral.get(type),
> > > (wrapper != null ? "" : "") +
> > > new
> > > String(Files.readAllBytes(path), StandardCharsets.UTF_8)
> > >
> > > .replaceFirst("]+\\?>", "").trim() +
> > > (wrapper != null ? "
> > > + ">" : "")));
> > > } catch (final Exception e) {
> > > throw new IllegalStateException(e);
> > > }
> > > }
> > > }
> > >
> > > Once this part is fixed (using a custom parser) the next one is how to
> > > contribute global components from an extension.
> > >
> > > I'll ignore the parsing - currently I have a custom sax parser but I
> hope
> > > to be able to drop it soon - it is quite easy to contribute back the
> new
> > > mapping - note i dropped the lifecycle particupant which does not
> really
> > > help there cause only contributing mappings when the extension is
> created
> > > makes sense:
> > >
> > > @Component(role = StartupContributor.class, instantiationStrategy =
> > > Strategies.LOAD_ON_START)
> > > public class StartupContributor {
> > > @Inject
> > > private MavenSession session;
> > >
> > > @Inject
> > > private PlexusContainer container;
> > >
> > > @PostConstruct
> > > public void init() {
> > > final Path root =
> > > session.getRequest().getMultiModuleProjectDirectory().toPath();
> > > final Path configFolder = root.resolve(".extensions/custom");
> > >
> > > final Path mappings = configFolder.resolve("mappings.xml");
> > > if (Files.exists(mappings)) {
> > > final DefaultLifecycleMapping mapping =
> > > *loadOrParse(*mappings*)*;
> > >
> > > container.addComponent(mapping, LifecycleMapping.class,
> > > "my-mapping");
> > > }
> > > }
> > > }
> > >
> > > Then we can put the new mapping as packaging and voilà :).
> > >
> > > If you have tips for the parsing it is welcomed otherwise I'll continue
> > to
> > > play with my custom parser.
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau | Blog
> > > | Old Blog
> > > | Github
> > > | LinkedIn | Book
> > >
> > > >
> > >
> > >
> > > Le dim. 5 juil. 2020 à 11:09, Romain Manni-Bucau a
> > >
> > > écrit :
> > > > Here is a sample public build:
> > https://github.com/talend/component-runtime
> > > > Interesting modules are - just listing one per type - if master looks
> > > > weird tag 1.1.19 can be a fallback:
> > > >
> > > > 1.
> > > >
> >
> https://github.com/Talend/component-runtime/blob/master/component-starter-
> > > > server/pom.xml 2.
> > > >
> >
> https://github.com/Talend/component-runtime/blob/master/documentation/pom.
> > > > xml 3.
> > > >
> >
> https://github.com/Talend/component-runtime/blob/master/images/component-s
> > > > erver-image/pom.xml
> > > >
> > > > Side note being some other - private :( - module do all the 3 things
> > in a
> > > > single module - and indeed faking module for build constraints is not
> > an
> > > > option.
> > > >
> > > > Hope it helps.
> > > >
> > > > Le dim. 5 juil. 2020 à 11:02, Hervé BOUTEMY a
> > > >
> > > > écrit :
> > > >> Le samedi 4 juillet 2020, 23:15:19 CEST Romain Manni-Bucau a écrit :
> > > >> > Le sam. 4 juil. 2020 à 18:09, Stephen Connolly
> > > >> >
> > > >> > stephen.alan.conno...@gmail.com> a écrit :
> > > >> > > On Sat 4 Jul 2020 at 16:54, Romain Manni-Bucau
> > > >> > >
> > > >> > > wrote:
> > > >> > > > Le sam. 4 juil. 2020 à 16:38, Stephen Connolly
> > > >> > > >
> > > >> > > > stephen.alan.conno...@gmail.com> a écrit :
> > > >> > > > > On Sat 4 Jul 2020 at 10:21, Romain Manni-Bucau
> > > >>
> > > >> rmannibu...@gmail.com>
> > > >>
> > > >> > > > > wrote:
> > > >> > > > > > Well, there are two points I'd like to emphasis:
> > > >> > > > > >
> > > >> > > > > > 1. I dont think we should wait for 2 majors to get that
> as a
> > > >> > > > > > feature,
> > > >> > > > >
> > > >> > > > > would
> > > >> > > > >
> > > >> > > > > > be too late IMHO
> > > >> > > > >
> > > >> > > > > Well does my dynamic phases PR do what you need?
> > > >> > > >
> > > >> > > > Partly if you think to priority one, it moves the issue a bit
> > > >>
> > > >> further
> > > >>
> > > >> > > > due
> > > >> > > > to priority usage which is not great in practice compare to
> > names +
> > > >> > > > requires to use 100, 200 etc to be able to inject plugin
> between
> > > >> > > > two
> > > >> > >
> > > >> > > others
> > > >> > >
> > > >> > > > in children with the project becoming more complex. Think we
> > must
> > > >>
> > > >> have
> > > >>
> > > >> > > > an
> > > >> > > > explicit control here even with complex hierarchies.
> > > >> > >
> > > >> > > If you need that much control then you’re doing something wrong.
> > > >> > >
> > > >> > > How often do you need more than 3-4 plugin executions in strict
> > > >>
> > > >> ordered
> > > >>
> > > >> > > succession?
> > > >> >
> > > >> > All my projects not being libraries since ~7 years. Frontend is
> > often 3
> > > >> > exec, living doc is often 4-5 exec, docker is often 3-4 exec too
> > (needs
> > > >> > some computation steps for cds or build time precomputation
> things)
> > > >> > plus
> > > >> > custom resources, git integration meta, custom artifact
> attachement,
> > > >>
> > > >> etc...
> > > >> I like this approach: can we share a demo project to have a concrete
> > > >> case?
> > > >>
> > > >> > These are very common use cases today in the same build. It is key
> > to
> > > >>
> > > >> keep
> > > >>
> > > >> > a single build orchestrator (mvn) for team sharing and CI
> > > >> > industrialization. Issue being each project set it up differently
> > and
> > > >> > making it generic is often overcomplex (living doc can be jbake
> > plugin
> > > >>
> > > >> or a
> > > >>
> > > >> > plain mvn exec:java or a groovy script etc... depending doc output
> > and
> > > >> > reusability of the code+libs). With software lifecycle passing
> from
> > > >>
> > > >> years
> > > >>
> > > >> > to months we are in a more dynamic and changing ecosystem our
> > beloved
> > > >>
> > > >> build
> > > >>
> > > >> > tool should align on IMHO.
> > > >>
> > > >> I suppose we all agree from very high level point of view: IMHO, we
> > now
> > > >> need
> > > >> to dig a little more in detail on typical cases, with sample demo
> > builds.
> > > >> Then
> > > >> we'll work on solutions.
> > > >>
> > > >> > > That sounds like a dedicated plugin use case
> > > >> >
> > > >> > This is why i want a generic extension as solution, each project
> > have
> > > >>
> > > >> its
> > > >>
> > > >> > specificities and standardizing it is hard and likely adds too
> much
> > > >> > complexity compared to let the user enriching default phases (can
> > be a
> > > >> > merge of 2 packagings instead of a new one fully defined).
> > > >>
> > > >> yes, looks like adding "sub-packaging"s for additional build aspects
> > > >> (frontend, living doc, container, ...), taking care of eventual
> > > >> interactions
> > > >> between each one
> > > >>
> > > >> > If I stick to plain maven and want a clean build without
> > workarounds I
> > > >>
> > > >> must
> > > >>
> > > >> > write plugins+extensions for each of the apps - plugins and ext
> > must be
> > > >> > reusable or not be IMHO, sounds not great whereas maven backbone
> is
> > > >> > very
> > > >> > good, this is why I want to push it to the next step to keep a
> high
> > > >>
> > > >> quality
> > > >>
> > > >> > unique (in terms of #tools) build for projects.
> > > >> >
> > > >> > I dont have big blockers to do it without patching maven itself so
> > will
> > > >>
> > > >> not
> > > >>
> > > >> > spend much energy if idea is not liked but I hope maven tackles it
> > some
> > > >>
> > > >> day
> > > >>
> > > >> > in a built in fashion (which means better IDE and ecosystem
> > integration
> > > >> > even if personally I dont abuse of that).
> > > >>
> > > >> from experience, sharing a solution before sharing issues that the
> > > >> solution is
> > > >> expected to solve makes it hard to get consensus.
> > > >> You shared the high level issue: that's great.
> > > >> Now we must share sample builds.
> > > >> And work on solutions.
> > > >> I'm all in
> > > >>
> > > >> Regards,
> > > >>
> > > >> Hervé
> > > >>
> > > >> > > > > > 2. Pom model is based on inheritance whereas years showed
> > > >> > > > > > composition
> > > >> > > >
> > > >> > > > and
> > > >> > > >
> > > >> > > > > > reuse is saner so IMHO it does not belong to pom but .mvn
> > > >> > > > >
> > > >> > > > > Your proposal would only work if all projects shared the
> same
> > > >> > > > > packaging
> > > >> > > >
> > > >> > > > as
> > > >> > > >
> > > >> > > > > Hervé pointed out that the lifecycle is pulled in based on
> > > >>
> > > >> packaging.
> > > >>
> > > >> > > > No cause you define the packaging to use in the pom already -
> > > >> > > > since
> > > >> > >
> > > >> > > maven
> > > >> > >
> > > >> > > > 2 IIRC - so you can define as much packagings as you want in
> > .mvn.
> > > >>
> > > >> To be
> > > >>
> > > >> > > > concrete, it just enables to have an exploded extension in the
> > > >>
> > > >> project
> > > >>
> > > >> > > > instead of requiring it to be packaged as a jar. Does not
> > reinvent
> > > >>
> > > >> the
> > > >>
> > > >> > > > wheel ;).
> > > >> > > >
> > > >> > > > > What you probably want is .mvn/${packaging}/lifecycle.xml so
> > you
> > > >>
> > > >> can
> > > >>
> > > >> > > > > override custom
> > > >> > > > >
> > > >> > > > > A bug you may encounter is where phase names are not common
> > > >>
> > > >> across the
> > > >>
> > > >> > > > > reactor
> > > >> > > >
> > > >> > > > Yep, build/extension must enforce common checkpoints (package,
> > > >>
> > > >> install,
> > > >>
> > > >> > > > deploy out of my head) for all modules. Not a big deal if
> > validated
> > > >> > >
> > > >> > > during
> > > >> > >
> > > >> > > > initialize phase I think.
> > > >> > > >
> > > >> > > > > > Le sam. 4 juil. 2020 à 10:19, Robert Scholte
> > > >>
> > > >> rfscho...@apache.org>
> > > >>
> > > >> > > a
> > > >> > >
> > > >> > > > > > écrit :
> > > >> > > > > > > Stephen had an idea for it in Model 5.0.0[1], and IIRC I
> > > >>
> > > >> still had
> > > >>
> > > >> > > my
> > > >> > >
> > > >> > > > > > > concerns.
> > > >> > > > > > > It is still a draft with a lot of ideas, that hasn't
> > really
> > > >>
> > > >> been
> > > >>
> > > >> > > > > > discussed
> > > >> > > > > >
> > > >> > > > > > > yet, because it was still out of reach.
> > > >> > > > > > > However, we're getting closer
> > > >> > > > > > >
> > > >> > > > > > > Robert
> > > >> > > > > > >
> > > >> > > > > > >
> > > >> > > > > > > [1]
> > > >>
> > > >>
> >
> https://cwiki.apache.org/confluence/display/MAVEN/POM+Model+Version+5.0.0
> > > >> #
> > > >>
> > > >> > > POMModelVersion5.0.0-%3Cproject%3Eelement>
> > > >> > >
> > > >> > > > > > > On 4-7-2020 09:03:08, Romain Manni-Bucau
> > > >>
> > > >> rmannibu...@gmail.com>
> > > >>
> > > >> > > > > wrote:
> > > >> > > > > > > I agree I mixed both in my explanation....cause they
> only
> > > >> > > > > > > make
> > > >> > >
> > > >> > > sense
> > > >> > >
> > > >> > > > > > > together for a build as shown by the pre/post recurrent
> > > >>
> > > >> request
> > > >>
> > > >> > > which
> > > >> > >
> > > >> > > > > > aims
> > > >> > > > > >
> > > >> > > > > > > to enrich the lifecycle to bind custom plugins.
> > > >> > > > > > >
> > > >> > > > > > > Today projects are no more just about creating a jar -
> war
> > > >>
> > > >> are no
> > > >>
> > > >> > > > more
> > > >> > > >
> > > >> > > > > > > about java etc... - most of the time (frontend, living
> > doc,
> > > >>
> > > >> build
> > > >>
> > > >> > > > time
> > > >> > > >
> > > >> > > > > > > generation, security validation, ....). Indeed you can
> > force
> > > >>
> > > >> to
> > > >>
> > > >> > > bind
> > > >> > >
> > > >> > > > > > > plugins to existing phases but it is quite hard,
> unatural
> > and
> > > >> > >
> > > >> > > rarely
> > > >> > >
> > > >> > > > > > > maintainable in time: whatever you do, you want a custom
> > > >>
> > > >> packaging
> > > >>
> > > >> > > > > using
> > > >> > > > >
> > > >> > > > > > a
> > > >> > > > > >
> > > >> > > > > > > custom lifecycle (to be able to run separately phases of
> > the
> > > >>
> > > >> build
> > > >>
> > > >> > > -
> > > >> > >
> > > >> > > > > and
> > > >> > > > >
> > > >> > > > > > > sometimes independently, mvn frontend not depending of
> mvn
> > > >>
> > > >> package
> > > >>
> > > >> > > or
> > > >> > >
> > > >> > > > > mvn
> > > >> > > > >
> > > >> > > > > > > compile would be neat but not required for me).
> > > >> > > > > > >
> > > >> > > > > > > So the extension i have in mind will handle both or
> > wouldnt
> > > >> > > > > > > be
> > > >> > > >
> > > >> > > > usable.
> > > >> > > >
> > > >> > > > > > > About loosing the convention, after fighting for 7 years
> > to
> > > >>
> > > >> not
> > > >>
> > > >> > > > respect
> > > >> > > >
> > > >> > > > > > it,
> > > >> > > > > >
> > > >> > > > > > > I think the ecosystem changed and we must accept it as
> > bazel
> > > >>
> > > >> and
> > > >>
> > > >> > > > gradle
> > > >> > > >
> > > >> > > > > > do.
> > > >> > > > > >
> > > >> > > > > > > Does not mean we break ourself, we keep our default, it
> > just
> > > >>
> > > >> means
> > > >>
> > > >> > > an
> > > >> > >
> > > >> > > > > > > application must be able to redefining its own
> > > >>
> > > >> lifecycle+packaging
> > > >>
> > > >> > > > > (which
> > > >> > > > >
> > > >> > > > > > > is a pair named a build ;)).
> > > >> > > > > > >
> > > >> > > > > > > Think we can't stack plugin on a single phase anymore,
> > having
> > > >>
> > > >> 5+
> > > >>
> > > >> > > > > plugins
> > > >> > > > >
> > > >> > > > > > on
> > > >> > > > > >
> > > >> > > > > > > pre-package is very hard to maintain and share in a
> team -
> > > >>
> > > >> plus it
> > > >>
> > > >> > > > > doesnt
> > > >> > > > >
> > > >> > > > > > > really makes sense on a build point of view.
> > > >> > > > > > >
> > > >> > > > > > > Indeed we can add phases as we have process classes
> after
> > > >>
> > > >> compile,
> > > >>
> > > >> > > > > > > prepackage before package etc.. but it stays arbitrary
> for
> > > >>
> > > >> maven
> > > >>
> > > >> > > > > project
> > > >> > > > >
> > > >> > > > > > > dev and does not reflect the agility projects take these
> > days
> > > >>
> > > >> IMHO
> > > >>
> > > >> > > > and
> > > >> > > >
> > > >> > > > > if
> > > >> > > > >
> > > >> > > > > > > done in our core delivery it would slow down most build
> > for
> > > >> > > > > > > no
> > > >> > > > > > > gain
> > > >> > > >
> > > >> > > > so
> > > >> > > >
> > > >> > > > > it
> > > >> > > > >
> > > >> > > > > > > must be in user land IMHO.
> > > >> > > > > > >
> > > >> > > > > > > Hope it makes more sense presented this way.
> > > >> > > > > > >
> > > >> > > > > > >
> > > >> > > > > > >
> > > >> > > > > > > Le sam. 4 juil. 2020 à 05:28, Hervé BOUTEMY a
> > > >> > > > > > >
> > > >> > > > > > > écrit :
> > > >> > > > > > > > first: thanks for sharing
> > > >> > > > > > > >
> > > >> > > > > > > > from a high level point of view, the risk I see is to
> > loose
> > > >>
> > > >> our
> > > >>
> > > >> > > > > > > > conventions.
> > > >> > > > > > > > But let's try and see before judging
> > > >> > > > > > > >
> > > >> > > > > > > > I think there are 2 topics currently mixed:
> > > >> > > > > > > > - default lifecycle phases:
> > > >> > > > > > > > do you want to add or remove phases? [1]
> > > >> > > > > > > > - default plugin bindings:
> > > >> > > > > > > > clearly, you want to have specific default bindings.
> On
> > > >>
> > > >> default
> > > >>
> > > >> > > > > > > > bindings, as
> > > >> > > > > > > > they are defined per-packaging [2] (that's what is
> > > >> > > > > > > > triggered
> > > >> > >
> > > >> > > behind
> > > >> > >
> > > >> > > > > > > > packaging
> > > >> > > > > > > > in pom.xml)
> > > >> > > > > > > >
> > > >> > > > > > > > Regards,
> > > >> > > > > > > >
> > > >> > > > > > > > Hervé
> > > >> > > > > > > >
> > > >> > > > > > > > [1]
> > > >> > >
> > > >> > > https://maven.apache.org/ref/3.6.3/maven-core/lifecycles.html
> > > >> > >
> > > >> > > > > > > > [2]
> > > >>
> > > >> https://maven.apache.org/ref/3.6.3/maven-core/default-bindings.html
> > > >>
> > > >> > > > > > > > Le vendredi 3 juillet 2020, 09:20:25 CEST Romain
> > > >>
> > > >> Manni-Bucau a
> > > >>
> > > >> > > > écrit
> > > >> > > >
> > > >> > > > > > > > > Hi everyone,
> > > >> > > > > > > > >
> > > >> > > > > > > > > Wonder if we already discussed defining the
> lifecycle
> > in
> > > >>
> > > >> the
> > > >>
> > > >> > > > > project
> > > >> > > > >
> > > >> > > > > > > > (maybe
> > > >> > > > > > > >
> > > >> > > > > > > > > in $root/.mvn).
> > > >> > > > > > > > > High level the need is to be able to change the
> > default
> > > >> > >
> > > >> > > lifecycle
> > > >> > >
> > > >> > > > > in
> > > >> > > > >
> > > >> > > > > > > the
> > > >> > > > > > >
> > > >> > > > > > > > > root pom without having to define a custom extension
> > - in
> > > >> > > > > > > > > other
> > > >> > > > >
> > > >> > > > > words
> > > >> > > > >
> > > >> > > > > > > it
> > > >> > > > > > >
> > > >> > > > > > > > is
> > > >> > > > > > > >
> > > >> > > > > > > > > about having a built-in extension.
> > > >> > > > > > > > > The typical need is to add a mojo in the default
> > > >> > > > > > > > > lifecycle
> > > >> > > > > > > > > (add
> > > >> > > > > > >
> > > >> > > > > > > frontend
> > > >> > > > > > >
> > > >> > > > > > > > > magement for ex) or replace some plugins by others
> > (for
> > > >> > > > > > > > > example
> > > >> > > > > > >
> > > >> > > > > > > compiler
> > > >> > > > > > >
> > > >> > > > > > > > by
> > > >> > > > > > > >
> > > >> > > > > > > > > scalac plugin, surefire by spec2 plugin for a scala
> > based
> > > >> > >
> > > >> > > project
> > > >> > >
> > > >> > > > > > > > etc...).
> > > >> > > > > > > >
> > > >> > > > > > > > > The way I'm seeing it is to let the xml defining the
> > > >>
> > > >> lifecycle
> > > >>
> > > >> > > be
> > > >> > >
> > > >> > > > > put
> > > >> > > > >
> > > >> > > > > > > in
> > > >> > > > > > >
> > > >> > > > > > > > > .mvn/default-lifecycle.xml - I don't know if we want
> > to
> > > >>
> > > >> use
> > > >>
> > > >> > > > > > > > > the
> > > >> > > > > >
> > > >> > > > > > prefix
> > > >> > > > > >
> > > >> > > > > > > > > (default here) as a reference you can put in the pom
> > but
> > > >>
> > > >> at
> > > >>
> > > >> > > least
> > > >> > >
> > > >> > > > > > > default
> > > >> > > > > > >
> > > >> > > > > > > > > makes sense IMO.
> > > >> > > > > > > > > The lifecycle.xml itself would likely be extended to
> > add
> > > >>
> > > >> some
> > > >>
> > > >> > > > > > > > precondition
> > > >> > > > > > > >
> > > >> > > > > > > > > to each plugin (if src/main/frontend exists then add
> > > >> > >
> > > >> > > frontend:npm
> > > >> > >
> > > >> > > > > for
> > > >> > > > >
> > > >> > > > > > > > ex).
> > > >> > > > > > > >
> > > >> > > > > > > > > I know it is a quite common need I have and not
> > something
> > > >>
> > > >> I
> > > >>
> > > >> > > would
> > > >> > >
> > > >> > > > > put
> > > >> > > > >
> > > >> > > > > > > in
> > > >> > > > > > >
> > > >> > > > > > > > a
> > > >> > > > > > > >
> > > >> > > > > > > > > custom extension because it is very "by project" and
> > not
> > > >> > > >
> > > >> > > > shareable
> > > >> > > >
> > > >> > > > > > so a
> > > >> > > > > >
> > > >> > > > > > > > > shared extension does not make sense and packaging a
> > > >> > > > >
> > > >> > > > > plugin/extension
> > > >> > > > >
> > > >> > > > > > > > for a
> > > >> > > > > > > >
> > > >> > > > > > > > > single project is bothering for nothing.
> > > >> > > > > > > > >
> > > >> > > > > > > > > I'm planning to give a try with a custom extension
> in
> > the
> > > >> > >
> > > >> > > summer
> > > >> > >
> > > >> > > > > but
> > > >> > > > >
> > > >> > > > > > > > > thought it can be worth some discussion there too.
> > > >> > > > > > > > >
> > > >> > > > > > > > > Wdyt?
> > > >> > > > > > > > >
> > > >> > > > > > > > > Romain Manni-Bucau
> > > >> > > > > > > > > @rmannibucau | Blog
> > > >> > > > > > > > >
> > > >> > > > > > > > > | Old Blog
> > > >> > > > > > > > > | Github
> > > >> > > > > > > >
> > > >> > > > > > > > https://github.com/rmannibucau>
> > > >> > > > > > > >
> > > >> > > > > > > > > | LinkedIn | Book
> > > >>
> > > >>
> >
> https://www.packtpub.com/application-development/java-ee-8-high-performan
> > > >> c
> > > >>
> > > >> > > e
> > > >>
> > > >>
> ---------------------------------------------------------------------
> > > >>
> > > >> > > > > > > > To unsubscribe, e-mail:
> > dev-unsubscr...@maven.apache.org
> > > >> > > > > > > > For additional commands, e-mail:
> > dev-h...@maven.apache.org
> > > >> > > > >
> > > >> > > > > --
> > > >> > > > > Sent from my phone
> > > >> > >
> > > >> > > --
> > > >> > > Sent from my phone
> > > >>
> > > >>
> ---------------------------------------------------------------------
> > > >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > >> For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
>

Reply via email to