Maven

Fra TermvaktWiki
Revisjon per 6. okt 2011 kl. 13:29 av Kabeern (Diskusjon | bidrag)
Gå til: navigasjon, søk


Apache Maven er et verktøy som kan brukes til å bygge og bruke et hvilket som helst Java-basert prosjekt. Maven baserer seg på konseptet project object model, POM, og er ment for å lette arbeidet for Java-programmerere.

Innhold

Maven introduksjon

For å opprette et nytt maven prosjekt så kan du taste inn følgende i et terminal (kommandovindu):

      mvn archetype:create -DgroupId=no.uio.app -DartifactId=halloSmurf

(i dette eksemplet så spiller ikke groupId noen stor rolle, men ved større prosjekter så er det anbefalt å velge noe mer fornuftig)

Når du kjører kommandoen så burde du få opp noe lignende (kuttet bort linjene hvor Maven laster ned forskjellige filer):

      kabeern@marmadoc ~/mvntest $ mvn archetype:create -DgroupId=no.uio.app -DartifactId=halloSmurf
      Info: using java from store (/local/opt/j2sdk).
      [INFO] Scanning for projects...
      [INFO] Searching repository for plugin with prefix: 'archetype'.
      [INFO] org.apache.maven.plugins: checking for updates from central
      [INFO] org.codehaus.mojo: checking for updates from central
      [INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central
      Downloading: ...
      [INFO] ------------------------------------------------------------------------
      [INFO] Building Maven Default Project
      [INFO]    task-segment: [archetype:create] (aggregator-style)
      [INFO] ------------------------------------------------------------------------
      Downloading: ...
      [INFO] [archetype:create]
      [WARNING] This goal is deprecated. Please use mvn archetype:generate instead
      [INFO] Defaulting package to group ID: no.uio.app
      [INFO] artifact org.apache.maven.archetypes:maven-archetype-quickstart: checking for updates from central
      Downloading: ...
      [INFO] ----------------------------------------------------------------------------
      [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:RELEASE
      [INFO] ----------------------------------------------------------------------------
      [INFO] Parameter: groupId, Value: no.uio.app
      [INFO] Parameter: packageName, Value: no.uio.app
      [INFO] Parameter: package, Value: no.uio.app
      [INFO] Parameter: artifactId, Value: halloSmurf
      [INFO] Parameter: basedir, Value: /uio/aristoteles/s14/kabeern/mvntest
      [INFO] Parameter: version, Value: 1.0-SNAPSHOT
      [INFO] project created from Old (1.x) Archetype in dir: /uio/aristoteles/s14/kabeern/mvntest/halloSmurf
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESSFUL
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 52 seconds
      [INFO] Finished at: Thu Oct 06 14:57:05 CEST 2011
      [INFO] Final Memory: 17M/481M
      [INFO] ------------------------------------------------------------------------

Dett kan ta litt tid hvis du nettopp har installert programvaren, nye plugins og oppdateringer vil bli hentet. Har du problemer kan du gjenta kommandoen noen ganger, det kan være pga time out grunnet lang tid på nedlstninger.

Målet lagde et mappe (directory) med det samme navnet som artifactId. Gå til denne mappen:

      cd my-app

I denne mappen vil du finn denne standard prosjekt strukturen

   my-app
   |-- pom.xml
   `-- src
       |-- main
       |   `-- java
       |       `-- com
       |           `-- mycompany
       |               `-- app
       |                   `-- App.java
       `-- test
           `-- java
               `-- com
                   `-- mycompany
                       `-- app
                           `-- AppTest.java

Du finner prosjekt kildekoden under src/main/java, testkilden under src/test/java, og pom.xml er prosjektets Project Object Model, eller POM.

POM

Filen pom.xml er kjernen til et prosjekts konfigurasjon i Maven. Denne ene fila inneholder størsteparten av informasjonen som kreves for å bygge et prosjekt slik du ønsker. Fila er stor og kan inneholder mye intrikate detaljer. I startfasen trenger du ikke alle disse detaljene. Dette er et eksempel på et prosjekts POM:

   <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>com.mycompany.app</groupId>
     <artifactId>my-app</artifactId>
     <packaging>jar</packaging>
     <version>1.0-SNAPSHOT</version>
     <name>Maven Quick Start Archetype</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>

Nå kjørte (execute) du Maven målet (goal) archetype:create, og et sett parametere ble sendt med. Prefixen archetype er pluginen som inneholder målet (goal). Dette målet konstruerte et enkelt prosjekt basert på en archetype. Plugin er en samling av mål (goals) med et generelt felles formål. For eksempel har jboss-maven-plugin formålet å "håndtere forskjellige jboss items".

Bygge opp et prosjekt

  mvn package

Da vil det skrives ut forskjellige handlinger og slutte med:

  ...
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESSFUL
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time: 2 seconds
 [INFO] Finished at: Thu Oct 05 21:16:04 CDT 2006
 [INFO] Final Memory: 3M/6M
 [INFO] ------------------------------------------------------------------------

I motsetning til den første komandoen (archetype:create) er den andre kommandoen bare t enkelt ord - package. I stedet for et mål (goal), er dette en fase (phase). Dette er et steg i byggesyklusen (build lifecycle), som er en ordnet sekvens av faser (phases). Når en fase (phase) er gitt, vil Maven kjøre alle faser i sekvensen frem til og med den som ble gitt. For eksempel, hvis du angir kompileringsfasen, vil disse fasene bli kjørt:

  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. compile

Nå kan du teste den nykompilerte og pakkede JAR med følgende kommando:

  java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

Som vil printe the quintessential:

  Hello World!

Maven Tools

Maven Phases

Dette er de mest vanlige default livssykle fasene (lifecycle phases) du kan kjøre:

   * validate: validate the project is correct and all necessary information is available
   * compile: compile the source code of the project
   * test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
   * package: take the compiled code and package it in its distributable format, such as a JAR.
   * integration-test: process and deploy the package if necessary into an environment where integration tests can be run
   * verify: run any checks to verify the package is valid and meets quality criteria
   * install: install the package into the local repository, for use as a dependency in other projects locally
   * deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

To andre Maven livssykler (lifecycles) som kan være verdt å merke seg:

   * clean: cleans up artifacts created by prior builds
   * site: generates site documentation for this project

Fasene er egentlig linket til underliggende kommandoer. De spesifikke kommandoene (goals) som blir kjørt for hver fase avhenger av packaging typen til prosjektet. Eksempelvis, package kjører jar:jar hvis prosjektet er av typen JAR, og war:war hvis det er av typen WAR.

Faser og kommandoer (goals) kan kjøres i sekvens.

 mvn clean dependency:copy-dependencies package

Denne kommandoen vil renske prosjektet, kopiere avhengige filer, og utføre fase package på prosjektet (kjører alle faser opp til package). Generating the Site

  mvn site

Denne genererer en site basert på informasjon i prosjektets pom. Du kan se på den genererte informasjonen under target/site.


Versjon

For å sjekke hvilken versjon du har installert kan du bruke denne kommandoen:

    mvn --version


Og detaljene vil listes opp

    Maven version: 2.0.8
    Java version: 1.5.0_12
    OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"


For mer informasjon og hjelp, sjekk http://maven.apache.org/

Personlige verktøy
Navnerom
Varianter
Handlinger
Navigasjon
Kategorier
Programvare
Andre
Translate
Verktøy