Programmieren in Java



Ähnliche Dokumente
Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Automatischer Build mit Maven 2

Einführung in Maven und GWT

Softwareprojekte mit Kultur

Maven 2 Softwareprojekte mit Kultur

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Der Weisheit letzter Schluss:

Automatischer Build mit Maven

Lösungen zum 2. Komplex

Build Management Tool

Build Management. Präsentation von Daniel Mies

Seminar - Bericht. Maven Project Management & Comprehension. Fachhochschargau Departement Technik Studiengang Informatik. Gruppe Jonas Weibel

Build Management Tool?

Build Management Tool?

Software-Engineering Grundlagen des Software-Engineering

Programmieren II. Exkurs: Apache Maven. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Referat. Continuous Integration. mit Maven und Jenkins. Benjamin Keeser. Hochschule für angewandte Wissenschaften München FB 07 Informatik (Master)

Artem Eger. Build-Systeme in java Maven & ANT

Einführung in die Informatik Tools

Maven 2.0. DRV Jahrestagung Java Würzburg Rainer Vehns, codecentric GmbH codecentric GmbH

Verteilte Systeme (WS 2013/14) Übung 0: Einführung in Maven und Git. Oliver Kleine Institut für Telematik, Universität zu Lübeck

ANT. Kurzvortrag von Manuel Schulze.

Buildmanagement. Konstantin Domoratskyy

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

Buildwerkzeuge für Javaprojekte. Christian Bunse Institut für Informatik

Kurzanleitung zu XML2DB

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Wie konfiguiriert man Eclipse (mit oder ohne Plugin) Erich Ehses

LEHRSTUHL FÜR DATENBANKEN

1 Welches Problem löst Maven?

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Software Engineering II

Consultant & Geschäftsführer, enpit consulting OHG ugb@enpit.de

Version 0.3. Installation von MinGW und Eclipse CDT

Vorkurs Informatik WiSe 15/16

[3-1] Maven by Example

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

25 Import der Beispiele

Vorlesung Informatik II

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Komponenten-basierte Entwicklung Teil 3: Einführung in Maven

Das Build Tool Ant. Sebastian Mancke,

JCoverage. Uni Kassel Projektarbeit Software Engineering Markus Pilsl & Marko Medved

Anleitung zur Webservice Entwicklung unter Eclipse

Testen mit JUnit. Motivation

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

7. Pakete Grundlagen der Programmierung 1 (Java)

Grundlagen von Python

Das Build-Tool ANT ETIS SS05

Übung: Verwendung von Java-Threads

Build-Prozesse für Geschäftsanwendungen mit Apache Maven

Programmentwicklung ohne BlueJ

Nils Hartmann Gerd Wütherich. Build my bundle! oder: Es muss nicht immer PDE sein

Das Interceptor Muster

Java Einführung Packages

Continuous Integration (CI) Workshop

Maven Einführung. Dipl.-Inform. Alex Maier

Software Engineering II

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

(H ist Entropie) bei Redundanz Information vielleicht mehrfach. Redundanz zur Fehlererkennung und -korrektur nutzbar

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Einführung in Eclipse und Java

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Internet und WWW Übungen

Applications Applets (eingeschränkte Rechte)

Java: Vererbung. Teil 3: super()

Referent: Thomas Storch (FI für Anwendungsentwicklung, 1. Lj.) Vortrag: Apache Maven. Datum: Deutsche Software Engineering & Research GmbH

Software-Engineering 2: Automatische Build-Werkzeuge

Java Einführung Programmcode

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Eclipse 3.0 (Windows)

Enterprise java beans step-by-step

Innovator 11 classix. Java Reverse Engineering. HowTo. Ralph Schönleber.

Oracle APEX Installer

Anzeige des Java Error Stack in Oracle Forms

Web Services Security

Den Entwicklungsprozess im Griff mit Maven, Jenkins und Git

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

