Tags:

java and gradle

Tags:
  • java
  • gradle

Gradle is a build automation tool similar to Maven or Ant. Instead of a huge XML config gradle has a nice DSL based on groovy.

If you haven’t already, download and install it. E.g. on Mac, use:

$ brew install gradle

Gradle uses a config file called build.gradle. To have a good starting point, you can use the following command 1:

# for more info you can read the help:
$ gradle help --task init


$ gradle init --type java-library
:wrapper
:init

BUILD SUCCESSFUL

Total time: 2.659 secs

$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── Library.java
    └── test
        └── java
            └── LibraryTest.java

7 directories, 8 files

Now you can do some more adoption of the build.gradle:

build.gradleapply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

apply plugin: 'findbugs'
apply plugin: 'checkstyle'

mainClassName = 'MyApp'

repositories {
    jcenter()
}

jar {
    baseName = 'my_application'
    version =  '0.1.0'
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.7'
    // compile "joda-time:joda-time:2.2"
    // testCompile 'org.testng:testng:6.8.1' and add
    testCompile 'junit:junit:4.11'
    testCompile "org.mockito:mockito-core:1.+"
}


test {
    testLogging {
        exceptionFormat = 'full'
    }
}

tasks.withType(FindBugs) {
    reports {
        xml.enabled = false
        html.enabled = true
    }
 }

task checkstyleHtml << {
    ant.xslt(in: checkstyleMain.reports.xml.destination,
             style: file('config/checkstyle/checkstyle-noframes-sorted.xsl'),
             out: new File(checkstyleMain.reports.xml.destination.parent, 'main.html'))
}

checkstyleMain.finalizedBy checkstyleHtml

Getting Dependencies - JCenter Vs MavenCentral

JCenter seems to be a superset of MavenCentral. Among others, Android switched from MavenCentral to JCenter. Details here and here

Starting from an already existing Maven project

$ mvn archetype:generate
[INFO] Scanning for projects...
Downloading: 
[...]
Confirm properties configuration:
groupId: tld.domain
artifactId: test
version: 1.0-SNAPSHOT
package: tld.domain
 Y: : 
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /tmp
[INFO] Parameter: package, Value: tld.domain
[INFO] Parameter: groupId, Value: tld.domain
[INFO] Parameter: artifactId, Value: test
[INFO] Parameter: packageName, Value: tld.domain
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /tmp/test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:02 min
[INFO] Finished at: 2015-09-07T07:25:53+02:00
[INFO] Final Memory: 13M/57M
[INFO] ------------------------------------------------------------------------
$ cd test
# INFO: it used to be gradle setupBuild, but now its:
$ gradle init --type pom
:wrapper
:init
Maven to Gradle conversion is an incubating feature.

BUILD SUCCESSFUL

Total time: 3.937 secs

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.6/userguide/gradle_daemon.html

Run Tests

To have some more output, you can run the test task with the -i option:

 gradle test -i 

Or you can add the following to the build.gradle 1 2:

test {
    testLogging {
        exceptionFormat = 'full'
    }
}