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


%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}


%Gesamtseitenzahl
\usepackage{lastpage}

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

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

% http://ctan.org/pkg/graphicx
\usepackage{graphicx}

%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/java11-module.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{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
Java 11 Module
\end{center}

\section*{Verzeichnis mit Quellcode}
\begin{verbatim}
|-- src
    |-- modula
    |   |-- de
    |   |   |-- kohnlehome
    |   |       |-- paketa
    |   |           |-- KlasseA.java
    |   |          
    |   |-- module-info.java
    |
    |-- modulb
        |-- de
        |   |-- kohnlehome
        |       |-- paketb
        |           |-- KlasseB.java
        |           
        |-- module-info.java
\end{verbatim}

\section*{Modul modula}
\subsection*{KlasseA.java}
\begin{verbatim}
package de.kohnlehome.paketa;

import de.kohnlehome.paketb.KlasseB;

public class KlasseA {
    public static void main(String[] args) {
        System.out.println("KlasseA sagt: " + KlasseB.getText());
    }
}
\end{verbatim}

\subsection*{module-info.java}
\begin{verbatim}
module modula {
    requires modulb; // benoetigtes Modul
}
\end{verbatim}

\section*{Modul modulb}
\subsection*{KlasseB.java}
\begin{verbatim}
package de.kohnlehome.paketb;

public class KlasseB {
    public static String getText() { return "Ich bin KlasseB"; }
}
\end{verbatim}

\subsection*{module-info.java}
\begin{verbatim}
module modulb {
    exports de.kohnlehome.paketb; // veroeffentlichtes Package
}
\end{verbatim}

\section*{Kompilieren}
\begin{verbatim}
javac -d build/modulb src/modulb/*.java src/modulb/de/kohnlehome/paketb/*.java
javac -d build/modula -p build src/modula/*.java src/modula/de/kohnlehome/paketa/*.java

# -d Zielverzeichnis
# -p Verzeichnis, in dem benötigte Module liegen
\end{verbatim}

\section*{Verzeichnis mit kompilierten Dateien}
\begin{verbatim}
|-- build
    |-- modula
    |   |-- de
    |   |   |-- kohnlehome
    |   |       |-- paketa
    |   |           |-- KlasseA.class
    |   |          
    |   |-- module-info.class
    |
    |-- modulb
        |-- de
        |   |-- kohnlehome
        |       |-- paketb
        |           |-- KlasseB.class
        |           
        |-- module-info.class
\end{verbatim}

\section*{Starten des Programms}
\begin{verbatim}
java -p build -m modula/de.kohnlehome.paketa.KlasseA

# -p Verzeichnis mit Modulen
# -m Hauptmodul mit Main-Klasse
\end{verbatim}

\end{document}

