The first hurdle I ran into while moving to a continuous integration tool (i.e. Travis), was migrating my build process from using the Eclipse IDE to a command line build tool. There are several options out there for this, but I decided on gradle for this project's build tool.
What is gradle? It is a flexible general purpose build tool, like make, maven, or ant. Being an embedded c programmer, I was very familiar with make but wanted to learn more about some of the newer build tools out there, which is mainly why I chose gradle.
One of the nice things over make is that gradle already has a build plugin for java. For those of you new to gradle, I would recommend checking out the gradle plugin for java.
Modify Default Gradle Folders
I wanted to change the gradle the default directory from src/main/java and /src/main/resources to src/ and lib/ for its source folder and resources folder respectively.
sourceSets {
main.java.srcDir 'src/'
main.resources.srcDir 'lib/'
}
Append Version Number to Binary
Next, I wanted to append the version number to the executable JAR file so I could quickly and easily identify the version of code I was running. Gradle has the ability to pass in parameters to the script with the -P option. If the parameter prodVersion is specified, then this version is applied to the suffix of the JAR file. If no value is passed in, then -Developer-Build is appended.
allprojects {
if (project.hasProperty('prodVersion')) {
project.version = project.prodVersion
} else {
project.version = 'Developer-Build'
}
}
Include Libraries In JAR File
The default gradle JAR task was insufficient for creating the executable JAR file since nrserialjava.jar needs to be included in the JAR file. After doing some searching, I found that this could be accomplished with this code:
task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'controller.Application'
}
baseName = project.name
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
Now when running the command `gradle fatJar` all compiled JAR files will be included in the executable JARExtend Gradle JAR Task
When Travis does a deploy, it calls gradle assemble, which in turn calls gradle jar. Instead of trying to figure out how to have Travis call gradle fatJar I figured an easier solution was to extend the jar task with fatJar. This was done by adding the following code to build.gradle:
jar.finalizedBy(fatJar)
Now, anytime jar is called, fatJar will always be called.
Opening Project with Eclipse
I prefer Eclipse for my IDE but would prefer not maintaining Eclipse project settings file and a gradle build file. Gradle will automatically generate an Eclipse .project and .classpath with the command:
gradlew eclipse
For the full build.gradle file, please check out the ChirpUI project on GitHub.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.