How To Einbinden von Kartendiensten in eine Java Applikation mit Hilfe des JXMapKit

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Innovator 11 classix. Anbindung an Eclipse. Einführung, Installation und Konfiguration. Connect. Michael Kaaden.

Java für C++ Programmierer

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

C++ mit Eclipse & GCC unter Windows

Installationsanweisung JavaHelp

Installation der SAS Foundation Software auf Windows

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Prinzipien Objektorientierter Programmierung

Test-Driven Design: Ein einfaches Beispiel

Transkript:

Programmieren in Java Vorlesung 12: Metawissen Java Bibliotheken, Maven Robert Jakob Albert-Ludwigs-Universität Freiburg, Germany SS 2013 Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 1 / 33

Inhalt Java Bibliotheken Maven Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 2 / 33

Java Bibliotheken Bibliotheken Sammlung von Paketen und deren Klassen Lösungen für thematisch zusammengehörendes Problem Selbst nicht ausführbar Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 3 / 33

Java Bibliotheken Beispiel Bibliothek: package simplemath; public class Arith { public static int add(int x, int y) {... } public static int sub(int x, int y) {... } } Programm: package calculator; // Uses package from library import simplemath.arith; public class Calculator { public static void main(string[] args) {... } Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 4 / 33

Java Bibliotheken Bibliotheken in Java Java Archive: JAR Zip-Dateien mit Metainformationen Inhalt eines JAR: Ordner(packages) mit Klassen (.class) und/oder Quellen (.java) Ordner META INF mit Metainformationen Resourcen (Bilder,... ) Ausschnitt einer Jar-Datei: META INF \ MANIFEST.MF \ simplemath \ Arith.class Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 5 / 33

Java Bibliotheken Das Jar-Tool Kommandozeilentool jar Anzeigen der Inhalte eines Jar: $ jar tf simplemath.jar Entpacken eines Jar: $ jar xf simplemath.jar Erzeugen eines Jar $ jar cf simplemath.jar simplemath Erzeugen in Eclipse: Projektexport > Java > Jar file Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 6 / 33

Java Bibliotheken Aufruf eines Java Programms Einfacher Aufruf eines Java-Program (Eclipse > Run): $ java calculator.calculator Main-Methode von calculator.calculator soll aufgerufen werden Classfile wird erwartet unter \ calculator \ Calculator.class Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 7 / 33

Java Bibliotheken Aufruf mit Bibliotheken Mit Verwendung von Jars: Angabe wo Klassen bzw. Jars zu suchen sind: Classpath Angaben: CLASSPATH oder Argument zum java Aufruf $ java -cp arith.jar:. calculator.calculator Classpath: Pakete und Klassen in arith.jar Pakete und Klassen im Verzeichnis. Aufruf innerhalb von Eclipse: Show View, Debug, Debug, Properties auf Prozess Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 8 / 33

Java Bibliotheken Einbinden einer Bibliothek in ein Eclipseprojekt Copy and Paste (JAR liegt im Repository) Add External Jar (Absoluter Pfad im.classpath) User Library (Namensreferenz im Workspaces) Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 9 / 33

Java Bibliotheken Metadaten Meta-Daten in MANIFEST.MF (Ausschnitt): Ausführbare Klasse/Ausführbares Jar Versionsnummer Versiegelte Klassen Sicherheit Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 10 / 33

Java Bibliotheken Ausführbares JAR META-INF/MANIFEST.MF: Manifest Version: 1.0 Main Class: calculator.calculator Datei muss mit Newline enden! Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 11 / 33

Java Bibliotheken Ausführbares JAR META-INF/MANIFEST.MF: Manifest Version: 1.0 Main Class: calculator.calculator Datei muss mit Newline enden! Setzen der ausführbaren Klassen beim Erzeugen: $ jar cfe calculator.jar calculator.calculator calculator Ausführen: $ java -jar calculator.jar Angabe von Classpath nicht möglich! Eclipse: Export Jar File, Angabe der Main-Class. Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 11 / 33

