%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

% Sonderzeichen: ├
\usepackage{pmboxdraw}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Bilder
\usepackage{graphicx}
\usepackage{graphics}

\usepackage{setspace}
\usepackage{multicol}

% Schriftarten für fettes Monospace
%\usepackage[T1]{fontenc}
%\usepackage{lmodern}

% Symbol für natürliche Zahlen
\usepackage{amssymb} 

%Kopfzeile
\ihead{Softwaretechnik}
\chead{}
\ohead{http://kohnlehome.de/softwaretechnik/maven.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{\href{http://kohnlehome.de/}{Franz Kohnle}}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
Maven
\end{center}

\section*{Was ist Maven?}
\begin{itemize}
\item Software Project Management Tool
\item Dependency Management mit großem Repository mit Bibliotheken
\item Build Lifecycle Tool: Phasen werden in bestimmter Reihenfolge ausgeführt 
\end{itemize}



\section*{Download und Installation}

\begin{itemize}
\item Java JDK 1.7
\item \href{https://maven.apache.org/download.cgi}{apache-maven-3.x.y.zip} irgendwo entpacken
\item bin-Verzeichnis zu PATH hinzufügen
\item Test mit \texttt{mvn --version}
\end{itemize}

\section*{Proxy-Server}
\subsection*{Konfigurationsdatei}
\begin{verbatim}
${user.home}/.m2/settings.xml
\end{verbatim}

\subsection*{Inhalt}
\begin{verbatim}
<settings>
  ...
  <proxies>
   <proxy>
      <id>gbs-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>192.168.100.1</host>
      <port>8080</port>
    </proxy>
  </proxies>
  ...
</settings>
\end{verbatim}


\section*{Maven in 5 Minutes}
\href{https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html}{Maven in 5 Minutes}


\newpage

\section*{Projekt erstellen}
\subsection*{Befehl}
\begin{verbatim}
mvn archetype:generate \
    "-DgroupId=de.gbsschulen.app" \
    "-DartifactId=my-app" \
    "-DarchetypeArtifactId=maven-archetype-quickstart" \
    "-DarchetypeVersion=1.4" \
    "-DinteractiveMode=false"
\end{verbatim}

\subsection*{Erzeugt im aktuellen Verzeichnis folgende Verzeichnisstruktur}
\begin{verbatim}
my-app/
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── de
    │           └── gbsschulen
    │               └── app
    │                   └── App.java
    └── test
        └── java
            └── de
                └── gbsschulen
                    └── app
                        └── AppTest.java
\end{verbatim}

\subsection*{Erzeugte pom.xml}
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>

<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>de.gbsschulen.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>my-app</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
\end{verbatim}

\newpage

\section*{Maven Tools}
\subsection*{Tool ausführen}
\begin{verbatim}
mvn <TOOL>
\end{verbatim}

\subsection*{Maven Lifecycle Phases}
\begin{enumerate}
\item \texttt{validate} 
\item \texttt{compile} Erzeugt target-Verzeichnis mit .class-Dateien
\item \texttt{test} Führt Unit-Tests aus
\item \texttt{package} Erzeugt .jar-Datei
\item \texttt{integration-test}
\item \texttt{verify} 
\item \texttt{install} 
\item \texttt{deploy} 
\end{enumerate}

\subsection*{Sonstige Tools}
\begin{itemize}
\item \texttt{mvn clean} Löscht target-Verzeichnis
\item \texttt{mvn site} Erzeugt Dokumentation
\end{itemize}


\section*{App starten}
\begin{verbatim}
java -cp target/my-app-1.0-SNAPSHOT.jar de.gbsschulen.app.App
\end{verbatim}

\end{document}

