Eksempel på Maven War Plugin
I dette eksemplet skal vi se noen av egenskapene fra maven war plugin.
Maven er et byggeautomatiseringsverktøy som hovedsakelig brukes til java-prosjekter fra Apache.
Du kan få tilgang til maven war plugin her.
Vi kommer til å se noen eksempler på mulighetene til maven war plugin.
For dette eksemplet bruker vi følgende teknologier:
- MAC OSX
- Eclipse Mars.1
- Maven3
- JDK 1.8.0_65 64-bits
- Maven war plugin 2.6
1. Introduksjon
Maven war-plugin kalles implisitt av maven-livssyklusen i den aktuelle fasen, så det er en "spesiell" plugin. Vi trenger ikke å definere det i pom.xml
det vil bli lastet ned og utført når maven trenger det.
Til tross for det kan vi definere det i pom.xml
for å bygge prosjektet vårt som en krigsfil.
Maven war plugin har noen mål definert:
war
:Standard mål. Påkalt underpackage
fase for prosjekter medpackaging
avwar
exploded
:Dette målet oppretter en eksplodert nettapp i en spesifisert kataloginplace
:Dette målet er enexploded
målvariant som genererer en eksplodert nettapp inne i nettapplikasjonsmappen isrc/main/webapp
manifest
:dette målet genererer en manifestfil for denne nettappen
Det er ikke nødvendig å definere det målet i pom.xml
, som vi sa før, vil maven påberope seg det målet når mavens livssyklus må bygge krigsfilen.
2. Eksempelprosjekt
For dette eksempelet skal vi bruke et java-prosjekt med maven nature som vil bli pakket som en krigsfil. Eclipse Mars kommer med maven-støtte ut av esken, så du trenger ikke å installere noe. Prosjektet vårt vil se slik ut:
Innledende prosjekt
På dette tidspunktet har vi et tomt maven-prosjekt. Vi skal definere maven war plugin inne i pom.xml
for å teste plugin-funksjonene.
pom.xml
vil se slik ut:
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.examples</groupId> <artifactId>maven-war-plugin-example</artifactId> <version>1.0.0-SNAPSHOT</version> <name>Maven war :: example</name> <url>http://maven.apache.org</url> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> </plugin> </plugins> </build> </project>
Prosjektet har en dummy-klasse kalt MyClass
, en dummy web.xml
fil i src/main/webapp/WEB-INF
mappe og en hei verden index.html
fil i rotwebapp-mappen (src/main/webapp
). Prosjektet inneholder også en mappe kalt more_resources
med en dummy-fil kalt resources.txt
.
I de følgende kulene skal vi se noen av maven war plugin-funksjonene brukt på dette prosjektet.
3. Generer en eksplodert krig
Plugin-modulen lar deg generere en eksplodert krig som en mappe, du kan gjøre det med mvn war:exploded
kommando. Etter å ha kjørt den, vil du se en ny mappe under target
mappen med den genererte krigen eksploderte, dette er som en vanlig katalog med alle filene i den.
4. Filtrering av krigsfilinnholdet
Programtillegget lar deg filtrere krigsinnholdet, du kan inkludere/ekskludere ressurser fra utdatakrigsfilen. Følgende pom.xml
viser hvordan du inkluderer noen ting til krigsfilen
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.examples</groupId> <artifactId>maven-war-plugin-example</artifactId> <version>1.0.0-SNAPSHOT</version> <name>Maven war :: example</name> <url>http://maven.apache.org</url> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <webResources> <resource> <!-- Relative path to the pom.xml directory --> <directory>more_resources</directory> </resource> </webResources> </configuration> </plugin> </plugins> </build> </project>
Etter å ha kjørt mvn clean install
, inne i den genererte krigsstrukturen finner du resource.txt
filen i rotmappen som kommer fra more_resources
mappe i eksempelprosjektet. Dette er nyttig når vi har andre ressurser (som rapporter eller hva slags ressurser som trengs) og vi ønsker å inkludere det i krigsfilen.
Du kan finne flere detaljer om hvordan du bruker denne funksjonen her.
5. Tilpasser manifestfil
Programtillegget lar deg kontrollere manifestfilen, du kan for eksempel inkludere klassebanen inne i manifestfilen. Dette er nyttig når krigsfilen er under en mer kompleks struktur som en ørefil og du vil dele avhengighetene langs flere moduler.
Følgende pom.xml
viser hvordan du bruker denne funksjonen
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.examples</groupId> <artifactId>maven-war-plugin-example</artifactId> <version>1.0.0-SNAPSHOT</version> <name>Maven war :: example</name> <url>http://maven.apache.org</url> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.4.RELEASE</version> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
For å teste klassebane-inkluderingen i manifest.mf
filen har vi lagt til spring
avhengighet i pom.xml, etter kjøring mvn clean install
vi kan se en manifest.mf
fil slik:
manifest.mf:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: fhernandez Class-Path: spring-core-4.2.4.RELEASE.jar commons-logging-1.2.jar Created-By: Apache Maven 3.3.3 Build-Jdk: 1.8.0_65
Som du kan se, er manifest
filen inkluderer en Class-Path:
egenskap med klassebaneoppføringen basert på avhengighetene definert i pom.xml
på en transitiv måte.
6. Konklusjoner
Som vi har sett, tilbyr maven war-plugin noen interessante funksjoner som vi kan dra nytte av for å bygge krigsfiler, du kan få flere detaljer i lenken ovenfor ved introduksjonen av dette eksemplet.