Hi Martin,

I believe one of my comments must have offended you and maybe others.
This was a reference to the shitty-maven-plugin, which made me laugh
the first time I saw it. For anything other than Maven I would have
said something along "and does a poor job". I should have written
"shitty[x]" and put my reference to make it obvious, I suppose only
plugin writers tend to know this one.

On Tue, Aug 27, 2013 at 12:04 AM, Martin Gainty <mgai...@hotmail.com> wrote:
> you never looked at plugin-management

Yes I know, use and encourage others to use it at work.

> understanding what you're criticising before you write a commentary will lend 
> veracity to your statements

You are right about understanding, this is why I said "I think I've
observed". However I use plugin-management to make modules
dependencies converge (in a multi-module project or let's say
company-wide with a common parent pom). So that for instance all my
jar modules use the same version/configuration of the *implicitly
declared* compiler plugin.

But in my comment I'm not talking about plugin-management, I'm talking
about plugin dependencies.

>From the first few seconds of a "mvn -X clean verify" build:
[DEBUG] Populating class realm
plugin>org.apache.maven.plugins:maven-clean-plugin:2.4.1
[DEBUG]   Included: org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:2.0.5
[DEBUG]   Excluded: org.apache.maven:maven-plugin-api:jar:2.0.6
[DEBUG] Configuring mojo
org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean from plugin
realm ClassRealm[plugin>org.apache.maven.plugins:maven-clean-plugin:2.4.1,
parent: sun.misc.Launcher$AppClassLoader@e1641c0]

[DEBUG] Populating class realm
plugin>org.apache.maven.plugins:maven-surefire-plugin:2.12
[DEBUG]   Included: org.apache.maven.plugins:maven-surefire-plugin:jar:2.12
[DEBUG]   Included: org.apache.maven.surefire:surefire-booter:jar:2.12
[DEBUG]   Included: org.apache.maven.surefire:surefire-api:jar:2.12
[DEBUG]   Included: org.apache.maven.surefire:maven-surefire-common:jar:2.12
[DEBUG]   Included:
org.apache.maven.shared:maven-common-artifact-filters:jar:1.3
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:3.0
[DEBUG]   Included: org.apache.maven.reporting:maven-reporting-api:jar:2.0.9
[DEBUG] Configuring mojo
org.apache.maven.plugins:maven-surefire-plugin:2.12:test from plugin
realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.12,
parent: sun.misc.Launcher$AppClassLoader@e1641c0]

[DEBUG]   Included: org.codehaus.mojo:clirr-maven-plugin:jar:2.5
[DEBUG]   Included: net.sf.clirr:clirr-core:jar:0.6
[DEBUG]   Included: org.apache.bcel:bcel:jar:5.2
[DEBUG]   Included: jakarta-regexp:jakarta-regexp:jar:1.4
[DEBUG]   Included: org.apache.maven.doxia:doxia-decoration-model:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-module-xhtml:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-core:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-sink-api:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-site-renderer:jar:1.0
[DEBUG]   Included: org.codehaus.plexus:plexus-velocity:jar:1.1.7
[DEBUG]   Included: org.apache.velocity:velocity:jar:1.5
[DEBUG]   Included: commons-lang:commons-lang:jar:2.1
[DEBUG]   Included: oro:oro:jar:2.0.8
[DEBUG]   Included: commons-collections:commons-collections:jar:3.2
[DEBUG]   Included: org.apache.maven.doxia:doxia-module-apt:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-module-fml:jar:1.0
[DEBUG]   Included: org.apache.maven.doxia:doxia-module-xdoc:jar:1.0
[DEBUG]   Included: org.apache.maven.reporting:maven-reporting-api:jar:2.0.6
[DEBUG]   Included: org.codehaus.plexus:plexus-i18n:jar:1.0-beta-6
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:3.0.7
[DEBUG] Configuring mojo
org.codehaus.mojo:clirr-maven-plugin:2.5:check from plugin realm
ClassRealm[plugin>org.codehaus.mojo:clirr-maven-plugin:2.5, parent:
sun.misc.Launcher$AppClassLoader@e1641c0]

