25.022015

Projektverwaltung mit Gradle

Heute stelle ich euch eine Alternative zu Apache Maven vor. Wer Maven nicht kennt und vorzugsweise Java-Projekte noch mit ant oder von Hand kompiliert: Es lohnt sich Maven kurz anzulesen. Wer Maven schon kennt und gerne nutzt: Werft einen Blick auf Gradle! Gradle punktet in meinen Augen besonders durch

  • Lesbare Konfiguration
  • starke Umsetzung des Prinzips "Convention over configuration"
  • Gradle Skripte sind in Groovy verfasst und erlauben ein hohes Maß an Freiheit in der Definition einzelner Tasks
  • Gradle kann einfach mit dem Projekt verteilt werden und setzt somit nur eine installierte JDK voraus

Um euch die Unterschiede zu Maven zu verdeutlichen nehmen wir an, wir hätten unser typisches "hello-world"-Projekt, welches noch einige JUnit-Tests mit sich bringt. In Maven würden wir jetzt eine build.xml Datei erzeugen, welche der folgenden Struktur entspräche:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>hello-world</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

In Gradle sieht eine entsprechende Datei (build.gradle) dann folgendermaßen aus:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.8.2'
}

Um Maven nicht zu benachteiligen definieren wir noch optionale Projektparameter, die beispielsweise zum Veröffentlichen des Projektes  in einem Maven-Repository oder zur Auflösung von Abhängigkeiten anderer Projekte nützlich sind und erhalten:

apply plugin: 'java'
group = 'com.example'
version = '1.0-SNAPSHOT'
repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.8.2'
}

Für den Namen des Projekts wird wenn nicht anders angegeben der Name des Projektverzeichnises genommen. Wer jetzt schon Lust auf Gradle bekommen hat, kann sich durch die strukturierten Tutorials von gradle.org durchklicken. Als Startpunkt hier eine kurze Auswahl: Gradle installieren, Java-ProjekteUnterprojekte

Weiterhin viel Spaß beim Programmieren