Sådan kommer du i gang med Maven

Maven bruges meget ofte i branchen, og jeg følte, at det ville være godt at dække det grundlæggende i denne artikel, så det kan bruges effektivt.

Denne artikel dækker ting som maven basics, maven plugins, maven afhængigheder og maven build livscyklus.

Hvad er Maven

Maven blev oprettet for at give en standard måde, hvorpå projekter kan bygges. En af dens kraftfulde funktioner er afhængighedsstyring.

Maven bruges ofte til afhængighedsstyring, men det er ikke det eneste, det er i stand til at gøre.

Hvis du ikke ved hvad afhængighedsstyring betyder, skal du ikke bekymre dig ?. Jeg vil også dække det i denne artikel.

Installation af Maven

Du kan installere Maven fra //maven.apache.org/

Sørg også for, at Maven er indstillet i PATH, så mvnkommandoer fungerer.

Du kan kontrollere, om den er installeret og kan fås med kommandoen

mvn -v

Sørg også for, at JAVA_HOME er indstillet.

Som standard bruger Maven den jdk, du har angivet i JAVA_HOME. Dette kan tilsidesættes, men til denne artikel bruger vi den jdk, der findes i JAVA_HOME.

Opret dit Maven-projekt

Normalt kan en IDE som formørkelse bruges til nemt at oprette maven-projekter. Men i denne artice vil jeg køre kommandoerne fra kommandolinjen, så trinene forstås klart.

Kør følgende kommando for at oprette projektet.

mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.first.app -DartifactId=first-maven-app 

Arketype i ovenstående kommando er intet andet end en eksempelprojektskabelon. groupdId fortæller, hvilken gruppe dit projekt kommer under, og artifactId er projektnavnet.

Når du har kørt ovenstående kommando, kan det tage maven et minut eller deromkring at downloade de nødvendige plugins og oprette projektet.

En mappe kaldet first-maven-app oprettes nu. Åbn mappen, og du vil se en fil, der hedder pom.xml

pom.xml

POM står for Project Object Model. pom.xml har alle detaljer om dit projekt, og det er her, du vil fortælle maven, hvad det skal gøre.

Indholdet af denne fil vises nedenfor:

  4.0.0 com.first.app first-maven-app jar 1.0-SNAPSHOT first-maven-app //maven.apache.org   junit junit 3.8.1 test   

groupdId og artifactId er de samme værdier, som vi gav i kommandolinjen.

emballage er artefaktens pakkeformat. Standardværdien er jar . Det kan også have andre værdier som øre, krig, tjære og så videre.

version angiver artefaktens versionsnummer. Hvis SNAPSHOT er til stede, angiver det, at versionen stadig er i dev og muligvis ikke er stabil. Hvis versionsnummeret ikke har SNAPSHOT, er det den aktuelle version.

navn er projektnavnet.

Jeg vil forklare om afhængigheder og plugins i Maven nedenfor.

Super POM

pom.xml som du kan se er ret lille. Årsagen til dette er, at meget af konfigurationen er til stede i noget kaldet Super POM, som vedligeholdes internt af Maven.

pom.xml udvider Super Pom for at få al konfiguration til stede i super Pom.

En af konfigurationen til stede i Super Pom indikerer følgende:

  • Al javakildekode findes i src / main / java
  • Al java-testkode findes i src / test / java

Jeg nævner kun denne konfiguration her, da vi vil beskæftige os med både kildekoden såvel som testkoden i denne artikel.

Kode

Hele koden, der diskuteres her, er tilgængelig i denne repo: //github.com/aditya-sridhar/first-maven-app

Lad os tilføje nogle enkle Java-koder. Opret følgende mappestruktur:

src / main / java / com / test / app / App.java

App.java er den Java-kode, vi tilføjer.

Kopier følgende kode til App.java:

package com.first.app; import java.util.List; import java.util.ArrayList; public class App { public static void main( String[] args ) { List items = new ArrayList(); items.add(1); items.add(2); items.add(3); printVals(items); System.out.println("Sum: "+getSum(items)); } public static void printVals(List items){ items.forEach( item ->{ System.out.println(item); }); } public static int getSum(List items){ int sum = 0; for(int item:items){ sum += item; } return sum; } } 

Dette er enkel kode, der har 2 funktioner.

Men en ting at observere er, at koden bruger lambda-udtryk inde i forEach loop i printVals- funktionen.

Lambda-udtryk har mindst Java 8 brug for at køre. Men som standard kører Maven 3.8.0 ved hjælp af Java version 1.6.

Så vi er nødt til at fortælle maven at bruge Java 1.8 i stedet. For at gøre dette bruger vi Maven Plugins.

Maven-plugins

