Howdy, 0.1.3 out, got unpack ability (actually UnpackSink). Here is 0.1.3 in action, doing "side-by-side" and "overlay" way of unpack: https://gist.github.com/cstamas/36c49da724100a19feab1397e7381d0f
Oh, and Martin, the sink also unpacks only "unique" artifacts, so it will not over-and-over-and-over unpack the same thing... T On Tue, Mar 26, 2024 at 9:07 PM Tamás Cservenák <ta...@cservenak.net> wrote: > Oh, and as a side effect, the plugin is way more snappier as well, look at > execution time diffs (I know, this is not "benchmark", but is telling): > https://gist.github.com/cstamas/6026436527cbd669ce1a5f183f03fe51 > > toolbox needs almost only 60% of runtime that m-dep-p have. > > T > > On Tue, Mar 26, 2024 at 8:56 PM Tamás Cservenák <ta...@cservenak.net> > wrote: > >> Rudimentary support for those is already present (equals, startWith, >> endsWith) :) >> >> So one can write ArtifactMatcher "spec expression" (that will be parsed >> into ArtifactMatcher that is actually Predicate<Artifact>) as: >> "artifact(gavoid)" >> where "gavoid" can be "string" or "g:a" or "g:a:v" etc >> Each field currently support: >> * - any >> foo - equals foo >> foo* - "starts with foo" >> *foo - "ends with foo" >> >> Here is UT >> >> https://github.com/maveniverse/toolbox/blob/main/shared/src/test/java/eu/maveniverse/maven/toolbox/shared/internal/ArtifactMatcherTest.java >> >> So for your case, to filter dependencies by classifier it would be >> >> "artifact(*:*:*x86:*)" => it would parse into ArtifactMatcher instance >> that filters for "classifier ends with x86". >> "artifact(*:*:native*:*)" => it would parse into ArtifactMatcher instance >> that filters for "classifier starts with native". >> etc >> >> key to interpret is here: >> >> https://github.com/maveniverse/toolbox/blob/main/shared/src/main/java/eu/maveniverse/maven/toolbox/shared/internal/ArtifactMatcher.java#L225-L250 >> and that prototype is later used here >> >> https://github.com/maveniverse/toolbox/blob/main/shared/src/main/java/eu/maveniverse/maven/toolbox/shared/internal/ArtifactMatcher.java#L77-L84 >> >> T >> >> >> >> >> >> On Tue, Mar 26, 2024 at 8:41 PM Francois Marot <francois.ma...@gmail.com> >> wrote: >> >>> Thanks Tamas for all your work. I'll sure have a look (but not right now >>> as >>> I'm in a train station on a phone). Just to mention a feature I missed >>> yesterday in m-d-p: ability to filter on classifiers including >>> *wildcards*. >>> Because I have dependencies with this kind of classifiers: natives-win, >>> natives-linux, natives-x86, natives-amd64 and so on... >>> >>> Wildcard are sometimes a feature I miss in many plugins. >>> Thanks again for the work, wildcards or not ! >>> >>> Francois >>> >>> Le mar. 26 mars 2024, 17:58, Tamás Cservenák <ta...@cservenak.net> a >>> écrit : >>> >>> > Just for those brave... if you toy with it. >>> > >>> > The "copy" and "copy-transitive" CLI commands and Mojos have >>> "targetSpec" >>> > parameters, that are parsed into ArtifactSink here: >>> > >>> > >>> https://github.com/maveniverse/toolbox/blob/main/shared/src/main/java/eu/maveniverse/maven/toolbox/shared/internal/ToolboxCommandoImpl.java#L251-L288 >>> > >>> > So, the copy (and copy-transitive) resolve (transitively) and push the >>> > results into an ArtifactSink. >>> > >>> > Sink spec can be: >>> > "foo" -> implied "flat:foo" >>> > "flat:<path>" -> a "flat directory" to copy artifacts to, like >>> "flat:lib" >>> > (is resolved from basedir) >>> > "repository:<path>" -> creates a repo that can be used as "file://" >>> uri or >>> > published via HTTP (is resolved from basedir) >>> > "install:<path>" -> will install them into local repository (session >>> > default in no path specified), ie. good to prep a local repo -- TBD >>> <path> >>> > param >>> > "deploy:id::url" -> will deploy them to Remote Repo >>> > "purge:<path>" -> will purge them from local repository (session >>> default in >>> > no path specified) -- TBD <path> param >>> > >>> > So, following command: >>> > >>> > copy -DdepSpec="any()" -DtargetSpec="purge:" >>> > >>> > actually does the purge from the local repository. Same stands for >>> gav-copy >>> > (and gav-copy-transitively), but they do not use MavenProject to >>> > "contextualize" but need to be told explicitly what to resolve... >>> > >>> > >>> > On Tue, Mar 26, 2024 at 5:34 PM Tamás Cservenák <ta...@cservenak.net> >>> > wrote: >>> > >>> > > Howdy, >>> > > >>> > > Yes, m-dep-p is under maintained, it actually would need a rewrite >>> as it >>> > > still uses MAT (and many other Maven2 archaic stuff) internally. >>> > > Hence, it will fail if used with 3.9+ features like "split >>> repository" >>> > and >>> > > is suboptimal in many areas. >>> > > >>> > > Toolbox 0.1.0 released, btw: >>> > > >>> > > jbang toolbox@maveniverse >>> > > >>> > > or >>> > > >>> > > mvn mvn eu.maveniverse.maven.plugins:toolbox:0.1.0:gav-repl >>> > > >>> > > to enter REPL (same as in MIMA CLI was). >>> > > >>> > > T >>> > > >>> > > On Tue, Mar 26, 2024 at 4:51 PM Greg Chabala <greg.chab...@gmail.com >>> > >>> > > wrote: >>> > > >>> > >> Hello Tamás, >>> > >> >>> > >> For context, what are the tensions that you're trying to solve here? >>> > >> >>> > >> Is m-dependency-p too big/getting unmaintainable/becoming a kitchen >>> > sink? >>> > >> >>> > >> Do some goals feel like a bad fit? >>> > >> >>> > >> Are you thinking of breaking it up or replacing it? >>> > >> >>> > >> Greg >>> > >> >>> > >> On Tue, Mar 26, 2024 at 8:52 AM Tamás Cservenák < >>> ta...@cservenak.net> >>> > >> wrote: >>> > >> >>> > >> > Howdy, >>> > >> > >>> > >> > just to not let this discussion die off. Let me show a take on a >>> "how >>> > >> > modern Maven plugin should look like" (that targets m-dependency-p >>> > >> goals, >>> > >> > sans analyze and some others) could look like: >>> > >> > https://github.com/maveniverse/toolbox >>> > >> > >>> > >> > The "unpack" related goals are missing, not yet done, but there >>> are >>> > >> already >>> > >> > 33 Mojos in there. Most Mojos that are "gav-" prefixed are totally >>> > same >>> > >> as >>> > >> > CLI commands, and they do NOT require Project, are meant to be "ad >>> > hoc" >>> > >> > invoked. >>> > >> > The non-"gav-"-prefixed mojos use MavenProject instead to >>> > >> "contextualize" >>> > >> > themselves (so they work with the Project, and the "plugin-" >>> prefixed >>> > >> ones >>> > >> > with Project defined plugins). >>> > >> > >>> > >> > Note1: not yet released (is not on Central), if you want to test >>> drive >>> > >> it, >>> > >> > build it locally). >>> > >> > Note2: the "toolbox" is Maven Plugin and a CLI at the same time >>> (the >>> > CLI >>> > >> > uber is toolbox-1.0.0-SNAPSHOT-cli.jar) >>> > >> > Note3: some of the missing goals mentioned on this thread are >>> > >> implemented >>> > >> > >>> > >> > Thanks >>> > >> > T >>> > >> > >>> > >> >>> > > >>> > >>> >>