https://cwiki.apache.org/confluence/display/MAVEN/Resolution+scenarios+for+plugins
On Apr 6, 2014, at 4:47 PM, Robert Scholte <rfscho...@apache.org> wrote: > Op Sun, 06 Apr 2014 20:54:24 +0200 schreef Jason van Zyl <ja...@takari.io>: > >> >> On Apr 6, 2014, at 2:24 PM, Robert Scholte <rfscho...@apache.org> wrote: >> >>> Hi, >>> >>> if we are talking about immutable classpath I agree. But there's something >>> else which needs to be improved. >>> Let me describe it with the maven-javadoc-plugin, but there are more >>> plugins suffering the same problem. >>> You must be able to specify doclettags artifact. There are dependencies, >>> but they are not added to the classpath. These jars are added to a >>> different argument of the javadoc executable. >>> >> >> So the generic category is the downloading of artifacts that are passed into >> the command line of an executable? So the plugin already has a dependencies >> element but the javadoc plugin has a special element such that you can get >> hold of these dependencies to feed into the command line. Yes? I believe we >> can make this generic and prevent plugins from having to do their own >> resolution logic. >> >>> I see two solutions: >>> - mark these fields in the plugin as being dependencies, which must be >>> resolved. >>> - add a custom field to the plugin-dependency in the pom.xml, so the plugin >>> knows which dependencies are used for which purpose. >>> >>> With both solutions it should also be possible for the maven-release-plugin >>> to verify all used dependencies, which is impossible right now. >>> >> >> The think the second would be better. We already have a <dependencies/> >> element which are added to the classpath of the executing plugin, but >> another element like, say, <artifacts/> can just be downloaded and injected >> into the plugin such that it can do what it likes with the files of the >> downloaded artifacts. Would this satisfy the requirement of the javadoc >> plugin? > > I think this will work. A quick look at the javadoc plugin shows me the > following <artifacts/>: > - additionalDependencies: capability to add optionnal dependencies to the > javadoc classpath. > - bootclasspathArtifacts: Specifies the artifacts where the boot classes > reside. > - docletArtifacts: Specifies multiple artifacts containing the path for the > doclet starting class file (specified with the -doclet option). > - resourcesArtifacts: A list of artifacts containing resources which should > be copied into the Javadoc output directory (like stylesheets, icons, etc.). > - tagletArtifacts: Specifies several Taglet artifacts containing the taglet > class files (.class). These taglets class names will be auto-detect and so no > need to specify them. > > These are artifacts which must be downloaded, and they are all specified as > groupId/artifactId/version. I don't see additional elements, but we need to > investigate other plugins as well. > > Maybe worth a separate wiki page. > > thanks, > Robert > > >> >> Striving for plugins not having to specify and resolution is the goal and >> this would certainly help. If we stepped through all the plugins that we >> know of which employ their own resolution logic we can push it back into the >> core. This also eliminates having to expose most of the resolution system >> which would go a long way in not having to expose Aether. Being purely >> declarative, as we should, is best. It's just sort of slipped in many places >> because we let people get at the resolution internals. >> >> Ultimately this means that what gets exposed is a very simple Artifact-like >> entity and a simple graph for things like the dependency plugin and enforcer >> and we eliminate exposing the underbelly of resolution which is a huge >> problem right now. Also if the artifact-like entity had actions that could >> be attached then very sophisticated things like what the Android people need >> would not require using the resolution system at all. Not sure how many >> people are familiar with p2 but it has the notion of actions that are >> associated with artifacts. So you might say I want this artifact downloaded, >> unpack it, and add this directory in the unpacked structure to my classpath. >> >> It would be a radical simplification to basically shear off all access to >> the resolution system. If we had this years ago we would not have these >> problems we have with the switches between Maven Artifact, Sonatype Aether, >> and Eclipse Aether. This means that many plugins need to be remade but they >> will be far simpler. For Maven 4.0.0 I say go big, go simple, or go home. >> >> I've been noodling around for a couple months and there are a few simple >> mistakes we made in the past and they have bloomed into relatively large >> problems. I think they are all fixable provided we just bite the bullet and >> start removing the janky code. >> >> (I can't seem to edit anything in Confluence or I would have written more >> there) >> >>> thanks, >>> >>> Robert >>> >>> >>> Op Sun, 06 Apr 2014 15:55:07 +0200 schreef Jason van Zyl <ja...@takari.io>: >>> >>>> Hi, >>>> >>>> I started making of list of things I'd like to remove in Maven 4.0.0, but >>>> I would like to start getting some agreement on what we can yank and this >>>> is the first concrete request. I would like to remove the ability for >>>> plugins to magically inject dependencies. Plugins can either declare their >>>> dependencies or instruct users to add dependencies to the plugins in their >>>> POMs. This weird logic for plugins to add dependencies dynamically is the >>>> cause of some extremely convoluted logic in the resolution code and I want >>>> to remove it. >>>> >>>> The original issue is here: http://jira.codehaus.org/browse/MNG-4363 >>>> >>>> I encountered this when trying to hoist all the resolution logic into once >>>> place so that from our Aether provider resolution as it is done in the >>>> core can be done everywhere. Right now we have plugins like the assembly >>>> plugin, WAR plugin, dependency plugin that all do their own weird, >>>> inconsistent thing and when I tried to put it all in one place so that it >>>> can be analyzed, optimized and then executed this issue cropped up. We >>>> never should have allowed this in the first place but carried it over from >>>> 2.x for compatibilities sake. This might affect the code coverage tools >>>> but we can find a cleaner way. This logic is totally bizarro and needs to >>>> go. >>>> >>>> If everyone agrees we can start systematically documenting what has been >>>> removed, as we have lost track of this accurately in the past. I'd like to >>>> make a 4.x branch in 4 weeks or so and this will be one of the first >>>> things I'd like to cut. It will be one of those radical simplifications >>>> that will start allowing people to get a better understanding of the core >>>> as I can put the resolution logic in one place as it is currently in many. >>>> >>>> Thanks, >>>> >>>> Jason >>>> >>>> ---------------------------------------------------------- >>>> Jason van Zyl >>>> Founder, Apache Maven >>>> http://twitter.com/jvanzyl >>>> http://twitter.com/takari_io >>>> --------------------------------------------------------- >>>> >>>> We all have problems. How we deal with them is a measure of our worth. >>>> >>>> -- Unknown >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org >>> For additional commands, e-mail: dev-h...@maven.apache.org >>> >> >> Thanks, >> >> Jason >> >> ---------------------------------------------------------- >> Jason van Zyl >> Founder, Apache Maven >> http://twitter.com/jvanzyl >> http://twitter.com/takari_io >> --------------------------------------------------------- >> >> You are never dedicated to something you have complete confidence in. >> No one is fanatically shouting that the sun is going to rise tomorrow. >> They know it is going to rise tomorrow. When people are fanatically >> dedicated to political or religious faiths or any other kind of >> dogmas or goals, it's always because these dogmas or >> goals are in doubt. >> >> -- Robert Pirzig, Zen and the Art of Motorcycle Maintenance >> >> >> >> >> >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org > For additional commands, e-mail: dev-h...@maven.apache.org > Thanks, Jason ---------------------------------------------------------- Jason van Zyl Founder, Apache Maven http://twitter.com/jvanzyl http://twitter.com/takari_io --------------------------------------------------------- We know what we are, but know not what we may be. -- Shakespeare