Vi bruger Maven Compiler Plugin til at angive, hvilken Java-version der skal bruges. Føj følgende linjer til pom.xml:

 ...    org.apache.maven.plugins maven-compiler-plugin 3.8.0  1.8 1.8     ... 

Du kan se, at Java- kilde- og målversioner er indstillet til 1.8 .

Plugins får stort set nogle handlinger udført i maven. Compiler-pluginet kompilerer kildefilerne.

Den fulde pom.xml er tilgængelig her.

Der er mange tilgængelige maven-plugins. Ved at vide, hvordan man bruger plugins godt, kan Maven bruges til at gøre fantastiske ting. ?

Maven afhængigheder

Normalt bruger vi mange eksisterende biblioteker, mens vi skriver kode. Disse eksisterende biblioteker er intet andet end afhængigheder. Maven kan bruges til nemt at styre afhængigheder.

In the pom.xml of our project you can see the following dependency:

   junit junit 3.8.1 test  

This dependency is telling that we will be needing junit. Junit is used to write Unit Tests for Java code. Similarly a lot of other dependencies can be added.

Let’s say you want to handle JSON in the code. Then you can add the gson dependency as shown below:

 com.google.code.gson gson 2.8.5 

You can search for Maven artifacts in //search.maven.org

Transitive Dependencies

Let’s say you add a dependency A to the Project. Now A depends on a dependency called B. B depends on a dependency called C.

Since you are using A in the project, you will also need B and C.

But fortunately, it is enough if you add only A in pom.xml. Because Maven can figure out that A depends on B and that B depends on C. So internally Maven will automatically download B and C.

Here B and C are transitive dependencies.

Custom Maven Repository

All these dependencies are available in a Public Maven Central Repository //repo.maven.apache.org/maven2

It is possible that there are some artifacts which are private to your company. In this case, you can maintain a private maven repository within your organization. I won’t be covering this portion in this tutorial.

Adding the test class

Since the junit dependency is present in the project, we can add test Classes.

Create the following folder structure:

src/test/java/com/test/app/AppTest.java

AppTest.java is the Test Class.

Copy the following code into AppTest.java:

package com.first.app; import junit.framework.TestCase; import java.util.List; import java.util.ArrayList; public class AppTest extends TestCase { public AppTest( String testName ) { super( testName ); } public void testGetSum() { List items = new ArrayList(); items.add(1); items.add(2); items.add(3); assertEquals( 6, App.getSum(items) ); } }

This class tests the getSum() function present in the App Class.

Maven Build Lifecycle and Phases

Maven follows a build lifecycle to build and distribute artifacts. There are three main lifecycles:

  1. Default lifecycle: This deals with building and deploying the artifact.
  2. Clean lifecycle: This deals with project cleaning
  3. Site lifecycle: This deals with Site documentation. Will cover this in a different article.

A Lifecycle is made up of phases. Here are some of the important phases in the default lifecycle:

  • validate: Checks if all necessary information is available for the project
  • compile: Used to compile the source files. Run the following command to compile:
mvn compile
  • After running this command, a folder called target is created with all the compiled files.
  • test: Used to run all the unit tests present in the project. This is why the Junit dependency was needed. Using Junit, unit tests can be written. Test classes can be run using the command
mvn test
  • package: This will run all the above phases and then package the artifact. Here it will package it into a jar file since pom indicates a jar is needed. Run the following command for this:
mvn package
  • The jar file is created inside the target folder
  • verify: This will ensure that quality criteria is met in the project
  • install: This will install the package in a local repository. The local repository location is usually ${user.home}/.m2/repository. Use the following command for this:
mvn install
  • deploy: This is used to deploy the package to a remote repository

One more command which is commonly used is the clean command which is given below:

mvn clean

This command cleans up everything inside the target folder

References

Maven’s Offical Guide: //maven.apache.org/guides/getting-started/

More about POM : //maven.apache.org/guides/introduction/introduction-to-the-pom.html

More about Build Lifecycle : //maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Congrats ?

Du ved, hvordan du bruger Maven nu. Denne artikel dækkede kun det grundlæggende om pom, plugins, afhængigheder og opbygge livscyklus. For at vide mere om Maven, tjek de links, jeg har givet ovenfor.

Glad kodning?

Om forfatteren

Jeg elsker teknologi og følger fremskridtene inden for området. Jeg kan også godt lide at hjælpe andre med min teknologiske viden.

Du er velkommen til at oprette forbindelse til mig på min LinkedIn-konto //www.linkedin.com/in/aditya1811/

Du kan også følge mig på twitter //twitter.com/adityasridhar18

Mit websted: //adityasridhar.com/

Oprindeligt offentliggjort på adityasridhar.com.