Java Bibliotheken Versionsinformationen Name: calculator Specification Title: My Calculator Specification Version: 1.2 Specification Vendor: My Company, Inc Implementation Title: My Calculator Implementation Version: build57 Implementation Vendor: Example Tech, Inc. Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 12 / 33

Java Bibliotheken Sealing Packages in JARs Idee: Sicherstellung, dass alle Inhalte eines Paketes aus einem Jar kommen. Vermeidung von Konflikten beim verwenden mehrere Jars. Name: simplemath/ Sealed: True Hinweis: Package muss mit / enden! Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 13 / 33

Java Bibliotheken Signieren von JARs Basiert auf Public-Private-Key Kryptographie 1 1 Details siehe Vorlesung Internetsecurity. Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 14 / 33

Java Bibliotheken Verifizieren Nutzer der Bibliothek: Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 15 / 33

Java Bibliotheken Probleme mit Jars Sichtbarkeit, Schnittstellen, erforderliche Pakete, dynamisches Laden/Entfernen OSGi-Bundles Versions- und Namenskonflikte NoSuchMethodException ClassNotFoundException Abhängigkeitsverwaltung Maven Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 16 / 33

Java Bibliotheken Maven Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 17 / 33

Maven - Was ist das? Anwendungsbereiche: Kompilierung Quelltext Verteilung Projektmanagement Quelltext Websites, Berichte,... Wofür ist das gut? Vereinfacht Verwaltung von Java-Projekten mit Abhängigkeiten Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 18 / 33

Convention over Configuration Standardeinstellungen sind ausreichend für normalen Gebrauch In Maven: Verzeichnisse für Quelltext, Tests Verzeichnisse für Ausgabe Namensgebung der Ausgabedateien Vorgefertigter Lebenszyklus (life-cycle) Erweiterung durch Plugins Compiler (maven-compiler-plugin) Unit Tests (maven-surefire-plugin) Code Coverage (maven-emma-plugin) Viele mehr Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 19 / 33

Projektmodel Project Object Model (POM) Kennzeichen: Abhängigkeiten zu anderen Projekten (Dependency Managment) Orte anderer Projekte (Repositories) Wiederverwendbarkeit der Build Logik Portierbarkeit und Integration (Eclipse, Netbeans,... ) Suchen nach Projekten und deren Metainformationen (Nexus 2 ) 2 https://repository.apache.org/ Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 20 / 33

Projektmodel als XML pom.xml als Projektbeschreibungsdatei Informationen die nicht den Standardeinstellungen entsprechen <project> <modelversion>4.0.0</modelversion> <groupid>de.uni freiburg.informatik.proglang</groupid> <artifactid>myproject</artifactid> <version>1.0 SNAPSHOT</version> </project> Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 21 / 33

Project Object Model Super POM 3 Basis für alle POM 3 http://books.sonatype.com/mvnref-book/reference/ pom-relationships-sect-pom.html#ex-super-pom Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 22 / 33

Project Object Model Super POM 3 Basis für alle POM Einfachstes POM <project> <modelversion>4.0.0</modelversion> <groupid>de.uni freiburg.informatik.proglang</groupid> <artifactid>myproject</artifactid> <version>1.0 SNAPSHOT</version> </project> 3 http://books.sonatype.com/mvnref-book/reference/ pom-relationships-sect-pom.html#ex-super-pom Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 22 / 33

Project Object Model Super POM 3 Basis für alle POM Einfachstes POM <project> <modelversion>4.0.0</modelversion> <groupid>de.uni freiburg.informatik.proglang</groupid> <artifactid>myproject</artifactid> <version>1.0 SNAPSHOT</version> </project> Effektives POM mvn help:effective-pom 3 http://books.sonatype.com/mvnref-book/reference/ pom-relationships-sect-pom.html#ex-super-pom Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 22 / 33

