bld
is a new build system that allows you to write your build logic in pure
Java.
bld
was created because we're not really interested in build tools. We use
them because we have to, but we'd rather just get on with coding the real stuff.
bld
is designed with the following principles in mind:
bld relies on Java 17 and leverages many of the features that this version of Java provides. Thanks to the modern language constructs, your Java build logic ends up looking very concise, is easily readable and understood by any IDE. You automatically get support for auto-completion and javadoc documentation, and you can split your build logic into multiple files and classes when you outgrow a single file.
Here is a complete bld file for a Java application using JUnit 5 for its tests. Nothing else is needed to be able to run it, test it and distribute it:
package com.example;
import rife.bld.Project;
import java.util.List;
import static rife.bld.dependencies.Repository.*;
import static rife.bld.dependencies.Scope.*;
public class MyappBuild extends Project {
public MyappBuild() {
pkg = "com.example";
name = "Myapp";
mainClass = "com.example.MyappMain";
version = version(0,1,0);
downloadSources = true;
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
scope(test)
.include(dependency("org.junit.jupiter",
"junit-jupiter",
version(5,11,0)))
.include(dependency("org.junit.platform",
"junit-platform-console-standalone",
version(1,11,0)));
}
public static void main(String[] args) {
new MyappBuild().start(args);
}
}
NOTE:
bld
supports different ways to describe dependencies,dependency("org.junit.jupiter", "junit-jupiter", version(5,11,0))
can for instance also be written asdependency("org.junit.jupiter:junit-jupiter:5.11.0")
. Which format you use, is a matter of personal taste.
bld
fit?From a very high level, build tools can be organized in a matrix:
Declarative | Code | Describes | Immediate | |
---|---|---|---|---|
Maven | X | X | ||
Gradle | X | X | ||
bld |
X | X |
Writing your build logic in the same language as your application (Java), significantly reduces the cognitive load, and taking actions immediately without having to mentally construct a described plan, makes it easier to reason about your build.
Since version 2.0, bld comes with its own IntelliJ IDEA plugin:
bld
projects and find their main Java classbld
projectsbld
projects in a side panelbld
projectbld
commandsbld
console panel for command output with source code hyperlinkingbld
dependency treebld
in offline or online modebld
commandbld
one-click cache invalidationbld
commands to run before or after IDEA compilationbld
command run configuration with options, JVM arguments, and before launch tasksbld
commandsbld
lets your build logic get out of the way so that you can focus on writing
applications.
Get started immediately by installing bld
through Homebrew, SDKMAN!, JBang, zip archive, or run it directly from its jar file.
If you merely want to create a new project, bld
can also be used by executing this one-liner:
bash -c "$(curl -fsSL https://rife2.com/bld/create.sh)"
If you have any questions, suggestions, ideas or just want to chat, feel free to post on the forums or to join us on Discord.
Read more in the full documentation and bld Javadocs.
bld
If you want to contribute to bld
or customize it, all you have to do is clone the GitHub
repository and update the RIFE2/core submodule:
git clone git@github.com:rife2/bld.git
cd bld
git submodule init
git submodule update
Then use bld
to build itself:
./bld compile
The project has an IntelliJ IDEA project structure. You can just open it after all the dependencies were downloaded and peruse the code.