prog:gradle_setup
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:gradle_setup [2015/08/31 11:11] – [Die Aufrufscripte beim Build parametrisieren] gpipperr | prog:gradle_setup [2015/08/31 11:21] (aktuell) – [Die Aufrufscripte beim Build parametrisieren] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====Ein Java JDBC Projekt mit dem Build Tool Gradle erstellen===== | ||
+ | |||
+ | Ziel ist es ein komplette Projekt per Script aus allen Quellen und Abhängigkeiten zusammen zu stellen. | ||
+ | |||
+ | Dazu kann das Open-Source Enterprise Build Automation Tool [[https:// | ||
+ | |||
+ | Gradle setzt auf [[http:// | ||
+ | ==== Setup der Gradle Umgebung ==== | ||
+ | Die Installation besteht aus dem Download des aktuellen Builds und dem richtigen Setzen der Java Home Umgebungsvariable | ||
+ | |||
+ | * Download der letzten Release von https:// | ||
+ | * Entpacken und Kopieren nach zum Beispiel " | ||
+ | * Bei Bedarf einfügen einer Java Home Variable direkt am Anfang im gradle.bat Script (besser über die Umgebungsvariablen lösen!) | ||
+ | |||
+ | Prüfen: | ||
+ | <code powershell> | ||
+ | #Java Home setzen und prüfen ob das gradle aufgerufen werden kann | ||
+ | set-item -path env: | ||
+ | |||
+ | & D: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Projekt einrichten ==== | ||
+ | |||
+ | ===Verzeichnis für das Projekt anlegen und initialisieren === | ||
+ | |||
+ | <code powershell> | ||
+ | mkdir D: | ||
+ | </ | ||
+ | |||
+ | Verzeichnis automatisch nach dem Default aufbauen/ | ||
+ | <code powershell> | ||
+ | cd D: | ||
+ | |||
+ | #Java Home setzen | ||
+ | set-item -path env: | ||
+ | |||
+ | |||
+ | #Java Projekt anlegen | ||
+ | & D: | ||
+ | |||
+ | :wrapper | ||
+ | :init | ||
+ | |||
+ | BUILD SUCCESSFUL | ||
+ | |||
+ | Total time: 3.208 secs | ||
+ | |||
+ | # | ||
+ | |||
+ | S D: | ||
+ | |||
+ | ├───.gradle | ||
+ | │ | ||
+ | │ | ||
+ | ├───gradle | ||
+ | │ | ||
+ | └───src | ||
+ | ├───main | ||
+ | │ | ||
+ | └───test | ||
+ | └───java | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | GUI starten und Einstellungen prüfen | ||
+ | |||
+ | <code powershell> | ||
+ | & D: | ||
+ | </ | ||
+ | |||
+ | Mit der Gui können zum Beispiel auch einzelne Tasks ausgeführt werden, wie das anzeigen der Abhängigkeiten im Projekt: | ||
+ | {{ : | ||
+ | |||
+ | === Source Code === | ||
+ | |||
+ | Source Code unter ..\src\main\java ablegen | ||
+ | |||
+ | ===Abhängigkeiten in Gradle hinterlegen === | ||
+ | |||
+ | Im ersten Schritt die gewünschten Repositories (Section repositories) | ||
+ | * jcenter() => https:// | ||
+ | * mavenCentral() => https:// | ||
+ | * flatDir {} oder ein lokales Directory angeben | ||
+ | |||
+ | |||
+ | Im zweiten Schritt die Abhängigkeit deklarieren (Section dependencies) | ||
+ | * compile '< | ||
+ | |||
+ | |||
+ | Datei " | ||
+ | <code java> | ||
+ | // Apply the java plugin to add support for Java | ||
+ | apply plugin: ' | ||
+ | |||
+ | //Software version | ||
+ | version = ' | ||
+ | |||
+ | // | ||
+ | jar { | ||
+ | manifest { | ||
+ | attributes ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // In this section you declare where to find the dependencies of your project | ||
+ | // $rootProject.projectDir | ||
+ | repositories { | ||
+ | // Use ' | ||
+ | jcenter() | ||
+ | | ||
+ | // | ||
+ | // | ||
+ | |||
+ | //local Files System | ||
+ | flatDir { | ||
+ | //use a name you can reference this later | ||
+ | name " | ||
+ | dirs " | ||
+ | dirs " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // In this section you declare the dependencies for your production | ||
+ | dependencies { | ||
+ | | ||
+ | // | ||
+ | // Main Class - Name (Name of the Jar) - Version | ||
+ | compile ' | ||
+ | compile ' | ||
+ | | ||
+ | //Test Unit | ||
+ | testCompile ' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Abhängigkeiten aufzeigen: | ||
+ | <code powershell> | ||
+ | & D: | ||
+ | </ | ||
+ | ==== Das Projekt erstellen ==== | ||
+ | |||
+ | Projekt " | ||
+ | <code powershell> | ||
+ | |||
+ | & D: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === Projekt für die Auslieferung zusammenstellen=== | ||
+ | |||
+ | Für mein JDBCChecker Projekt sind auch einige Shell Skripte notwendig, daher ein Verzeichnis " | ||
+ | |||
+ | <code powershell> | ||
+ | cd D: | ||
+ | |||
+ | mkdir delivery | ||
+ | mkdir delivery\lib | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Datei " | ||
+ | <code java> | ||
+ | |||
+ | //upload the jar files to your delivery directory | ||
+ | uploadArchives { | ||
+ | repositories { | ||
+ | | ||
+ | dirs ' | ||
+ | } | ||
+ | //use alternativ a named location like the file repostiory over the name of the repository | ||
+ | //add project.repositories.JDBCDriver | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //copy the dependencies | ||
+ | task copyDeps(type: | ||
+ | from(configurations.runtime) | ||
+ | into project.file(' | ||
+ | } | ||
+ | |||
+ | // | ||
+ | //task copyDeps(type: | ||
+ | // from { configurations.runtime.files { it instanceof ExternalDependency } } | ||
+ | // into project.file(' | ||
+ | //} | ||
+ | |||
+ | task copyAll(dependsOn: | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | Erzeugtes Jar Files (inkl. der Dependencies!) werden über den zusammengefassten Task " | ||
+ | <code powershell> | ||
+ | & D: | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Die Aufrufscripte beim Build parametrisieren === | ||
+ | |||
+ | Die notwendigen Libraries sollen gleich beim Bulid in den Start Scripten hinterlegt werden. | ||
+ | |||
+ | Die Skripte liegen bei mir unter " | ||
+ | |||
+ | Task für das Kopieren der Scripte und Anpassen des Klassen Pfades: | ||
+ | <code groovy> | ||
+ | //set the classpath of the callscripts with the libraries of the project | ||
+ | task copyAndSetClasspath { | ||
+ | | ||
+ | //get a list of the necessary jars to run the main class | ||
+ | def jarList = [] | ||
+ | //println configurations.runtime.files { it instanceof ExternalDependency } | ||
+ | configurations.runtime.filter { it.name.endsWith (' | ||
+ | //println it.name | ||
+ | jarList.push(it.name) | ||
+ | } | ||
+ | | ||
+ | //println jarList | ||
+ | | ||
+ | def String dosLibString='' | ||
+ | jarList.each { jarName -> | ||
+ | dosLibString=dosLibString + ' | ||
+ | } | ||
+ | //println dosLibString | ||
+ | | ||
+ | def String bashLibString='' | ||
+ | jarList.each { jarName -> | ||
+ | bashLibString=bashLibString+' | ||
+ | } | ||
+ | //println bashLibString | ||
+ | | ||
+ | //" | ||
+ | def projectJar=rootProject.name+" | ||
+ | | ||
+ | //list the directory | ||
+ | def batchdir = new File(' | ||
+ | batchdir.eachFile { | ||
+ | if (it.isFile()) { | ||
+ | if (it.name.endsWith (' | ||
+ | //copy and replace with ant | ||
+ | ant.copy( file: it.canonicalPath | ||
+ | ant.replace(file: | ||
+ | ant.replace(file: | ||
+ | } | ||
+ | if (it.name.endsWith (' | ||
+ | //copy and replace with ant | ||
+ | ant.copy( file: it.canonicalPath | ||
+ | ant.replace(file: | ||
+ | ant.replace(file: | ||
+ | | ||
+ | //use groovy - not working - only for docu | ||
+ | //boolean success = new File( ' | ||
+ | //new File( ' | ||
+ | // new File( it.canonicalPath ).eachLine { line -> | ||
+ | // w << line.replaceAll( '## | ||
+ | // } | ||
+ | //} | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //add dependencies | ||
+ | copyAndSetClasspath.mustRunAfter ' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Git und Gradle ==== | ||
+ | |||
+ | |||
+ | ===Git Repository anlegen=== | ||
+ | |||
+ | Git Repository im Projektverzeichnis anlegen und eine [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | git init --shared | ||
+ | |||
+ | vi .gitignore | ||
+ | |||
+ | .gradle | ||
+ | build/ | ||
+ | delivery/ | ||
+ | |||
+ | # Ignore Gradle GUI config | ||
+ | gradle-app.setting | ||
+ | |||
+ | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) | ||
+ | !gradle-wrapper.jar | ||
+ | |||
+ | |||
+ | #---- | ||
+ | |||
+ | # Add all files | ||
+ | |||
+ | git add -A | ||
+ | git status | ||
+ | |||
+ | git tag -a 1.0.0 -m "First Release of the JDBC Checker Tool" | ||
+ | git commit -m "First Release of the JDBC Checker Tool" | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === Git Tag als Versionsnummer bei einem Build verwenden === | ||
+ | |||
+ | Auslesen mit eigener Methode und Test Task | ||
+ | |||
+ | Einfügen in build.gradle: | ||
+ | <code java> | ||
+ | |||
+ | /* | ||
+ | * Gets the version name from the latest Git tag | ||
+ | * Adjust your git Path settings | ||
+ | */ | ||
+ | def getVersionNrFromGit = { -> | ||
+ | println 'Info -- Start reading git over command line' | ||
+ | def stdout = new ByteArrayOutputStream() | ||
+ | exec { | ||
+ | commandLine '" | ||
+ | standardOutput = stdout | ||
+ | println 'Info -- read' | ||
+ | } | ||
+ | return stdout.toString().trim() | ||
+ | } | ||
+ | |||
+ | //Test Call | ||
+ | //task readVersion { | ||
+ | //println 'Info -- get result ::' + getVersionNrFromGit() | ||
+ | //} | ||
+ | |||
+ | |||
+ | //Software version | ||
+ | version = getVersionNrFromGit() | ||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | jar { | ||
+ | manifest { | ||
+ | attributes ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Mit diesen Aufrufen können dann mit Gradle beliebig komplexe Regeln abgebildet werden. | ||
+ | |||
+ | |||
+ | === Git Plugins=== | ||
+ | |||
+ | Für die Git Versionsnr können auch diverse Plugins verwendet werden siehe https:// | ||
+ | |||
+ | |||
+ | Ab Gradle 2.1 können die Plugins sehr einfach am Kopf der build.gradle hinzugefügt werden (erste Zeile!) | ||
+ | <code java> | ||
+ | plugins { | ||
+ | id " | ||
+ | } | ||
+ | </ | ||
+ | Anleitung für diese Plugin siehe auch https:// | ||
+ | |||
+ | Der Versionstag muss in der Notation (nach [[ http:// | ||
+ | |||
+ | Nachteil! | ||
+ | |||
+ | <code powershell> | ||
+ | set-item -path env:PATH -value " | ||
+ | echo $env:PATH | ||
+ | |||
+ | & D: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===Siehe auch=== | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | Web | ||
+ | * https:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Video | ||
+ | * https:// | ||
+ | |||
+ | Groovy Einführung | ||
+ | * https:// | ||
prog/gradle_setup.txt · Zuletzt geändert: 2015/08/31 11:21 von gpipperr