Close to two years ago I posted my thoughts on introducing a Maven-like structure for organizing and building Gradle projects. I dubbed those ramblings The Gradle POM and The Gradle SuperPOM. In truth the latter is a misnomer, instead it should had been “The Gradle Parent POM”. These posts served as an introduction to a new project I had been working on: the Kordamp Gradle Plugin suite. The original goal for this project was to bring order to chaos found in the dozens of Open Source projects I actively maintain. Before Kordamp began, all these projects relied on the tried Read More
Maven features I wish Gradle had: inlined plugins
Since the early days of Maven the development team recognized that they couldn’t (and shouldn’t) provide a solution for every problem we as consumers may face with our builds. In order to cater for our every whim and emerging requirements the Maven build tool added a pluggable mechanism to provide behavior as needed, and thus Maven plugins were born. Maven plugins are typically configured inside a <build> block found in the pom.xml file, which lets them contribute goals that may bind to lifecycle phases by default, or just providing goals that you can invoke at any time. But what if Read More
Gum 0.8.0 is out!
Whoa, 2 Gum releases in the same month? I’m having so much fun working with and on Gum that I just couldn’t resist posting another release. Last time I mentioned that Gum is capable of launching JBang with explicit and implicit targets; in the case of implicit a strict file order was to be followed: .java, .jsh, and .jar. Well no more, Gum 0.8.0 let’s you configure the resolution order as you deem necessary. The configuration may be per directory (project) or global. Which brings me to the second major feature added to this release, how do you know which Read More
Maven features I wish Gradle had: override task properties
It’s no secret that one of the most common properties ever set on a Maven build is -DskipTests which as the name implies, instructs Maven to skip running tests. As a matter of fact that property is read by the maven-surefire-plugin to figure out if it should run tests or not. As it turns out there’s a separate property named skip that instructs Maven to skip compiling and running tests. If you’re curious and peek at the documentation you may notice that the field/property names for skipTest match but for skip you’ll find a property named maven.test.skip. As it happens, Read More
Maven features I wish Gradle had: summary reports
For quite some time now, Maven users have grown accustomed to seeing a summary report when a build is run. The report appears at two locations: at the beginning of the build where Maven shows the projects that participate in the current session (or Reactor if you prefer) which gives you a clue of how many projects, their packaging selection (jar, pom, etc), and perhaps more importantly, in which order they will be processed. The second location is at the end of the build where each project display its status (SUCCESS, FAILURE, SKIPPED) plus the time it took to execute Read More
Publishing artifacts to Maven Central with Bintray & Gradle
Recently I joined a conversation on Twitter where the OP complained to spending hours to get a brand new computer setup to publish artifacts to Maven Central. The issue stemmed from having PGP signature files moved from one location to another. There are other issues that may arise when uploading artifacts to Maven Central, specially when doing it for the first time. The rules for publishing artifacts are stated here. A common mistake is to omit one of the required POM elements, which will likely trigger a series of back-and-forth revisions until you get it right. This can be frustrating Read More
Does Gradle need build profile support?
The need for customizing a build based on a particular environment is a prevalent one. Maven offers an option called build profiles which lets you customize certain aspects of the build but not all. However on the Gradle side of things, there’s no such feature found in core, with the argument being that contrasted to what Maven offers as means for defining build files (a limited XML based DSL), Gradle offers not one but two DSLs based on full programming languages. This allows developers use the same control flows they’re used to in production and test code but on build Read More