Byggeverktøy

(til Java)

Denne presentasjonen:

slides.com/evestera/bygge-java

 

(ligger også link på semestersiden)

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:

 

  1. Hvis du skal gi koden til noen andre må de installere akkurat det byggeverktøyet du har brukt
  2. 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.

 

  1. Finn JSoup på Maven Central (http://search.maven.org)
  2. Legg inn referanse i build.gradle
  3. 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:

Enkelt gradle-prosjekt ferdig satt opp:

vestera.as/inf1010/gradle-template.tar.gz

Denne presentasjonen:

slides.com/evestera/bygge-java

For å finne java-pakker:

http://search.maven.org

Få gradle til å kjøre fortere:

https://www.timroes.de/2013/09/12/speed-up-gradle/

Byggeverktøy - Java

By Erik Vesteraas

Byggeverktøy - Java

  • 1,856