Introducere
Build tool --> produce un artifact
Maven is built with Maven :)
ANT - construit ca alternativă la Make - nu este rival Maven, se pot folosi împreună
mvn versions:update-properties - face update la toate dependințele din pom cu ultimele lor versiuni publicate
<build>
<finalName> GEO </finalName> <!-- app se va numi GEO.jar -->
<plugins>
<plugin>
...
</plugin>
</plugins>
</build>
> mvn compile --> .class files
> mvn package --> .jar files
Structura Maven
- Maven se uită prestabilit în src/main/java
- compilează in /target
- pom.xml: project info (groupId, artifactId, version, packaging (jar/war)), dependencies (same info), goals, etc
Goals:
- clean
- compile
- package (rulează deja compile)
- install (ruleaza package și instalează jar/war în local repository)
- deploy (rulează install și copiază rezultatul într-un repo remote)
Maven storage prestabilit: ~/.m2/repository
Dependencies
Dependency: specificare groupId, artifactId, version
SNAPSHOT este versiunea inițială a proiectului în dezvoltare
- se pot folosi si sufixele M1 (milestone1) sau RC1 (release candidate1) când urmează să fie lansat
- sufixe RELEASE sau FINAL pt proiectul final
Tipuri de packaging: pom, jar, war, ear, maven-plugin; toate sunt arhive zip la bază; tipul prestabilit este jar
Diferențe între jar, war și ear:
- create pentru medii diferite
- la nivel intern: ear trebuie să aibă un META-INF/application.xml , un war cere un WEB-INF/web.xml , iar un jar nu are astfel de cerințe
Pentru tipul de packaging pom: toate dependințele sunt descărcate în arhivă
Dependințe tranzitive: dependințe descărcate automat, de care depind dependințele declarate în proiect
Scope:
- compile - prestabilit, dependința este disponibilă oriunde în aplicație, propagată în proiectele dependente (tranzitivă)
- provided - la fel ca compile, dar dependința nu va fi inclusă în artifactul final; disponibilă doar la momentul compilării. Nu este tranzitivă
- runtime - este nevoie de ea doar la execuție
- test (ex. junit)
- system - deprecated, a nu se folosi! - pt a specifica direct un jar anume din sistem
- import (...)