Automating Maven Releases with GitHub Actions

Manually releasing a Maven package is a hassle—updating versions, tagging commits, building artifacts, and pushing them to a package repository. What if you could automate most of this from GitHub Actions?

In this guide, we’ll set up a workflow that builds the project, bumps the release version, creates a git tag, and opens a draft GitHub release—without hand-editing pom.xml on every cut.

By the end, you’ll have a release pipeline that:

[Read More]

Monitoring application performance with OpenTelemetry

When response times spike or a request fails deep in a distributed system, guessing is expensive. OpenTelemetry gives you a vendor-neutral way to collect traces, metrics, and logs so you can see where time is spent and what broke.

In this post, we’ll wire OpenTelemetry into a Java application: dependencies, manual SDK setup, wrapping work in spans, and exporting data so bottlenecks show up before users do.

The code for this post can be found: gjong/open-telemetry-demo

[Read More]

Building a compile-time annotation processor in Java

In Java we have the option to add or change the code we are compiling during compilation. It allows us to add new code based upon annotations in the code. This could for example be used to generate some proxy classes, or setting up some service loader files.

In this post we will be looking at annotation processing to create a light-weight and very simplistic bean context.

Note: if you are looking for a CDI framework please don’t use the example in this post but look at Guice or Spring instead.

[Read More]