I'm omitting logs starting with Excluded (no plexus-utils in those).
In a single build, I get three plugins using three different versions
of plexus-utils (2.0.5, 3.0, 3.0.7). So this is what I meant: is it a
problem for plugins to depend on different versions of other stuff
(plugins or modules) ?

>
> http://maven.apache.org/pom.html#Plugin_Management
> Martin Gainty

I hope I've convinced you I'm not freely flaming on Maven but really
trying to contribute to the thread.

Best Regards,
Dridi

> ______________________________________________
> Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
>
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger 
> sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung 
> oder Fertigung einer Kopife ist unzulaessig. Diese Nachricht dient lediglich 
> dem Austausch von Informationen und entfaltet keine rechtliche 
> Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen 
> wir keine Haftung fuer den Inhalt uebernehmen.
>
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le 
> destinataire prévu, nous te demandons avec bonté que pour satisfaire informez 
> l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci 
> est interdite. Ce message sert à l'information seulement et n'aura pas 
> n'importe quel effet légalement obligatoire. Étant donné que les email 
> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter 
> aucune responsabilité pour le contenu fourni.
>
>
>
>
>> From: dridi.boukelmo...@zenika.com
>> Date: Mon, 26 Aug 2013 20:31:32 +0200
>> Subject: Re: Easyant - Plugin conflict management
>> To: dev@ant.apache.org
>>
>> Hi,
>>
>> This is my first post on this mailing list, I used to lurk in the
>> previous easant ML and even answer sometimes.
>>
>> In this thread I see several points and one of them looks like a
>> non-issue to me. Please forgive my heresy when I use maven as an
>> example.
>>
>> On Tue, Aug 20, 2013 at 6:50 PM, Nicolas Lalevée
>> <nicolas.lale...@hibnet.org> wrote:
>> >
>> > Le 20 août 2013 à 14:22, Jean-Louis Boudart <jeanlouis.boud...@gmail.com> 
>> > a écrit :
>> >
>> >> I've commited changes on trunk with some unit tests if you want to have a
>> >> look.
>> >>
>> >> Known limitation :
>> >> * system plugins doesn't participate *yet* to global plugin resolution
>> >> * plugins classpath created dinamically will all contains the whole
>> >> resolution graph (not really a problem)
>> >>
>> >> Point 1 : this can even affect performance. Invoking resolve process one
>> >> time seems much more speed that invoking plugins individually.
>> >
>> > This seems strange to me. Do you have an idea why ?
>>
>> I believe he meant this could *improve* performances by sharing a
>> single global resolve between all plugins (or something like that).
>>
>> >> Point 2 : Even if there is no much activity, i suggest to keep backward
>> >> compatibility
>> >
>> > fine for me.
>>
>> Not necessary from my point of view. My only advice is to avoid legacy
>> (or technical debt ;) at such early time.
>>
>> >> Point 3 : By two steps i meant running a global resolve (for all plugins
>> >> and buildtypes including transitive ones). And then have a second class
>> >> invoked to perform individual import of ant build file by picking them 
>> >> from
>> >> the ResolveReport.
>> >
>> > ok I see. This make totally sense.
>>
>> This is where I'm lost. Actually the whole issue of dependencies
>> conflicts between plugins.
>>
>> Here is the behavior I think I've observed with Maven:
>> - maven resolves project dependencies and does a shitty job at
>> conflicts resolution
>> - maven resolves plugins dependencies one by one and downloads them lazily
>> - each plugin is executed with its own classloader, and doesn't care
>> about other plugins dependencies
>> - I can get a dozen versions of the infamous[1] plexus-utils in a single 
>> build
>>
>> My point is, given proper isolation, is it a real issue to have
>> different plugins depending on different versions of the same modules
>> ?
>>
>> At the very least, I like the idea of a single global resolve. Even
>> though I understand the benefits of a lazy resolution/download, I
>> don't see this as a problem with today's average bandwidth and disk
>> space to get every thing needed by a build in a single go. I tend to
>> work offline and I hate when I discover in the train that I'm missing
>> a dependency :)
>>
>> >> You can check ResolvePlugins and ImportDeferred class in trunk if you want
>> >> to see concrete stuff.
>> >
>> > I usually do a very quick review of the code to keep me informed of what 
>> > is going on and see if nothing bug me, and as always, it seems great. But 
>> > I need to get into this more deeply to see how it really works.
>> >
>> > Nicolas
>> >
>>
>> Best Regards,
>> Dridi
>>
>> [1] it's just that I don't like it :p
>>
>> >>
>> >>
>> >>
>> >>
>> >> 2013/8/17 Nicolas Lalevée <nicolas.lale...@hibnet.org>
>> >>
>> >>> Long overdue response.
>> >>>
>> >>> Le 3 août 2013 à 13:33, Jean-Louis Boudart <jeanlouis.boud...@gmail.com>
>> >>> a écrit :
>> >>>
>> >>>> Hi there,
>> >>>>
>> >>>> It becomes necesssary to manage conflicts between plugins.
>> >>>> This issues has been raised many time and is referenced on jira[1].
>> >>>>
>> >>>> Currently easyant offers import task taking some specific attributes to
>> >>>> resolve a plugin (mainly organisation, module name and revision).
>> >>>> <ea:import org="mycompany" module="myplugin" revision="x.x"/>
>> >>>>
>> >>>> This task will :
>> >>>> * resolve the given plugin or buildtypr
>> >>>> * create a dynamic classpath for this plugin
>> >>>> * expose location of others extra files through properties (ex
>> >>>> checkstyle.xml containing checkstyle rules, this files is shipped in the
>> >>>> plugin). Thoses properties will then be reused by the plugin itself
>> >>>> * import the real ant file (invoke the importTask from ant core under 
>> >>>> the
>> >>>> hood)
>> >>>>
>> >>>> This task is currently used :
>> >>>> * dynamically by easyant to load system plugins (skeletons for example)
>> >>>> * dynamically by easyant when you specify <ea:build> or <ea:plugin> tags
>> >>>> in module.ivy files
>> >>>> * invoked in plugin ant file itselfs
>> >>>> * invoked in module.ant if users has complex needs
>> >>>>
>> >>>> Additionnal there is two "alliases" for this task to import plugins and
>> >>>> buildtype.
>> >>>> <ea:plugin module="compile-java" revision="0.9"/>
>> >>>> <ea:plugin module="build-std-java" revision="0.9"/>
>> >>>> If organisation attribute is not specified on aliases default one will
>> >>> be
>> >>>> used.
>> >>>>
>> >>>> It does the job but it doesn't handle conflict between plugins.
>> >>>>
>> >>>> Some plugins relies on abstract ones.
>> >>>> Exemple:
>> >>>> package-jar depends on abstract-package, abstract-package depends on
>> >>>> abstract-compile, but compile-java plugin also depends on
>> >>> abstract-compile.
>> >>>> Which versi of abstract-compile will be taken in case both plugins load
>> >>>> different version ? The answer is the first one !
>> >>>> This becomes more problematic on buildtypes, as buildtypes loads a set 
>> >>>> of
>> >>>> plugins (including themself others abstract-plugins).
>> >>>>
>> >>>> Ok so now you should have a quick picture of the problem.
>> >>>>
>> >>>> What could be done ?
>> >>>>
>> >>>> We can rely on ivy to describe dependency on plugins. But then how could
>> >>> we
>> >>>> know in which order plugins should be loaded ?
>> >>>>
>> >>>> I suggest to introduce a deferred import mechanism.
>> >>>>
>> >>>> We should split responsibility in two distinct steps.
>> >>>> 1 - resolve (based on ivy) the whole graph of plugins and store the
>> >>> resolve
>> >>>> report somewhere as a reusable reference in ant project
>> >>>> 2 - invoke a new import task should import already resolved plugins (the
>> >>>> task could rely on the report stored as a reference in ant project)
>> >>>>
>> >>>> Exemple :
>> >>>> compile java will have an ivy dependency on abstract-compile
>> >>>> <dependency org="org.apache.easyant.plugins" module="abstract-compile"
>> >>>> revision="1.0"/>
>> >>>>
>> >>>> The compile java ant script will import the resolved plugin
>> >>>> <ea:import-deferred org="org.apache.easyant.plugins"
>> >>>> module="abstract-compile"/>
>> >>>>
>> >>>> Note that i'm not fixed yet with the task name. Any suggestion (even for
>> >>>> alliases are welcome).
>> >>>>
>> >>>> To maintain backward compatibility i'm in favor of creating new aliases
>> >>>> "import-plugin" and "import-buildtype" instead of reusing existing ones.
>> >>>>
>> >>>> People would be able to continue using existing task with known the
>> >>>> limitation (no conflict management on plugins).
>> >>>> This can help if someone wants to load plugins in module.ant after
>> >>> setting
>> >>>> a few properties.
>> >>>>
>> >>>> I also recommend adding a warning on existing task to recommend people
>> >>>> using the new import mechanism.
>> >>>>
>> >>>> What do you think ?
>> >>>
>> >>> I see 3 points here.
>> >>>
>> >>> First, managing plugin dependencies: with Ivy, of course, we couldn't
>> >>> agree more :)
>> >>>
>> >>> Then about creating new tasks to keep backward compatibility. I think we
>> >>> can break backward compatibility. Easyant is not yet 1.0 and I do not see
>> >>> much activity on the user list. I would prefer bugging the current users
>> >>> than having an error-prone and deprecated task around.
>> >>>
>> >>> Third there is the resolve in two steps. I really like the idea. I am not
>> >>> sure though if we need this in order to bring conflict management in 
>> >>> plugin
>> >>> dependencies. And I am not sure how far you are willing to go.
>> >>> Actually this is a larger topic which has bugging me recently. The way we
>> >>> use the ivy.xml is generally either to tight or insecure. For instance 
>> >>> when
>> >>> using version ranges in an ivy.xml, since the content of the repository 
>> >>> is
>> >>> expected to change over time, then the resolve may change over time since
>> >>> new versions might fit the range. Range makes things unreliable over 
>> >>> time,
>> >>> so often I restrict myself to not use any range. But it's kind of a shame
>> >>> to not use ranges in a dependency manager.
>> >>> I continued experimenting with the OSGi mapping in Ivy. And the OSGi
>> >>> version semantics are very loose. It is because it represents what 
>> >>> versions
>> >>> of software it is compatible with, not the versions we will be using in
>> >>> your specific unit test or application. So relying on OSGi manifest to
>> >>> resolve dependencies is not safe at all. That's why I implemented the
>> >>> fixdeps [1] task. From a very loose specification of the dependencies, it
>> >>> will produce an ivy.xml which is very tight and secure.
>> >>> Then, when adding dependencies to a project, we edit the
>> >>> ivy-specification.xml and run fixdeps. The build then relies on the
>> >>> produced ivy.xml. A nice side effect is that since there is only non
>> >>> transitive fixed dependencies to resolve, resolve is fast: either the
>> >>> module is here either it's not. And with proper caching, everything works
>> >>> with the filesystem.
>> >>> But, as wrote above, I'm not sure if that's why you suggested the two
>> >>> steps resolve.
>> >>>
>> >>> Nicolas
>> >>>
>> >>> [1] http://ant.apache.org/ivy/history/trunk/use/fixdeps.html
>> >>>
>> >>>
>> >>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
>> >>> For additional commands, e-mail: dev-h...@ant.apache.org
>> >>>
>> >>>
>> >>
>> >>
>> >> --
>> >> Jean Louis Boudart
>> >> Independent consultant
>> >> Apache EasyAnt commiter http://ant.apache.org/easyant/
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
>> > For additional commands, e-mail: dev-h...@ant.apache.org
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
>> For additional commands, e-mail: dev-h...@ant.apache.org
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to