Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha



Podobné dokumenty
ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Ant aneb Ferda Mravenec, práce všeho druhu

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Maven build a project management Java aplikací příručka školení. Libor Jelínek (Virtage Software) <ljelinek@virtage.cz>

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

JAVA. Nástroje v JDK

JAVA. Nástroje v JDK

Nástroje pro průběžnou integraci a testování

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

Správa a sledování SOA systémů v Oracle SOA Suite

Vítá vás Maven - příručka programátora!

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

Změna vlastností kódem

JAVA V Hibernate Java, letní semestr

Příručka aplikace KNetWalk. Fela Winkelmolen Eugene Trounev

Michal Podzimek

Statická analýza kódu - za kód bez chyb

Architektura aplikace

Aleš Rybák, Jiří Kadlec. Pluginy budoucnosti

Ing. Petr Ferschmann SoftEU s.r.o. Ing. Jindřich Vimr HSF s.r.o.

Gradle.

Testovací metoda. Testovací metoda. public class SimpleTest {

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Project management. Příprava projektu Zahájení High level plánování. Vykonávání Detailní plánování Vykonávání Řízení a monitorování

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

Nové vývojové nástroje i5/os Rational Developer for System i V7.1

Spring framework 2.0. Roman Pichlík CZJUG

První krůčky se SAS Enterprise Miner 6.2. Zaškrtněte Personal Workstation a přihlašte se jako localhost\sasdemo.

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Příručka aplikace Shisen-Sho. Dirk Doerflinger Eugene Trounev Frederik Schwarzer Kontrolor: Frerich Raabe

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Teoretické minimum z PJV

Téma 5. Ovladače přístrojů Instrument Drivers (ID)

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

Ruby on Rails: zapomeňte na Javu

JAVA Unit testing Java, zimní semestr

2. Entity, Architecture, Process

Příručka aplikace KMix. Gaurav Chaturvedi Vývojář: Christian Esken Vývojář: Helio Chissini de Castro Vývojář: Brian Hanson

Katalog služeb a podmínky poskytování provozu

Proč Angular JS framework?

POWERSHELL. Desired State Configuration (DSC) Lukáš Brázda MCT, MCSA, MCSE

Bakalářská práce. Rozšíření frameworku pro ověřování kompatibility softwarových komponent

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Vladimír

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Delphi podstata, koncepce a metody MDI aplikace

Technická podpora IBM Informix. Jan Musil IT Specialist SWG IBM

ISZR Referenční agent JAVA

IBM Connections pro firmy s Lotus Notes/Domino. Petr Kunc

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

MYBIZ - Řešení pro zpřístupnění dat ze stávajících aplikací na mobilních zařízeních (Mobilize your business!) Požadavky zákazníka.

Novinky v oblasti SAP Mobility. Martin Zikmund, Presale Mobility Platforms Miroslav Řehoř, Account Executive

Tipy technické podpory 2015

Správa linuxového serveru: Webová rozhraní k poště (Squirrelmail a Roundcube)

Programování v jazyku C# II. 9.kapitola

Instrukce pro vzdálené připojení do učebny 39d

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

JAVA V Anotace Java, zimní semestr ,2015 1

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

The Over-Head Cam (OHC) Valve Train Computer Model

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Systémová administrace portálu Liferay

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

WEBOVÉ RÁDIO. Tomáš Barták. Střední průmyslová škola elektrotechnická a Vyšší odborná škola Karla IV. 13, Pardubice

Modelování webových služeb v UML

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Příručka aplikace Kollision. Paolo Capriotti

Jak importovat profily do Cura (Windows a

Co by měl umět dobrý vývojář. Petr Adámek Home Credit International a.s.

POLOHOVÁNÍ ULTRAZVUKOVÉHO SENZORU

Fakulta stavební Studijní obor Geomatika

Úvod do Groovy pro Java experty

RESTful web service v Javě

Tvorba informačních systémů

Vysoká škola ekonomická v Praze

GIS1-7. cvičení. listopad ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie. Obsah. Založení nového souboru s vektorovými daty

WL-5480USB. Quick Setup Guide

Správa projektů a testování

Lukáš Kubis. MSP pro VŠB-TU Ostrava

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Revit link. Propojení mezi Scia Engineer a Revit structure

Web Services na SOAP

FG Forrest, a.s. Jan Novotný. Automatické testování v praxi 2.

Multiplatformní osobní organizér v jazyce Java

PA165: Úvod do Java EE. Petr Adámek

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

2. Začlenění HCI do životního cyklu software

Pokročilé Webové služby a Caché security. Š. Havlíček

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

Technologie, vlastnosti, uplatnění. Martin Suchan

Životní cyklus IT systémů

MATLAB a Simulink R2015b

Obsah. Předmluva Začínáme: překlad, spuštění a ladění 27

JAVA V Anotace Java, zimní semestr ,2016 1

JAVA Moduly Java, letní semestr 2018

Transkript:

Maven Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Úvod Maven - nástroj pro správu projektů, který obsahuje: objektový model projektu (project object model - POM) reprezetovaný souborem pom.xml, sadu standardů (struktura adresářů, formát pluginů, atd), životní cykly projektu, správu závislostí mezi projekty, logiku provádění cílů pluginů Po instalaci obsahuje Maven pouze malý základní instalační balík. Při práci si stahuje potřebné pluginy ze vzdálených repozitory. Při sestavování projektu Maven aplikuje logiku pluginů a jejich cílů na základě objektového modelu projektu.

Vytvoření projektu Vytváření projektu provádí cíl generate pluginu Archetype volaný v adresáři projektu: $ cd HelloWorld HelloWorld$ mvn generate:archetype Cíl interaktivně vyžádá od uživatele zadání: 1. archetypu (vzoru) projektu - k dispozici je cca 450 různých archetypů. Např.: 135: remote -> maven-archetype-quickstart (An archetype which contains a sample Maven project.) 2. koordináty projektu (groupid,...). Jeden (resp. až všechny) parametry cíle mohou být také zadány přímo při volání: mvn -DgroupId=org.dan -DartifactId=HelloWorld

Struktura projektu Pro zvolený archetyp: (maven-archetype-quickstart) a zvolené koordináty (org.dan, HelloWorld) vytvoří cíl archetype:generate v aktuálním adresáři následující strukturu projektu:

Soubor pom.xml (1/2) Vytvořený projekt obsahuje ve svém projektovém adresáři soubor pom.xml obsahující popis vytvořeného projektu: <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>org.dan</groupid> <artifactid>helloworld</artifactid> <version>1.0-snapshot</version> <packaging>jar</packaging> <name>helloworld</name> <url>http://maven.apache.org</url>

Soubor pom.xml (2/2) <properties> <project.build.sourceencoding>utf-8 </project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Sestavení projektu Sestavení projektu se provede příkazem: >mvn package package je název jedné fáze životního cyklu. Při sestavování se provedou všechny fáze životního cyklu včetně zadané fáze (tj. včetně package). Po sestavení přibude do kořenového adresáře projektu adresář target:

Protokol sestavení HelloWorld$ mvn package ----------------------------------------------------- [INFO] Building HelloWorld [INFO] Compiling 1 source file to /home/danecek/vyuka /apj/mavenprojects/helloworld/target/classes ------------------------------------------------------- T E S T S ------------------------------------------------------- Running org.dan.apptest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] Building jar: /home/danecek/vyuka/apj/mavenprojects/helloworld/target/he lloworld-1.0-snapshot.jar ---------------------------------------------------- [INFO] BUILD SUCCESSFUL

Konvence nad konfiguraci Princip konvence nad konfiguraci (convention over configuration) vznikl jako reakce na vysoce konfigurovatelné, avšak obtížně použitelné systémy (např. JEE 1). Maven definuje řadu imlicitních vlastností projektu: zdrojový kód - ${basedir}/src/main/java resources - ${basedir}/src/main/resources testy - ${basedir}/src/test třídy jsou kompilovány do ${basedir} /target/classes sestavením projektu vznikne jarfile v ${basedir} /target.

Maven souřadnice Maven souřadnice (maven coordinates) jednoznačně projekt určují. Jsou tvořeny atributy: groupid - jednoznačný název organizace (resp. hlavního projektu) např.: org.dan Typicky je tvořen inverzně zapsanou doménou organizace (org.apache.maven). Od groupid se implicitně odvozuje struktura balíků projektu. artefactid - vlastní jméno projektu resp. podprojektu version - implicitně 1.0-SNAPSHOT packaging - typ artefaktu (tj. formátu) projektu, implicitně jar.

Maven Pluginy Funkcionalita Mavenu je tvořena přvážně pluginy, které se stahují podel potřeby ze vzdálených repozitory. Maven plugin (např. archtype) obsahuje jeden nebo více cílů (goal). Např. archetype:generate Typická funcionakita cílů: kompilace zdrojového textu packaging bytecode, publishing sites, any other task which need to happen in a build. generování reportů, deploying na aplikační server Maven dovluje vytvářet zákaznické pluginy mohou být vytvořeny kromě Javy i v jiných jazycích např. i v ANTu

Příklady Pluginů Compiler - obsahuje cíle pro kompilování zdrojových kódů a testů, Surefire - obsahuje cíle pro provádění testů a vytváření reportů. Jar - obsahuje cíle pro vytváření jar artefaktů Hibernate - integruje projekt s často používaným perzistentním frameworkem Hibernate Maven umožňuje vytváření zákaznických pluginů, které moho být psány v různých programovacích jazycích (včetně ANTu).

Plugin Archetype Archetype je Maven plugin sloužící jako generátor projektů na základě vestavěných archetypů. Příklady archetypů (vypíší se při zavolání cíle archetype: generate): 9: jdbc-proc-archetype (Creates simple project with jdbcproc support) 124: geronimo-samples-archetype (Plugin to help create a samples project) 219: quickstart (Archetype for creating a basic Tapestry 5 application.) 281: maven-archetype-nbm (Archetype for Netbeans Modules Maven setup) 287: appframework (Archetype for creating application based on JSR 296) 300: pom-root (Root project archetype for creating multi module projects) 448: spring-osgi-bundle-archetype (Spring OSGi Maven2 Archetype) 449: spring-ws-archetype (Spring Web Services Maven2 Archetype.)

Porovnání Mavenu a ANTu Ant neurčuje žádné konvebce jako je obecná struktura adresářů projektu, implicitní chování atrd. je procedurální is procedural - you have to define goals, goal dependencies and sequence of tasks to each goal. Maven definuje konvence - knows where your source code is because you followed the convention, je deklartativní - you define project model, definuje lifecykle projektu - series of sequential lifecycle phases.

Cíl Cíl (goal) je část pluginu, která může být vykonána samostatně nebo jako součást životního cyklu projektu. Cíl je základní funkční krok Mavenu (obdoba ANT tasku). Příklad: cíl compile pluginu Compiler kompiluje zdrojové kódy projektu. Pluginy/cíle mohou být konfigurovány pomocí elementu configuration: <project>... <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin>

Životní cykly Mavenu Životní cyklus (build lifecycle) je posloupnost fází, která se prochází při sestavování projektu. Fáze jsou záměrně definovány volně, aby mohly mít různý význam pro různé typy projektů Na jednotlivé fáze mohou být namapován jeden nebo i více cílů. Při průchodu životním cyklem provádí Maven postupně namapované cíle namapované k příslušné fázi. Implicitní životní cykly: default (nazývaný také build) - slouží k překladu, otestování a zabalení projektu clean site - slouží k vytvoření dokumentace

Životní cyklus Default Zjednodušené schéma životního cyklu Default:

Repozitory (1/2) Maven repozitory jsou úložište Maven artefaktů. Artefakty jsou v repozitory uloženy v adresářové struktuře, která odpovídá Maven koordinátům. Pro projekt jehož koordináty jsou: artifacid=helloword, groupid=org.dan, version =1.0-SNAPSHOT packging=jar vznikne v repozitory následující struktura:

Repozitory (2/2) Repozitory se dělí na lokální vzdálené (remote) Standardní vzdálená repository je http://repo1.maven.org/maven2/ NetBeans využívají i další vzdálené repository: http://bits.netbeans.org/maven2/ http://download.java.net/maven/2/ Standardní lokální repozitory je v adresáři: USER-HOME/.m2/repository/ Při hledání artefaktu prohledává Maven nejprve lokální a posléze vzdálene repozitory. Artefakty stažené ze vzdálene repozitory překopíruje do lokální. Artefakty aktuálního projektu se do lokální repozitory uloží voláním: mvn install

Závislosti Sekce dependencies v pom.xml umožňuje definovat závislosti mezi různými projekty Příklad: <project>... <dependencies> <dependency> <groupid>group-a</groupid> <artifactid>artifact-a</artifactid> <version>1.0</version> </dependency> </dependencies> </project> Relace závislosti je tranzitivní (artefakt se přebírá závislosti od artefaktu, na kterém je závislý)

Rozsah závislostí Parametrem závislostí je je rozsah závislostí (scope). Ten určuje způsob použití závislostí: compile (implicitní) - závislosti jsou obsaženy v classpath při kompilaci, testování i běhu a jsou tranzitivní. provided - obdobně jako compile, avšak s výjimkou běhu (závislosti se nezabalují do distribučního jarfilu), protože jsou poskytnuty v cílovém prostředí (např. ve webovém kontejeneru). Závislosti nejsou tranzitivní. runtime - závislosti nejsou potřeba pro překlad, ale pouze pro běh (ke třídám se přistupuje pomocí reflexe, např. knihovny JDBC). Jsou obsaženy v classapth za běhu a testování classpaths, avšak nikoliv při kompilaci. test - závislosti jsou v classpath pouze při kompilaci a běhu testů.

Dědění Mechanismus dědění umožňuje dědit obsah z jednoho souboru pom.xml do jiného. Projekt, z jehož POM se dědí, musí být určen pomocí koordinátů v elementu parent: <project>... <parent> <groupid>org.codehaus.mojo</groupid> <artifactid>my-parent</artifactid> <version>2.0</version> <relativepath>../my-parent</relativepath> </parent>... </project> Každý pom také automaticky dědí obsah ze speciálního Super POM. Výsledek dědění se nazývá efektivní POM a lze jej vypsat voláním cíle: mvn help:effectivepom