Standardvorgaben Quelltext: src/main/java enthält Java Quelltext src/main/resources enthält Bilder, etc. Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 23 / 33

Standardvorgaben Quelltext: src/main/java enthält Java Quelltext src/main/resources enthält Bilder, etc. Tests: src/test/java enthält Unit Tests src/test/resources enthält Unit Tests Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 23 / 33

Standardvorgaben Quelltext: src/main/java enthält Java Quelltext src/main/resources enthält Bilder, etc. Tests: src/test/java enthält Unit Tests src/test/resources enthält Unit Tests Ausgabe: target Ausgabeverzeichnis target/classes Klassenausgabe target/test-classes Testklassenausgabe Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 23 / 33

Java Version Standard Java Version ist 1.3 Setzen der Version in pom.xml <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 24 / 33

Skelett erzeugen Einfaches Hello World -Skelett Interaktive Abfrage nach weiteren Feldern des POM mvn archetype:generate \ DarchetypeGroupId=org.apache.maven.archetypes \ DarchetypeArtifactId=maven archetype quickstart Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 25 / 33

Lebenszyklus clean Aufräumen von generierten Objekten 4 default Erzeugen von Objekten site Erzeugen von Berichten, Webseiten,... 4 Sourcecode, Resourcen,... Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 26 / 33

Lebenszyklus clean clean:pre-clean Phase, welche von Plugins genutzt werden kann clean:clean Eigentlicher Löschvorgang von ${basedir}/target clean:post-clean Phase, welche von Plugins genutzt werden kann $ mvn clean Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 27 / 33

Lebenszyklus default Manchmal auch build genannt Phasen (Auswahl): validate generate-sources generate-resources compile generate-test-sources test-compile test package integration-test verify install deploy Plugins werden in den entsprechenden Phasen aufgerufen (z.b. maven-compiler-plugin) Aufruf z.b. $ mvn test Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 28 / 33

Bindung der Phasen an Ziele Phase process-resources compile process-test-resources test-compile test package install deploy Plugin-Ziel resources:resources compiler:compile resources:testresources compiler:testcompile surefire:test jar:jar install:install deploy:deploy Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 29 / 33

Lebenszyklus site Erzeugen eines Reports bzw. einer Webseite $ mvn site Projektzusammenfassung Ansprechpartner Abhängigkeitsinformationen Javadoc Checkstyle Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 30 / 33

Dependencies Abhängigkeiten zu anderen Bibliotheken und Projekten Dependencies in Maven: groupid:artifactid:jar:version (junit:junit:jar:4.11) Scope: compile, provided, runtime, test Zentrales Repository (http://search.maven.org) Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 31 / 33

Dependencies Abhängigkeiten zu anderen Bibliotheken und Projekten Dependencies in Maven: groupid:artifactid:jar:version (junit:junit:jar:4.11) Scope: compile, provided, runtime, test Zentrales Repository (http://search.maven.org) Dependency in POM: <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 31 / 33

Dependencies (2) Bibliotheken können von weiteren Bibliotheken abhängen junit hängt von org.hamcrest:hamcrest-core:jar:1.3 ab Diese Abhängigkeiten werden automatisch erfüllt Konflikte möglich: Bibliothek A in Version 1.0 erforderlich Bibliothek B in Version 2.0 erforderlich Lösungsmöglichkeit Angabe von Versionsbereichen: (3.8.1,4.11] gezieltes Entfernen von Abhängigkeiten Weitere Infos hier 5. 5 http://books.sonatype.com/mvnref-book/reference/ pom-relationships-sect-project-dependencies.html Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 32 / 33

Referenzen Weitere Infos Maven Homepage http://maven.apache.org Maven: The Definitive Guide http://books.sonatype.com/mvnref-book/reference/ Robert Jakob (Univ. Freiburg) Programmieren in Java JAVA 33 / 33