Ps (seems i lost a paragraph): how does it work in consumer pom, breaks most consumers which will assume right a single jar cant be found twice in deps no?
Le sam. 4 nov. 2023 à 14:39, Romain Manni-Bucau <rmannibu...@gmail.com> a écrit : > I still see it as abusing of extension to create sets. > Means you can only do it while it is jars - how would it work with .jmod > for ext? > > Now the critical part: how do plugin know about it? > > Ie is it better to define a ton of potentially conflicting default names + > add name config in all plugins or just let plugin configure an artifact > filter and not change anything to our model keeping type for extensions > most of the time. > > I clearly vote for this last option and -0.1for type usage cause it is > less intrusive and more generic but if you assume all exts are always jar > and all plugins get types config, agree it can work even if dirty in terms > of design IMHO. > > Le sam. 4 nov. 2023 à 13:50, Tamás Cservenák <ta...@cservenak.net> a > écrit : > >> Like this >> https://gist.github.com/cstamas/dd3795fd47f15a28d48a8c03fa9dd939 >> >> This is completely legal from mvn pov (no warning, unlike same artifact in >> two scopes) >> >> T >> >> >> On Sat, Nov 4, 2023, 13:48 Romain Manni-Bucau <rmannibu...@gmail.com> >> wrote: >> >> > How does an artifact has 2 types (it is the main issue with this >> design)? >> > >> > Le sam. 4 nov. 2023 à 11:05, Tamás Cservenák <ta...@cservenak.net> a >> > écrit : >> > >> > > So, just for fun, I used MIMA /w local mods (MIMA is vanilla mvn39 >> > models + >> > > resolver1) to resolve one of my demo modules: >> > > (neglect the root type of "dinosaur"...Also, this is really >> simplified, >> > > _resolving_ this graph would FAIL, as MIMA has no idea what "module" >> type >> > > is, as can be seen in GAVs, where extension="module"=type) >> > > https://gist.github.com/cstamas/79f9a01d661209fe302ba92b0de9ab69 >> > > >> > > It shows how even pure resolver 1.x behaves, just check the tree for >> > > "annotation-processor" and "module" types, everything is there. >> > > Basically, even though resolver1 API is able to express these things, >> the >> > > problem is that the Maven3 API is not (ArtifactHandler). >> > > >> > > T >> > > >> > > On Sat, Nov 4, 2023 at 10:43 AM Tamás Cservenák <ta...@cservenak.net> >> > > wrote: >> > > >> > > > Well, I have to disagree... >> > > > >> > > > Maven Core has no idea what "add to classpath" means, and the flag >> is >> > not >> > > > even used in core. Same would stand for MP etc. >> > > > Maven Core (simplified: the POM) tells WHAT IT IS only. >> > > > >> > > > Maven Plugin is the one who uses the core provided information to >> > process >> > > > things. So Plugin should know HOW TO USE IT. >> > > > >> > > > This is an important distinction in Maven, as otherwise plugin logic >> > > would >> > > > creep into core (like it did with site in Maven2) or other way >> > around... >> > > > >> > > > Basically, IMO types are good as it is, as you describe what it is >> (or >> > > > what you think it is), and plugin by using APIs (and yes, maybe some >> > > > "hints" from config) should be able to deduce how to make use of >> those >> > > > things. >> > > > >> > > > >> > > > On Sat, Nov 4, 2023 at 10:35 AM Romain Manni-Bucau < >> > > rmannibu...@gmail.com> >> > > > wrote: >> > > > >> > > >> Yes, this is the part I find broken in maven design (even mvn3) 1nd >> > hope >> > > >> we >> > > >> stop abusing. >> > > >> Also note it keeps the flag per maven module whereas we have a need >> > per >> > > >> plugin. >> > > >> So first step is to fix plugin config to get them filters of >> artifacts >> > > per >> > > >> their "paths" and sounds like it will be sufficient, no? >> > > >> Type would just make some non sufficient (maybe convenient, im not >> > > >> convinced from my XP but will not fight on this) default and >> > transitive >> > > >> issues but sounds like solething to do some years after the plugin >> > > config >> > > >> fix. >> > > >> >> > > >> Do we want to normalize the way to filter maven module artifacts in >> > > plugin >> > > >> configs? >> > > >> >> > > >> Le sam. 4 nov. 2023 à 10:25, Tamás Cservenák <ta...@cservenak.net> >> a >> > > >> écrit : >> > > >> >> > > >> > So, just to explain w/ code: >> > > >> > In Maven3 ArtifactHandler (type=id selects a handler) looks like >> > this: >> > > >> > >> > > >> > >> > > >> >> > > >> > >> https://github.com/apache/maven/blob/maven-3.9.x/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java#L55 >> > > >> > >> > > >> > And you can spot the two boolean "lfags": addedToClasspath (CP) >> and >> > > >> > includesDependencies (ID). >> > > >> > >> > > >> > Maven4 master corresponding Type looks like this: >> > > >> > >> > > >> > >> > > >> >> > > >> > >> https://github.com/apache/maven/blob/master/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java#L80 >> > > >> > >> > > >> > Same two boolean flags. >> > > >> > >> > > >> > In my PoC PR this is generalized: >> > > >> > >> > > >> > >> > > >> >> > > >> > >> https://github.com/cstamas/maven/blob/module-experiment/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java >> > > >> > >> > > >> > === >> > > >> > >> > > >> > In mvn3 realm (mvn3 plugin) here is an example how an artifact >> lands >> > > on >> > > >> CP: >> > > >> > the flag is checked >> > > >> > >> > > >> > >> > > >> >> > > >> > >> https://github.com/apache/maven-surefire/blob/master/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/TestClassPath.java#L63 >> > > >> > >> > > >> > And from that point on, starts the "guesswork" (is it a module >> > maybe?) >> > > >> > >> > > >> > A mvn4 plugin could make much fine-grainer checks (CP, MP etc). >> My >> > > idea >> > > >> was >> > > >> > really just to make things _explicit_. >> > > >> > >> > > >> > Thanks >> > > >> > T >> > > >> > >> > > >> > >> > > >> > On Sat, Nov 4, 2023 at 9:58 AM Tamás Cservenák < >> ta...@cservenak.net >> > > >> > > >> > wrote: >> > > >> > >> > > >> > > Well, even mvn3 works like it today, except it has "fixed set" >> of >> > > >> flags. >> > > >> > > All i did is opened up the number of possible flags, added MP >> > (next >> > > to >> > > >> > > existing CP flag from mvn 3). Types were really eztensible in >> mvn3 >> > > as >> > > >> > well, >> > > >> > > but less expressive with fixed set of flags. >> > > >> > > >> > > >> > > Basically even in mvn3, an artifact lands on CP if it has CP >> flag >> > > >> set... >> > > >> > > No radical change in this area. >> > > >> > > >> > > >> > > T >> > > >> > > >> > > >> > > On Sat, Nov 4, 2023, 08:49 Romain Manni-Bucau < >> > > rmannibu...@gmail.com> >> > > >> > > wrote: >> > > >> > > >> > > >> > >> Doesnt it mean you dont need type at all. >> > > >> > >> I understand the idea to add new method in the handler but >> this >> > is >> > > >> > really >> > > >> > >> a >> > > >> > >> weird design and still blocked by the predefined set so user >> is >> > > still >> > > >> > >> locked by design so not sure how it helps to rely on type. >> > > >> > >> >> > > >> > >> Le ven. 3 nov. 2023 à 21:44, Tamás Cservenák < >> > ta...@cservenak.net> >> > > a >> > > >> > >> écrit : >> > > >> > >> >> > > >> > >> > Just 5 cents: >> > > >> > >> > >> > > >> > >> > Plugins (as "consumer of dependency") would NOT handle with >> > type >> > > >> > >> > _directlty_, but the _flags_. >> > > >> > >> > >> > > >> > >> > So, if you look at this table (a bit outdated): >> > > >> > >> > >> > https://gist.github.com/cstamas/4e9bcbef25ce912a90ad1e127b0c5db8 >> > > >> > >> > >> > > >> > >> > m-compiler-p: handles artifacts flagged with CP, MP, AP >> > > >> > >> > m-javadoc-p: handles artifacts flagged with DOC >> > > >> > >> > and so on (just roughly to explain the idea). >> > > >> > >> > >> > > >> > >> > And nothing stops you to declare as many types as many >> needed >> > (to >> > > >> > >> describe >> > > >> > >> > what you want), the plugins will go for flags only. >> > > >> > >> > >> > > >> > >> > So in short: plugins will not go for type, the go for flags >> > > >> defined by >> > > >> > >> > types (and many type can use same flag) >> > > >> > >> > >> > > >> > >> > T >> > > >> > >> > >> > > >> > >> > >> > > >> > >> > >> > > >> > >> > On Fri, Nov 3, 2023 at 9:31 PM Romain Manni-Bucau < >> > > >> > >> rmannibu...@gmail.com> >> > > >> > >> > wrote: >> > > >> > >> > >> > > >> > >> > > Le ven. 3 nov. 2023 à 20:55, Martin Desruisseaux < >> > > >> > >> > > martin.desruisse...@geomatys.com> a écrit : >> > > >> > >> > > >> > > >> > >> > > > Le 2023-11-03 à 19 h 33, Romain Manni-Bucau a écrit : >> > > >> > >> > > > >> > > >> > >> > > > >> putting a dependency on the module-path of a non-JPMS >> > > >> > application >> > > >> > >> > > > >> such as Spring is okay >> > > >> > >> > > > >> >> > > >> > >> > > > > Is not ok for me and is a big hidden bug of current >> guess >> > > >> logic >> > > >> > >> when >> > > >> > >> > > > > not disabled IMHO, we should drop all that guess code >> > > >> probably. >> > > >> > >> > > > > >> > > >> > >> > > > The current guess code in Maven 3 puts the dependency on >> > the >> > > >> > >> > class-path, >> > > >> > >> > > > which in my understanding is the behaviour that you >> want. >> > The >> > > >> > <type> >> > > >> > >> > > > proposal would put the dependency on whatever path the >> > <type> >> > > >> said >> > > >> > >> it >> > > >> > >> > > > should be. If the user is not okay with that, (s)he can >> > > >> override >> > > >> > in >> > > >> > >> the >> > > >> > >> > > > same way that (s)he can override the version of >> transitive >> > > >> > >> > dependencies. >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > Means you create as much type as plugin*pathTypePerPlugin, >> > > looks >> > > >> > >> > overkill. >> > > >> > >> > > And just using class/module paths does not work, so >> > ultimately >> > > >> > plugins >> > > >> > >> > will >> > > >> > >> > > need filters and maybe just rely on scopes+filters - still >> > > >> trying to >> > > >> > >> > find a >> > > >> > >> > > solution making eveyone happy. >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > A dependency may be designed for working only on the >> module >> > > >> path >> > > >> > >> (it is >> > > >> > >> > > > developer's choice as any other software requirement, >> such >> > as >> > > >> the >> > > >> > >> > > > minimal Java version), which is why I think that by >> > default, >> > > >> > >> dependency >> > > >> > >> > > > should go where the library producer said that it should >> > go. >> > > >> But >> > > >> > >> again, >> > > >> > >> > > > users can override if they want. >> > > >> > >> > > > >> > > >> > >> > > > >> > > >> > >> > > > > Then question is how do you enable modules but this is >> > not >> > > a >> > > >> > >> question >> > > >> > >> > > > > for your maven module but per plugin (jaxws plugin >> will >> > not >> > > >> use >> > > >> > >> the >> > > >> > >> > > > > same modules than compiler nor javadoc for ex). This >> is >> > > where >> > > >> > the >> > > >> > >> > type >> > > >> > >> > > > > proposal is not granular enough to handle advanced >> cases >> > we >> > > >> are >> > > >> > >> > > > > talking about >> > > >> > >> > > > > >> > > >> > >> > > > Are you referring to the --add-modules or >> --limit-modules >> > > >> options >> > > >> > of >> > > >> > >> > > > Java? If so, I think that they are compatible with the >> > <type> >> > > >> > >> proposal >> > > >> > >> > > > and can be discussed in a next step. The first step >> that we >> > > are >> > > >> > >> trying >> > > >> > >> > > > to resolve now is to build the module-path. Next, it is >> > > indeed >> > > >> > >> possible >> > > >> > >> > > > to tell Java to "see" only a subset of the modules >> > available >> > > on >> > > >> > the >> > > >> > >> > > > module-path. I think that this option is more typically >> > used >> > > >> when >> > > >> > >> the >> > > >> > >> > > > module-path is a whole directory instead than an >> > enumeration >> > > of >> > > >> > >> > > > dependencies as Maven does. If users nevertheless want >> to >> > use >> > > >> the >> > > >> > >> > > > --add-modules or --limit-modules options, maybe they >> could >> > be >> > > >> > >> options >> > > >> > >> > of >> > > >> > >> > > > the exec plugin. Those options are not paths, only >> > > >> comma-separated >> > > >> > >> > lists >> > > >> > >> > > > of modules names. >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > Yes, but you just added a jaxws type to maven core - see >> why >> > > this >> > > >> > does >> > > >> > >> > not >> > > >> > >> > > scale/work? >> > > >> > >> > > Just means we cant get external plugins anymore or we will >> > > >> > duplicate a >> > > >> > >> > lot >> > > >> > >> > > deps (same gav different type...please no). >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > >> > > >> > >> > > > > (…snip…) ie put all the code in src/main cause by >> design >> > it >> > > >> is >> > > >> > >> what >> > > >> > >> > > > > you want, a single module where maven creates 2 >> modules >> > per >> > > >> > maven >> > > >> > >> > > module >> > > >> > >> > > > > >> > > >> > >> > > > I'm not sure if you are talking about the Java >> compiler's >> > > >> "Module >> > > >> > >> > Source >> > > >> > >> > > > Hierarchy" here. If yes, this is indeed something that I >> > > would >> > > >> > like, >> > > >> > >> > but >> > > >> > >> > > > I'm not trying to push that for Maven (I presume that it >> > > would >> > > >> be >> > > >> > a >> > > >> > >> too >> > > >> > >> > > > big change). My hope for Maven has smaller scope: >> > module-path >> > > >> and >> > > >> > >> > making >> > > >> > >> > > > easier to setup the --add-exports and --add-opens >> options. >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > This already works with maven, needs to tune the folder >> > layouts >> > > >> and >> > > >> > a >> > > >> > >> few >> > > >> > >> > > plugins - and to be honest I hope it never becomes the >> > default, >> > > >> so >> > > >> > not >> > > >> > >> > sure >> > > >> > >> > > what misses there. >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > > Not sure I understand the issue, you highlight a bug >> in >> > > exec >> > > >> > maven >> > > >> > >> > > > > plugin (classpath and module path configuration share >> a >> > > >> single >> > > >> > >> toggle >> > > >> > >> > > > > - and toString BTW) but ultimately you misconfigured >> the >> > > >> plugin >> > > >> > >> too: >> > > >> > >> > > > > >> > > >> > >> > > > Thanks for the configuration tip, but it works by >> setting >> > the >> > > >> > >> > > > --class-path and --module-path options in the >> <arguments> >> > > >> block of >> > > >> > >> the >> > > >> > >> > > > exec-maven-plugin. My issue was also execution with >> > surefire, >> > > >> > >> javadoc, >> > > >> > >> > > > etc. All plugins need the same configuration. >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > It is the same there, nothing relates to depency type >> (which >> > is >> > > >> my >> > > >> > >> > point). >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > >> > > >> > >> > > > > it is really about getting split paths more easily >> than >> > > >> getting >> > > >> > a >> > > >> > >> > > > > global for the maven module configuration which will >> > > prevent >> > > >> you >> > > >> > >> to >> > > >> > >> > > > > configure accurately each plugin which is actually >> > required >> > > >> for >> > > >> > >> these >> > > >> > >> > > > > advanced JPMS cases (jaxws is really a hurting case). >> > > >> > >> > > > > >> > > >> > >> > > > Global configuration is also desirable. Per-plugin >> tuning >> > may >> > > >> also >> > > >> > >> be >> > > >> > >> > > > desirable, but there is good chances that they would be >> > > >> > >> modifications >> > > >> > >> > of >> > > >> > >> > > > the global configuration instead of something >> independent >> > > >> > (providing >> > > >> > >> > > > that the global configuration has the <type> proposal). >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > I see a lot of overlap but no 1-1 cases except on simple >> > > >> projects. >> > > >> > >> > > Compiler != Surefire != Javadoc for ex, this is why type >> > looks >> > > >> very >> > > >> > >> > > limiting until combinable or each plugin has filter >> > capability >> > > >> which >> > > >> > >> also >> > > >> > >> > > mean type is useless. >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > >> > > >> > >> > > > > Agree, default should stay classpath and module path >> > > >> shouldn't >> > > >> > be >> > > >> > >> > > > > enabled until requested, creates too much weird >> behaviors >> > > >> IMHO. >> > > >> > >> > > > > >> > > >> > >> > > > Weird behaviour happens when the library is not on the >> path >> > > it >> > > >> was >> > > >> > >> > > > designed for. Weird behaviour if we put a >> > > >> designed-for-class-path >> > > >> > >> > > > dependency on the module-path, and potentially broken >> > > >> behaviour if >> > > >> > >> we >> > > >> > >> > > > put a designed-for-module-path dependency on the >> > class-path. >> > > >> The >> > > >> > >> reason >> > > >> > >> > > > why we do not observe the latter often is because >> library >> > > >> > producers >> > > >> > >> are >> > > >> > >> > > > aware that the Java world is still a lot class-path >> > centric, >> > > >> and >> > > >> > >> > > > provides workaround in their library for making >> execution >> > on >> > > >> > >> class-path >> > > >> > >> > > > possible. >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > > Exactly! >> > > >> > >> > > >> > > >> > >> > > >> > > >> > >> > > > Martin >> > > >> > >> > > > >> > > >> > >> > > > >> > > >> > >> > > >> > > >> > >> > >> > > >> > >> >> > > >> > > >> > > >> > >> > > >> >> > > > >> > > >> > >> >