I think we should also take a look at JReleaser.
It has been around quite a while, Andres is an excellent contact and maintainer.

Any reason why we should choose one of the two?

JReleaser moves the releasing process out of maven, which is a bit
sad. But it can be used as a plugin, too.
So maybe this would be a good solution, too?

- Ben

Am Mi., 30. Apr. 2025 um 17:18 Uhr schrieb Tamás Cservenák
<ta...@cservenak.net>:
>
> Howdy,
>
> As we know, we have changes upcoming regarding publishing to central
> (in short: oss/s01 are being sunset, Central Portal becomes the new
> service; if unsure what am talking about, please google it up). Also,
> while there were vendor and third-party plugins and solutions for
> this, I am talking about the "vanilla Maven experience" here.
>
> Maven aspect so far: all the "old" publishing services so far
> (OSS/S01/RAO) were based on Sonatype Nx2 "tech", that provided support
> for maven-deploy-plugin, basically allowing seamless use of these
> services from within Maven (doing `mvn deploy` just worked) at the
> cost of "pushing some buttons" as part of publishing workflow: you had
> to close and release the staging repository that service created for
> deploy, and the happy path was that after sync, we got artifacts
> published to Central.
>
> The new service is NOT maven-deploy-plugin friendly anymore. This
> makes Maven, the project that invented Central, become unable to
> publish to Central out of the box (again, "vanilla experience").
>
> To continue, let's introduce some terminology to have all of us on the
> same page:
>
> * deploy(ing) - is what Maven always did (maven-deploy-plugin): it is
> "uploading artifacts (one by one, request-wise) to some remote
> location", by default it happens "interleaved as subproject lifecycle
> runs" and it "edits" metadata as well. Later we introduced the "deploy
> at end" feature, but nothing fundamentally changed here: the artifacts
> are still deployed one-by-one, metadata handling is done by your
> Maven, and to have your deployment complete, the last subproject of
> the session must be deployed as well. Long time ago, when a remote
> repository was imagined as a httpd+webdav, or today w/ MRM hosted
> repository, this worked and works quite well.
>
> * publish(ing) - Since 2010 things have changed: many tools already
> use this term, and it is NOT the same thing as "deploying" or even
> "deploying with a twist": is not even close to it. Publishing usually
> has its own WORKFLOW, like explained above: get your payload there (in
> some form), then do something (push some buttons), maybe spawn a vote
> in between, and finally again do something (push some more buttons) to
> finally get your artifacts somewhere. Publishing usually requires
> handling your project output "as a whole", something not naturally
> mapped onto the project itself. Finally, there is no (at least when
> compared to deploy) much metadata requirement either, as "embedding"
> your output to its final resting place is done by the vendor providing
> the publishing service, as they have to, unless they want to end up
> with corrupted metadata. Finally, "publishing" as described above is
> not something Maven (3 or 4) is able to do today: so far all we had
> was some variation of "deploy with a twist"-like hacks instead.
>
> The new "publishing" involves two aspects:
>
> * target - is WHERE you publish, to keep things simple, usually we
> assume "target == Maven Central" but again, it could be anything (ie.
> corporate MRM w/ staging used to get artifacts to some corporate
> hosted repository). Targets also define the "requirements", like
> mandatory and optional checksums, signatures and so on.
>
> * service - is HOW you publish (basically a service implementing the
> workflow mentioned above). Usually service implies target (ie. using
> repository.apache.org you publish to Central) but does not have to.
> Service is operated by some vendor, usually is not open source and
> different services may require vastly different "ways" (protocols?) to
> publish, as there are no standards defined in this area.
>
> Today we have several services to publish, and they all end up on same
> target, Central:
> * repository.apache.org (apache-rao)
> * oss.sonatype.org (sonatype-oss, soon to be sunset)
> * s01.oss.sonatype.org (sonatype-s01, soon to be sunset)
> * central.sonatype.com (sonatype-cp, the new "Central Portal" service)
>
> In general, I'd propose the use of $vendor-$service naming to keep
> things clear (and unique and future proof). Overuse of "central" is
> just killing us, nor is it appropriate for any service, as it is the
> target.
>
> As said above, the sunset services are taking away the "native" Maven
> deploy support. Moreover, Maven 4 is here to come, but we cannot leave
> Maven 3 users alone either. In Maven 4 you can more easily hack up
> some "deploy with a twist" solution, but this does not work for Maven
> 3 users.
>
> Plus, I'd dare to say that publishing is something orthogonal to your
> project. What if you want to publish to two places? Or what if you are
> about to (or forced to) switch services you use for publishing? These
> changes should be "simple" (as in light, simple to implement), but
> instead, many times this imply quite a lot of changes on your project,
> introducing new profiles, properties, plugins, maybe extensions, and
> so on. Even if we consider the same target (Central), moving from one
> service to another is not trivial. So far, Maven "got away" by using
> (hence, changing) Nx2 staging endpoint in
> distributionManagement.repository.url (ie. when moving from S01 to
> RAO), but again, this is simply not enough today.
>
> Site note: many Maven projects used one of RAO, OSS or S01 to publish
> to central, and almost all of them used "own invented" server.id for
> authentication, even if it was pointing to the same service. User who
> was hopping from project to project had to fill up his settings.xml
> with all the variations of used server IDs for these 3 services, even
> if auth material was usually the same (as the user had own account on
> these). Hence, by separating service from POM. it would allow users to
> have only as many service related server entries in settings.xml as
> much they are really using (currently max would be 4).
>
> (a digression: IMHO distributionManagement.repository.url should
> contain the TARGET URL, not the SERVICE -- that may not even be
> describable with a single URL -- , but that's another thing and topic,
> not for this thread).
>
> Maven did a great job of abstracting things away ("everything is an
> artifact", "remote repository is from you get them" etc) hence WHERE
> and HOW you publish should be abstracted as well. In fact, nothing
> should stop you from publishing to two places as well. Who knows what
> the future brings?
>
> Hence, IMO we need to act in this area. We should:
> * provide OOTB solution for both, Maven 3 and Maven 4
> * have it non-invasive (as opposed to vendor supplied, closed source
> solutions) that poses requirements to alter/adapt your build AND ties
> you to one service
> * still, it should not reinvent the whole universe, it should rely on
> Maven infrastructure as much as possible (ie. user should not
> reconfigure the solution ground-up, or use alternate means to provide
> auth etc). It should be a Maven thing, not some side stuff.
>
> Users are concerned as well, for example, here is this issue, that
> nicely collects all the known problems, worth reading:
> https://issues.apache.org/jira/browse/MNG-8584
>
> ---
>
> So, after a long email, a short(er) proposal: as you may know,
> Maveniverse umbrella is the place for "fast paced prototyping and
> experiments", but it also hosts projects that our members voted to not
> have under the ASF Maven project (like Mason Maven4 extension is).
> There were several attempts to provide solutions for the problems
> above. The initial attempt named MDK
> https://github.com/maveniverse/mdk was deemed overly complicated (and
> spanning across several things), so it was dropped.
>
> Next attempt is Njord:
> https://maveniverse.eu/docs/njord/
> https://github.com/maveniverse/njord
>
> It is still prototyping, many things are not there yet, like automatic
> workflow handling (ie. publishing still happens as with RAO/OSS/S01
> service with "vanilla experience", like most ASF projects do: you need
> to push some buttons), but solves the problems explained above and
> also enables Maven 3 and Maven 4 to publish to the new Sonatype
> Central Portal without any hassle. Importantly, it is not invasive nor
> forces users to "reinvent" anything. As extra, it offers "local
> staging" (analog to Nx2 "remote staging") and much more.
>
> In short, with Njord:
> * to use it, you need no project change at all (!) -- ideally with
> Maven 4 it can be just "user extension", similar to Mimir
> * you can deploy "as usual", your project works as before, no need to
> change anything (but undoing "tricks" for current Central publishing
> is worth to do).
> * with it, you can locally stage the project as many times you want,
> it works with or without release plugin
> * once you have staged the artifacts, you can publish locally staged
> repositories (and drop it, or maybe keep it and re-publish it
> somewhere else, etc) and many more.
>
> So, I'd like to ask you to:
> * please take a peek at Njord, scrutinize it, propose improvements and
> changes for it, maybe even test drive it
> * if you want, fall in and help pushing it toward 1.0.0
> * and once (and if) we agree it is "done" (whatever it would mean),
> I'd like to propose to "bring it in" into the ASF Maven project, and
> make it some sort of "Maven 3/4 Solution for Publishing".
>
>
> Thanks
> T
>
> ---------------------------------------------------------------------
> 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