Tartalomjegyzék
maven
- Szerző: Sallai András
- Copyright © 2014, Sallai András
- Szerkesztve: 2014, 2020, 2022
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
A Mavenről
A Java projektek számára kitalált összeszerkesztő, menedzselő eszköz.
Ha Visual Studio Code kódszerkesztőt használunk a Maven támogatás bővítmény formájában telepíthető. Az újabb Netbeans alapértelmezetten tartalmazza a Maven-t. De használható önálló eszközként is. Itt most az önálló használatról lesz szó.
Linux alatt a maven csomagot kell telepíteni. Telepítés után kapunk egy mvn parancsot.
Telepítés
Telepítés Linuxon:
apt install maven
Telepítés Windowson, a Chocolatey csomagkezelővel:
choco install maven -y
Ellenőrizzük a verziót:
mvn --version
Windowson ha Chocolatey csomagkezelővel telepítettük, csak új parancsablakban érhető el a parancs.
Példa
Projektekről információt a XML fájlokban tárolunk. Itt egy példa:
<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>
Projekt generálása
Egy projekt generáláshoz kiterjedt kapcsolókat kell használni:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=hu.valami.my-app \ -DartifactId=my-app
Eredmény
my-app/ |--src/ | |--main/ | | `--java/ | | `--hu/ | | `--valami/ | | `--my-app/ | | `--App.java | `--test/ | `--java/ | `--hu/ | `--valami/ | `--my-app/ | `--AppTest.java `--pom.xml
- App.java
package hu.szit.my-app; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
- AppTest.java
package hu.szit.my-app; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); } /** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } }
Fordítás
cd my-app mvn compile
A my-app könyvtárban létrejön egy target könyvtár.
my-app/ |--... `--target/ |--classes/ | `--... |--generated-sources/ | `--... `--maven-status/ `--...
Futtatás
mvn exec:java -Dexec.mainClass=hu.szit.my-app.App
Csomag készítés
mvn package
Létrejön egy .jar kiterjesztésű fájl:
my-app-1.0-SNAPSHOT.jar
mvn clean package
Futtatás
java -cp target/my-app-1.0-SNAPSHOT.jar hu.szit.app.App
Webhely készítése
mvn site
A target könyvtárban létrejön egy site könyvtár.
my-app/ `--target/ `--site/
Teszt futtatása
mvn -Dtest=AppTest test
Csak egy metódus tesztelése:
mvn -Dtest=UsersServiceImpl#testSzamolHaromszog test
Függőségek
A függőségeket a <dependencies> elemek közzé tesszük.
Példa:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.11.0</version> </dependency> </dependencies>
Teszt függőség
A test függőségeit jelöljük meg, hogy csak a teszt számára szükséges.
Példa:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.10.2</version> <scope>test</scope> </dependency> </dependencies>
JAR fájl helyi könyvtárból
A függőségek közzé vegyük fel scope és systemPath elemekkel:
<dependency> <groupId>foo.bar</groupId> <artifactId>projectname</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/lib/projectname-1.0.0.jar</systemPath> </dependency>