kehittämä ja ylläpitämä, ja paljon avoimia projekteja tutkiessani olen
huomannut sen olevan erittäin suosittu, arvioisinkin sen olevan tällä
hetkellä maailman eniten käytössä olevan projektinhallinta työkalu.
Maven, Yiddish kielen sana, tarkoittaa vapaasti suomennettuna tiedon
rekisteriä. Maven aloitettiin alunperin yrityksenä yksinkertaistaa
Jakarta Turbine projektin julkaisuprosessia. Siinä oli useita
erinlaisia Ant tiedostoja jotka olivat kaikki erinlaisia, sekä
riippuvuus JARit olivat CVSssä.
Tiimi rupesi haluamaan standardin tavan rakentaa ja hallinnoida
projekteja, jossa olisi selvä määritys mistä projekti koostuu, ja
helpon tavan julkaista projekti informaatiota ja tavan jakaa JAReja eri
projektien kesken.
Tuloksena oli työkalu, jota nyt voidaan käyttää rakentamaan ja
hallinnoimaan mitä tahansa Java pohjaisia, sekä nykyisin myös muilla
kielillä toteutettuja ohjelmisto projekteja.
Perustuen käsitteeseen POM, projekti object malli (Project Object
Model), joka on käytännössä pom.xml niminen xml-tyyppinen tiedosto,
joka sisältää projektin tiedot (metadata) keskitetyssä paikassa, ja
tähän tietoon perustuen Maven hallitsee ja vastaa projektien
rakentamisesta, raportoinnista, dokumentaatiota julkaisusta, ja monesta
muusta.
Maven pähkinäkuoressa:
- Yksinkertainen projektin aloitus, jossa on käytetty hyväksi todettuja menetelmiä - projekti, tai moduli käyntiin sekunneissa.
- Vakioiden käyttö projekteissa - uusien kehittäjien ei tarvitse käyttää aikaa perusvakioiden opiskeluun
- Ylivoimainen riippuvuuksien hallinta - automaatiset ja transitiiviset riippuvuussuhteet
- Helppo useiden projektien rinnakkaiskäyttö
- Suuri ja jatkuvasti kasvava kirjasto ja metadata säiliö käytössä
suoraan paketista metodilla ja suurimpien open source projektien
viimeisimmät julkaisut heti käytettävissä - Laajennettavissa, pluginit helposti kirjoitettavissa javalla, tai skriptauskielillä
- Uudet ominaisuudet välittömästi käytettävissä joko suoraan, tai pienellä konfiguroinnilla
- Ant taskit käytettävissä
- Moduli tyyppiset buildit: Maven pystyy rakentaa rajattoman määrän esityypitettyjä projekteja, kuten JAR, WAR, tai jakelupaketteja (ZIP, TAR, yms.) perustuen projektin metadataan, ilman tarvetta minkäänlaisiin skriptauksiin (yleensä).
- Yhtenäinen projektin informaatio sivu. Käyttämällä samaa
metadataa kuin projektin buildauskin, Maven pystyy generoimaan
webbisivun, tai PDF tiedoston joka sisältää mitä tahansa
dokumentaatiota mitä halutaan näyttää, sekä lisää standardeja
raportteja projektin kehityksestä. - Julkaisujen hallinta ja jakelupakettien julkaisu: Pienellä konfiguroinnilla Maven integroituu lähdekoodien versionhallintaan (kontrolli)
järjestelmiin kuten CVS:ään, ja manageroi projektien julkaisuja tietyn
tägin perusteella. Maven pystyy myös julkaisemaan jakelupaketin
sijainteihin, joista se on muiden projektien käytettävissä. Maven myös
pystyy julkaisemaan jakelupaketteja, kuten JAReja tai ZIP paketteja
jotka sisältävät muiden projektien JAR julkaisuja, sekä dokumentaatio,
että lähdekoodi julkaisuja. - Riippuvuuksien hallinta: Maven rohkaisee käyttämään keskitettyä
JAR:ien ja muiden riippuvuuksien säiliötä. Mavenissa on mekanismi,
jolla sinun projektisi voi ladata mitä tahansa JAReja keskitetystä JAR
säiliöstä, jolla on hyvin paljon samankaltaisuuksia Perlin CPANin
kanssa. Tämä mahdollista Maven käyttäjien uudelleenkäyttää eri
projektien julkaisemia JAReja, sekä rohkaisee kommunikointiin jotta
esimerkiksi versioden taakseppäin yhteensopivuus voidaan taata. Maven
kehittäjät tekevät yhteistyötä Ibiblion kanssa joka on anteliaasti antanut keskitetyn säiöliötilan Mavenin käyttöön servereiltään.
Olen itse käyttänyt Mavenia muistaakseni jo ennen sen 1 releasin
julkaisua, ehkä n. 0.7 lähtien, ja olen ollut siihe vuosi vuodelta
tyytyväisempi. 2 Releasi toi paljon odotettuja parannuksia, kuten
transitiivisen riippuvuuksien hallinnan, POM:n sekä standardoidumman ja
kehitetymmän ympäristön.
Kokemuksieni mukaan Maven päihittää Ant:n eritysesti uuden projektin
aloituksen helppoudessa, lisäksi plugineja ( vähän niinkuin antin
taskit ) ovat useiden, jopa kymmenien eri kehittäjien ylläpitämiä ja
testaamia, ja täten hyväksi todettujen mallien mukaisia, toisin kuin
Antin tapa, jossa tavallaan aina aloitat nollasta ja kirjoitat kaiken
uusiksi..
Tätä on yritetty kiertää luomalla ns. standardeja Ant buildi
tiedostoja, mutta menestys on ollut aikalailla vaihtelevaa.. ja
loppujenlopuksi jos osaava silmä katsoo, ei se näe eroa shell skripti
tiedostolla ja antin buildi tiedostolla.. henk. koht. olen niin kyllästynyt kirjoittamaan Antin raskaita xml
tiedostoja, että ennemmin sitten vaikka shelli skripti ja vaikka
Makefile.. no mutta se hyvin raa'asta
vertailusta..
Suosituimpiin ohjelmointiympäristöihin maven integroituu transparentisti ja todella toimivasti, esim. uusimpiin Netbeansseihin integraatio on rakennettu suoraan jakelupakettiin, ja mitään erikoisasennuksia ei tarvita, Eclipseen Mavenin saa toimimaan erillisellä, ja hyvin toimivalla pluginilla.. mutta vimillä pärjää hyvin, ja gvim jos haluu hypettää. ;)
Maven on, loppujenlopuksi, pelkkä framework pluginien ajoon ja kutsuun,
kuten Ant taskien, mutta Maven on muutakin, ja tämä on syy miksi jotkut
tuntuvat kamppailevan Mavenin kanssa jatkuvasti, koska luulevat että
Maven on Ant eri paketissa, mutta sitä se ei ole, ja mielestäni tämä johtuu vain laiskasta mielenkiinnosta lukea Mavenin dokumentaatio, mainitsen nyt lyhyesti, että Antissa kutsutaan taskeja (tehtäviä), ja tehtävät voivat siis riippua muista tehtävistä, ja voidaan kirjoittaa jonkinlaista logiikkaa jolloin tehtävä t0 suoritetaan jos t1 onnistui ja jne.
Mavenissa kutsutaan joko Pluginien Goaleja yksittäin, tai vaihtoehtoisesti Lifecycleä, lifecycle vastaa suurinpiirtein sitä mitä kirjoitetaan mavenilla (default task), Lifecyclejä pystyy kirjoittamaan itse lisää, mutta defaulttina Maveniin on koodailtu muutama hyvin yleisesti käyttössä oleva ja hyväksi todettu lifecycle.
Maven on hyvä, mutta ei paras, tällä hetkellä ylivoimainen suosikkini on SBT, (Simple Build Tool), joka sitten on toteutettu, ja käyttää syntaksinaan Scalaa, ja siitä jossain vaiheessa myöhemmin lisää..
Mavenin asennus ei ehkä ole sieltä kaikista helpommasta päästä, mutta sen verran pitää osata että saa ympäristömuuttujan asetettua.. elikkä ladataan maven julkaisu, puretaan zippi tms. johonkin haluttuun hakemistoon ja eikun säätämään, Huom: Java kehitysympäristö, siis JDK, pitää olla asennettuna koska Maven toimii JRE:n päällä
Alle pikainen copy-paste linuxin terminaaliin jolla päästään työskentelemään mavein kanssa, tarkemmat asennusohjeet täältä (alhaalla):
cd
wget http://www.nic.funet.fi/pub/mirrors/apache.org/maven/binaries/apache-maven-2.2.1-bin.zip
unzip apache-maven-2.2.1-bin.zip
echo export M2_HOME=~/apache-maven-2.2.1 >> ~/.bashrc
echo export PATH=$M2_HOME/bin:$PATH
. ~/.bashrcUseimmilla linux jakelupaketeilla, vaikka heittämällä tästä Ubuntulla ja Debianilla löytyy myös omat asennuspakettinsa, onnistuu siis:
apt-get install maven2Yksi ensimmäisistä plugineista johon kannattaa tutustua huolella, on archetype. Archetype luo tyhjästä projektin, joka perustuu tuotettuun ja valittavaan templaattiin (eli archetypeen), näitä templaatteja on jo tuotettu pilvin pimein, ja niistä löytyy varmasti jokaiselle jotain, lisäksi kuka hyvänsä pystyy tuottamaan näitä lisää joko sisäisiin tai julkisiin projekteihin.
Pluginia on helppo kutsua, alla asemerkiksi kutsutaan archetypeä:
mvn archetype:generateEsimerkissä siis
mvn on Mavenin komento (windowssissa mvn.bat), archetype kutsuttava plugin, ja generate maali (goal) yksittäinen plugini voi siis sisältää n-kappaletta erinlaisia goaleja, jotka tekevät varsinaisen työn, tällä ollaan saatu sidottua samannimisiä goaleja eri plugineihin, ja eri pluginien kehittäjät saavat oman nimiavaruutensa käyttöön.Kopioin alas pienen Maven session, jossa on suoritettu seuraavat plugin:goal kutsut, huomaa miten maven automaattisesti hakee lisää plugineja ja riippuvuuksia tarpeidensa mukaan, nämä maven cachettaa kotihakemiston/.m2/repository hakemistoon, ja maven myös automaattisesti tarkkailee ja toimii mikäli löytyy päivityksiä:
- mvn archetype:generate
- Luodaan quickstart projekti, Maven näyttää listan minkätyyppisiä projekteja se voi luoda defaultisti. Archetype pluginille voidaan myös antaa parametri, josta se käy hakemassa lisää archetypejä (templaatteja), jonka perusteella se osaa tehdä muitakin projekteja.
- mvn test
- Kääntää koodit ja ajaa quickstart projektin yksikkö testit
- mvn package
- Luo projektista JARin, joka voidaan asentaa/jakaa joko käsin, tai antaa Mavenin tehdä se.
Linkkejä:
- Maven
- http://maven.apache.org/
- Mikä Maven on?
- http://maven.apache.org/what-is-maven.html
- Plugineita
- http://maven.apache.org/plugins/index.html
- Lifecycle
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
- Käyttäjien dokumentaatiota
- http://maven.apache.org/users/index.html
- POM dokumentaatio
- http://maven.apache.org/pom.html
- Asetukset dokumentaatio
- http://maven.apache.org/settings.html
- SBT
- http://code.google.com/p/simple-build-tool/
- Scala
- http://www.scala-lang.org/
- Netbeans
- http://netbeans.org/
- Eclipse
- http://www.eclipse.org/
- Eclipse plugins for Maven
- http://maven.apache.org/eclipse-plugin.html
$ mvn archetype:generate
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/maven-archetype/2.0-alpha-4/maven-archetype-2.0-alpha-4.pom
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.jar
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
3: internal -> appfuse-basic-struts (AppFuse archetype for creating a web application with Hibernate, Spring and Struts 2)
4: internal -> appfuse-basic-tapestry (AppFuse archetype for creating a web application with Hibernate, Spring and Tapestry 4)
5: internal -> appfuse-core (AppFuse archetype for creating a jar application with Hibernate and Spring and XFire)
6: internal -> appfuse-modular-jsf (AppFuse archetype for creating a modular application with Hibernate, Spring and JSF)
7: internal -> appfuse-modular-spring (AppFuse archetype for creating a modular application with Hibernate, Spring and Spring MVC)
8: internal -> appfuse-modular-struts (AppFuse archetype for creating a modular application with Hibernate, Spring and Struts 2)
9: internal -> appfuse-modular-tapestry (AppFuse archetype for creating a modular application with Hibernate, Spring and Tapestry 4)
10: internal -> maven-archetype-j2ee-simple (A simple J2EE Java application)
11: internal -> maven-archetype-marmalade-mojo (A Maven plugin development project using marmalade)
12: internal -> maven-archetype-mojo (A Maven Java plugin development project)
13: internal -> maven-archetype-portlet (A simple portlet application)
14: internal -> maven-archetype-profiles ()
15: internal -> maven-archetype-quickstart ()
16: internal -> maven-archetype-site-simple (A simple site generation project)
17: internal -> maven-archetype-site (A more complex site project)
18: internal -> maven-archetype-webapp (A simple Java web application)
19: internal -> jini-service-archetype (Archetype for Jini service project creation)
20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence) Archetype)
22: internal -> softeu-archetype-jsf (JSF+Facelets Archetype)
23: internal -> jpa-maven-archetype (JPA application)
24: internal -> spring-osgi-bundle-archetype (Spring-OSGi archetype)
25: internal -> confluence-plugin-archetype (Atlassian Confluence plugin archetype)
26: internal -> jira-plugin-archetype (Atlassian JIRA plugin archetype)
27: internal -> maven-archetype-har (Hibernate Archive)
28: internal -> maven-archetype-sar (JBoss Service Archive)
29: internal -> wicket-archetype-quickstart (A simple Apache Wicket project)
30: internal -> scala-archetype-simple (A simple scala project)
31: internal -> lift-archetype-blank (A blank/empty liftweb project)
32: internal -> lift-archetype-basic (The basic (liftweb) project)
33: internal -> cocoon-22-archetype-block-plain ([http://cocoon.apache.org/2.2/maven-plugins/])
34: internal -> cocoon-22-archetype-block ([http://cocoon.apache.org/2.2/maven-plugins/])
35: internal -> cocoon-22-archetype-webapp ([http://cocoon.apache.org/2.2/maven-plugins/])
36: internal -> myfaces-archetype-helloworld (A simple archetype using MyFaces)
37: internal -> myfaces-archetype-helloworld-facelets (A simple archetype using MyFaces and facelets)
38: internal -> myfaces-archetype-trinidad (A simple archetype using Myfaces and Trinidad)
39: internal -> myfaces-archetype-jsfcomponents (A simple archetype for create custom JSF components using MyFaces)
40: internal -> gmaven-archetype-basic (Groovy basic archetype)
41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)
Choose a number: (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: : 15
Define value for groupId: : com.blogspot.dencrypt
Define value for artifactId: : quickstart
Define value for version: 1.0-SNAPSHOT: :
Define value for package: com.blogspot.dencrypt: :
Confirm properties configuration:
groupId: com.blogspot.dencrypt
artifactId: quickstart
version: 1.0-SNAPSHOT
package: com.blogspot.dencrypt
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: maven-archetype-quickstart:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.blogspot.dencrypt
[INFO] Parameter: packageName, Value: com.blogspot.dencrypt
[INFO] Parameter: package, Value: com.blogspot.dencrypt
[INFO] Parameter: artifactId, Value: quickstart
[INFO] Parameter: basedir, Value: /home/apastinen/tmp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: /home/apastinen/tmp/quickstart
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31 seconds
[INFO] Finished at: Mon Apr 26 11:49:56 EEST 2010
[INFO] Final Memory: 15M/153M
[INFO] ------------------------------------------------------------------------
$ tree
.
`-- quickstart
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- App.java
`-- test
`-- java
`-- com
`-- blogspot
`-- dencrypt
`-- AppTest.java
12 directories, 3 files
$ cat quickstart/pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blogspot.dencrypt</groupId>
<artifactId>quickstart</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>quickstart</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
$ cd quickstart/
$ mvn test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstart
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-2/maven-filtering-1.0-beta-2.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.6/plexus-interpolation-1.6.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-2/maven-filtering-1.0-beta-2.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.6/plexus-interpolation-1.6.jar
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/main/resources
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.jar
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to /home/apastinen/tmp/quickstart/target/classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to /home/apastinen/tmp/quickstart/target/test-classes
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
[INFO] [surefire:test {execution: default-test}]
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-junit/2.4.3/surefire-junit-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.3/surefire-providers-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-junit/2.4.3/surefire-junit-2.4.3.jar
[INFO] Surefire report directory: /home/apastinen/tmp/quickstart/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.blogspot.dencrypt.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37 seconds
[INFO] Finished at: Mon Apr 26 11:58:33 EEST 2010
[INFO] Final Memory: 21M/156M
[INFO] ------------------------------------------------------------------------
$ mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstart
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.jar
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /home/apastinen/tmp/quickstart/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.blogspot.dencrypt.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.093 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.jar
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.jar
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/apastinen/tmp/quickstart/target/quickstart-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19 seconds
[INFO] Finished at: Mon Apr 26 11:59:15 EEST 2010
[INFO] Final Memory: 17M/153M
[INFO] ------------------------------------------------------------------------
$ tree
.
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- com
| | `-- blogspot
| | `-- dencrypt
| | `-- App.java
| `-- test
| `-- java
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- AppTest.java
`-- target
|-- classes
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- App.class
|-- maven-archiver
| `-- pom.properties
|-- quickstart-1.0-SNAPSHOT.jar
|-- surefire-reports
| |-- TEST-com.blogspot.dencrypt.AppTest.xml
| `-- com.blogspot.dencrypt.AppTest.txt
`-- test-classes
`-- com
`-- blogspot
`-- dencrypt
`-- AppTest.class
22 directories, 9 files
$
kampanie adwords reklamy google https://agencja-adwords.premiumkalisz.eu/ kampania adwords
VastaaPoistapsychotesty policja 2022 przykładowe testy do policji testy policja 2022
VastaaPoistapolicja multiselect testy policyjne testy psychologiczne do policji online
VastaaPoistatesty psychologiczne do policji online testy multiselect 2022 multiselect online
VastaaPoistapolski psychoterapeuta berlin 2022 psycholog po polsku berlin cennik polski gabinet psychoterapii w berlinie 2022
VastaaPoistapsycholog berlin 2022 pomoc psychologiczna berlin cennik psycholog w berlinie cennik
VastaaPoistaogrodnik łódź usługi ogrodnicze łódź cennik 2022 projektowanie ogrodów łódź opinie
VastaaPoistakampania google adwords kampania google adwords https://agencja-adwords.premiumkalisz.eu/ google ads cena
VastaaPoistapastillas para agrandar el miembro masculino en guatemala como agrandar el pené con pesas pastillas para alargar el miembro en venezuela , como agrandar el glande videos , como agrandar el pené de forma natural en casa gratis
VastaaPoistacomment faire grossir la poitrine sans chirurgie comment grossir vite pdf comment agrandir un pull en laine qui a retreci , comment grossir son zizi naturellement
VastaaPoistajak powiększyć sobie penisa tabletki na powiekszenie członka https://new-xxlenlargement24.eu/ powiększanie penisa tabletki
VastaaPoistapowiększenie penisa leki na powiększenie członka http://swift-enlargement.info/ jak powiększyć sobie penisa
VastaaPoistaتضخيم الذكر https://enlargement-classification.eu/ar/ كيفية اطالة القضيب تمارين القضيب تكبير الذكر
VastaaPoistajak powiększyc penisa https://enlargement-classification.eu/ tabletki na penisa powiekszenie czlonka
VastaaPoistaافضل حبوب تكبير الذكر كيفية تكبير القضيب https ://new-xxlenlargement24.eu/ar/ كيفية تكبير العضو الذكرى تكبير الذكر
VastaaPoistaكيفية تكبير الذكر كيفيه تكبير القضيب كيفية تكبير القضيب تكبير القضىب بسرعة
VastaaPoistapennis vergrößerung training penisverlaengerung
VastaaPoistapennis vergrößern wie kann man sein pennis vergrößern
VastaaPoistanatürliche penisvergrößerung penisverlängerungen
VastaaPoistapenisstrecker penis natürlich vergrößern
VastaaPoistapsychotesty do policji multiselect policja testy psychologiczne do policji online 2022
VastaaPoistatesty na policjanta 2022 testy na policjanta policja multiselect
VastaaPoistapolicja multiselect test psychologiczny do policji online psychotesty policja
VastaaPoistakampania ads https://agencja-adwords.premiumkalisz.eu/ reklama ads reklama ads
VastaaPoistapsycholog berlin pomoc psychologiczna berlin cennik psycholog po polsku berlin 2022
VastaaPoista