January 21st, 2025

JReleaser: quick and effortless way to release your project

JReleaser is a tool that simplifies software release processes for various programming languages, supports multiple packaging options, integrates with Git services, and automates tagging, changelog generation, and artifact uploads.

Read original articleLink Icon
JReleaser: quick and effortless way to release your project

JReleaser is a versatile tool designed to simplify the release process for software projects across various programming languages, including Java, Go, Node, Rust, and more. It allows users to calculate checksums, sign files with PGP, and release projects to popular Git services like GitHub and GitLab. JReleaser supports multiple packaging options, enabling the creation of package descriptors for platforms such as Homebrew and Snapcraft. Users can publish their packages to designated stores and announce releases through various channels, including Twitter and Sdkman. The tool emphasizes ease of use with quick configuration options and supports multiple formats like YAML, TOML, and JSON. It also provides a command-line interface (CLI), Maven and Gradle plugins, and Docker integration, making it adaptable to different development environments. JReleaser automates the tagging of releases, generates changelogs, and uploads all necessary artifacts, enhancing distribution and reach for developers.

- JReleaser simplifies the software release process for multiple programming languages.

- It supports various packaging options and integrates with popular Git services.

- Users can publish and announce releases with minimal effort using a single command.

- The tool offers flexibility in configuration formats and development environments.

- JReleaser automates tagging, changelog generation, and artifact uploads.

Related

1JPM: A Maven/Gradle alternative in a single Java file

1JPM: A Maven/Gradle alternative in a single Java file

The project "1JPM" is a Java Project Manager offering an alternative to Maven and Gradle. It is a single customizable Java file for project configuration, eliminating XML or Groovy. Users can integrate it by adding the JPM.java file and executing commands in the terminal. 1JPM treats everything as a plugin, allowing the addition of third-party plugins. It covers essential functions like build, clean, assemble, check, dependencies, help, tasks, and jar, but may lack some advanced features. The project is in early stages, providing basic build capabilities. Users can seek further assistance for details or support.

Launch HN: Release (YC W20) – Orchestrate AI Infrastructure and Applications

Launch HN: Release (YC W20) – Orchestrate AI Infrastructure and Applications

Release.ai, founded by Erik, Tommy, and David, offers a platform for orchestrating AI applications, providing free GPU cycles, prioritizing data security, and featuring a workflow engine with deployment templates.

JPlag – Detecting Software Plagiarism

JPlag – Detecting Software Plagiarism

JPlag is a local software plagiarism detection tool supporting various programming languages. It requires Java SE 21, allows customization of detection sensitivity, and can be used via CLI or API.

Replit limits free plan users to 5 repls (unless a $25 subscription)

Replit limits free plan users to 5 repls (unless a $25 subscription)

The replit-export CLI tool allows users to download and back up their Repls from Replit's Starter Plan, requiring an authorization cookie and caution regarding disk space and rate limits.

I'm daily driving Jujutsu, and maybe you should too

I'm daily driving Jujutsu, and maybe you should too

Drew DeVault shares his positive experience with Jujutsu, a Git frontend for power users, enhancing workflows despite some limitations, including missing features and a restrictive Contributor License Agreement.

Link Icon 8 comments
By @nja - 14 days
I just built a library on jReleaser!

https://github.com/NJAldwin/maven-central-test

I wanted to release a jvm lib on Maven Central -- which no longer requires opening a jira ticket for a new package! Instead, simple DNS TXT verification is all that's needed. However, the caveat is that it's the new Maven Central service, which doesn't have as much support in build tools as the older sonatype one. jReleaser is one of the few tools which supports it.

So I hacked together a fully self-contained minimally reproducible example of a Gradle library, built and published in GitHub using jReleaser.

There were several things that had me scratching my head with jReleaser, and the docs are strangely organized IMO (it comes from supporting so many facets, I believe), but it ended up working well enough!

I ended up adding a doc build and some other stuff to the repo too. Now I have a full example that I can use to trivially publish new libraries (such as in-progress https://github.com/NJAldwin/ambient-consumer ).

(Why Maven Central? Since the demise of jFrog/jCenter/BinTray, there's not been an easy way to widely publish jvm libraries. At work I've used GH packages, but that requires a GitHub login even for public packages, which is a significant barrier IME. JitPack is one option, but it does on-demand builds linked closely to the origin repo, whereas I wanted the classic immutable build published on release.)

By @gunnarmorling - 14 days
Very nice to see JReleaser here on HN! I'm very happy with it, using it for publishing releases of kcctl (a command line client for Kafka Connect written in Java, compiled and published as native binaries for Linux/MacOS/Win via GraalVM). Here's the config, in case folks are looking for an example: https://github.com/kcctl/kcctl/blob/main/pom.xml#L430-L530. Releases are triggered by running a parameterized workflow (taking the version to be released) on GitHub Actions.

A big shout-out to Andres Almiray, the maintainer of JReleaser, who has always been super-fast to answer any questions and help to sort out issues when I ran into them.

By @pitah1 - 14 days
This looks really cool. I'm surprised I didn't find this before when I was searching for something like this. I've been using jpackage[1] for a while now but this seems like it would be easier for me to manage using JReleaser given there is support via Gradle.

Would this be a simple lift and shift job to move to JReleaser (as it seems like it just uses jpackage behind the scenes)? With jpackage, if you want to create a Windows exe, it needs to be built on Windows. Similarly, build dmg on Mac and deb for Linux. Does Jreleaser also require this?

[1] https://docs.oracle.com/en/java/javase/22/docs/specs/man/jpa...

By @whartung - 14 days
When I released my last Java project, I came out with a MacOS DMG, a Windows EXE installer, a Windows MSI installer, and a Fat Jar for Linux.

Now we have MacOS ARM, MacOS x86, Linux ARM/x86, Windows ARM/x86.

Even for a basic "cross platform" Java program (that bundles the JRE), that's 6 installs, which ostensibly need to be built on their respective platforms. Add on to that if you using something that includes a binary (like, say, SQLite, much less JavaFX which I work with).

The release burden is, well, frankly, daunting for a small project.

My honest thinking for my next project release is simply to tell folks to install the JDK, download the source code, and have them run:

  ./mvnw javafx:run.
(Or they can run go.sh/go.bat which essentially does the same thing.)

That'll download all of the stuff it needs including the Maven runtime and all of the libraries, as appropriate, build the project, and run it. It's Fast Enough (maybe it's awful on a small RPi, I dunno).

When I get more than 5 downloads, folks can vote as to which installer to work on.

Creating the executables was quite the black hole. I didn't create one for Linux because I honestly didn't know what packaging scheme to use.

In theory, the CI infrastructure on GitHub will let you build on different platforms, yet another black hole of time to sink into.

So, yea, at least initially, I think the maven wrapper will be my "release model". SHOULD be pretty simple.

By @brunoluiz - 14 days
Is it somehow related to GoReleaser? I saw GoReleaser supports multiple languages now as well
By @morisil - 12 days
I am happy with JReleaser, I just started migrating all my libraries from publishing through io.github.gradle-nexus.publish-plugin to publishing with jreleaser, which became necessary after migrating my sonatype account to the new maven central scheme.

https://github.com/xemantic/

I also configured the announcement feature, so now I can share each release on my discord server and hopefully soon on LinkedIn.

The documentation of JReleaser is quite comprehensive, however does not fully cover "howto" steps regarding auth for each provider. Which in my case translated to initial cycle of try-and-error with my GitHub actions.

By @buremba - 14 days
Is there a doc for Python apps?
By @layer8 - 14 days
This doesn’t seem to address building installers, unfortunately.