Byggeverktøy
(til Java)
Ant
Maven
Gradle
Ant
Kom i 2000 som en erstatning for Make
<project name="Example" default="jar">
<target name="compile" description="Kompiler Java-programmet">
<mkdir dir="classes"/>
<javac srcdir="src" destdir="classes" includeantruntime="false" debug="true"/>
</target>
<target name="jar" depends="compile" description="Lag en JAR-fil">
<jar destfile="Example.jar">
<fileset dir="classes" includes="**/*.class"/>
<manifest>
<attribute name="Main-Class" value="org.example.Main"/>
</manifest>
</jar>
</target>
<target name="clean" description="Fjern genererte filer">
<delete dir="classes"/>
<delete file="Example.jar"/>
</target>
</project>
En build.xml-fil til Ant:
ant
Kompilering:
Kjøring:
java -jar Example.jar
Rydding:
ant clean
Maven
Kom i 2004 som en erstatning for Ant
Gjør i tillegg til bygging "dependency management", altså å laste ned biblioteker, og biblioteker bibliotekene bruker.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>my-app</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
En pom.xml-fil til Maven:
mvn test
Kjøring av tester:
Kjøring:
java -cp target/my-app-0.1.jar org.example.Main
Rydding:
mvn clean
mvn package
Kompilering:
├── pom.xml (eller build.gradle)
└── src
├── main
│ └── java
│ └── org
│ └── example
│ └── Main.java
└── test
└── java
└── org
└── example
└── MainTest.java
Standard oppsett av mapper for Maven (og Gradle)
Java-filer legges i src/main/java
Eventuelle pakke-mapper
Ved enhetstesting legges test-kode legges i src/test/java
Gradle
Kom i 2007 som en erstatning for Maven
Gjør det samme som Maven, men prøver å være lettere å bruke og tilbyr en del ekstra funksjonalitet i tillegg.
Bruker det samme mappe-oppsettet som Maven
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "org.example.Main"
repositories {
jcenter()
}
dependencies {
testCompile 'junit:junit:4.11'
}
En build.gradle-fil til Gradle:
gradle test
Kjøring av tester:
Kjøring:
Rydding:
gradle clean
gradle installDist
Kompilering:
gradle run
gradle wrapper
Når man bruker byggeverktøy kan det skape et par vesentlige problemer:
- Hvis du skal gi koden til noen andre må de installere akkurat det byggeverktøyet du har brukt
- Hvis du kommer tilbake til et prosjekt etter lang tid kan byggeverktøy ha endret seg nok til å ha problemer med gamle prosjekt.
For å løse dette har Gradle kommandoen "gradle wrapper" som genererer noen ekstra filer som du kan oppbevare og levere sammen med koden.
./gradlew test
Kjøring av tester:
Kjøring:
Rydding:
./gradlew clean
./gradlew install
Kompilering:
./gradlew run
Fungerer uten å ha gradle installert selv!
gradle wrapper
cd
wget https://services.gradle.org/distributions/gradle-2.11-bin.zip
unzip gradle-2.11-bin.zip
mv gradle-2.11 gradle
rm -f gradle-2.11-bin.zip
echo 'export PATH=~/gradle/bin:$PATH' >>~/.bashrc
source ~/.bashrc
gradle -v
Installasjon av Gradle på Linux:
brew install gradle
Installasjon av Gradle på Mac:
brew install ant
brew install maven
Hvis man har Homebrew (installeres enkelt fra http://brew.sh) er det bare å kjøre følgende kommando:
Med Homebrew kan man også installere Ant og Maven med følgende kommandoer:
Installasjon av Gradle på Windows
Ikke mulig for dere på IFI-maskiner (såvidt jeg vet), men til egen maskin se her:
http://codetutr.com/2013/03/23/how-to-install-gradle/
(Men gradles wrapper fungerer både på IFI og på egen maskin uten å installere noe)
Eksempel - JSoup
Du har funnet ut at du vil bruke JSoup(http://jsoup.org) for å hente info fra en nettside.
- Finn JSoup på Maven Central (http://search.maven.org)
- Legg inn referanse i build.gradle
- Bruk i koden din
search.maven.org
search.maven.org
Velg nyeste versjon
search.maven.org
Velg Gradle
search.maven.org
Kopier
build.gradle
Lim inn
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "MyMain"
repositories {
jcenter()
}
dependencies {
compile 'org.jsoup:jsoup:1.8.3'
}
MyMain.java
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public class MyMain {
public static void main(String[] args) throws Exception {
Document doc = Jsoup.connect("http://www.vg.no").get();
System.out.println("====== " + doc.title() + " ======");
Elements titles = doc.select(".article-content");
for (Element e : titles) {
System.out.println(e.text());
}
}
}
(filtreet for oversikt)
.
├── build.gradle
└── src
└── main
└── java
└── MyMain.java
git clone https://github.com/evestera/inf1010v16
cd inf1010v16/Gradle/JSoupExample
./gradlew run
Hvis du vil teste selv:
Git-repo med koden:
Enkelt gradle-prosjekt ferdig satt opp:
Denne presentasjonen:
For å finne java-pakker:
Få gradle til å kjøre fortere:
Byggeverktøy - Java
By Erik Vesteraas
Byggeverktøy - Java
- 1,935