Maven se vrlo često koristi u industriji i smatrao sam da bi bilo dobro u ovom članku pokriti osnove kako bi se mogao učinkovito koristiti.
Ovaj će članak pokriti stvari poput osnova mavena, dodataka za maven, ovisnosti o Mavenu i životnog ciklusa mavena.
Što je Maven
Maven je stvoren kako bi pružio standardni način na koji se mogu graditi projekti. Jedna od njegovih moćnih značajki je upravljanje ovisnostima.
Maven se obično koristi za upravljanje ovisnostima, ali nije jedino što je sposoban učiniti.
Ako ne znate što znači upravljanje ovisnostima, ne brinite ?. To ću pokriti i u ovom članku.
Instaliranje Mavena
Maven možete instalirati s //maven.apache.org/
Također osigurajte da je Maven postavljen u PATH tako da mvn
komande rade.
Možete provjeriti je li instaliran i može li mu se pristupiti pomoću naredbe
mvn -v
Također provjerite je li postavljen JAVA_HOME.
Prema zadanim postavkama, Maven će koristiti jdk koji ste naveli u JAVA_HOME. To se može nadjačati, ali za ovaj ćemo članak koristiti jdk naveden u JAVA_HOME.
Stvorite svoj Maven projekt
Obično se IDE poput eclipse može koristiti za lako stvaranje maven projekata. Ali u ovom članku izvodit ću naredbe iz naredbenog retka kako bi se koraci jasno razumjeli.
Pokrenite sljedeću naredbu za stvaranje projekta.
mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.first.app -DartifactId=first-maven-app
Arhetip u gornjoj naredbi nije ništa drugo doli uzorak predloška projekta. groupdId govori u koju grupu spada vaš projekt, a artifactId je naziv projekta.
Jednom kada pokrenete gornju naredbu, potrebno je oko minutu da preuzmete potrebne dodatke i izradite projekt.
Sada je stvorena mapa pod nazivom first-maven-app. Otvorite mapu i vidjet ćete datoteku pod nazivom pom.xml
pom.xml
POM je kratica od Project Object Model. pom.xml sadrži sve pojedinosti o vašem projektu i ovdje ćete reći Mavenu što treba učiniti.
Sadržaj ove datoteke prikazan je u nastavku:
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 i artifactId iste su vrijednosti koje smo dali u naredbenom retku.
pakiranje je format paketa artefakta. Zadana vrijednost je jar . Može imati i druge vrijednosti poput uha, rata, katrana i tako dalje.
inačica označava broj verzije artefakta. Ako je prisutan SNAPSHOT , to znači da je verzija još uvijek u razvoju i možda neće biti stabilna. Ako broj verzije nema SNAPSHOT, to je stvarna verzija izdanja.
name je naziv projekta.
O ovisnostima i dodacima objasnit ću u Mavenu u nastavku.
Super POM
pom.xml kao što vidite prilično je mali. Razlog tome je što je velik dio konfiguracije prisutan u nečemu što se naziva Super POM, a koje Maven interno održava.
pom.xml proširuje Super Pom kako bi dobio sve konfiguracije prisutne u super pomu.
Jedna od konfiguracija prisutnih u Super Pomu označava sljedeće:
- Sav izvorni kod Java prisutan je u src / main / javi
- Sav Java test kôd prisutan je unutar src / test / java
Ovdje spominjem samo ovaj config, jer ćemo se u ovom članku baviti i izvornim kodom i testnim kodom.
Kodirati
Cjelokupni ovdje raspravljeni kod dostupan je u ovom izvješću: //github.com/aditya-sridhar/first-maven-app
Dodajmo neki jednostavni Java kôd. Stvorite sljedeću strukturu mape:
src / main / java / com / test / app / App.java
App.java je Java kôd koji ćemo dodati.
Kopirajte sljedeći kod u 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; } }
Ovo je jednostavan kod koji ima dvije funkcije.
Ali jedna stvar koju treba primijetiti je da kôd koristi lambda izraze unutar forEach petlje u funkciji printVals .
Lambda izrazi trebaju najmanje Java 8 za pokretanje. No, prema zadanim postavkama Maven 3.8.0 radi pomoću Java verzije 1.6.
Stoga moramo reći mavenu da umjesto toga koristi Javu 1.8. Da bismo to učinili, koristit ćemo Maven dodatke.
Maven dodaci
Upotrijebit ćemo dodatak Maven Compiler da naznačimo koju ćemo Java verziju koristiti. U pom.xml dodajte sljedeće retke:
... org.apache.maven.plugins maven-compiler-plugin 3.8.0 1.8 1.8 ...
Možete vidjeti da su izvorna i ciljna inačica Java postavljene na 1.8 .
Dodaci u osnovi daju neke radnje u mavenu. Dodatak kompajlera kompajlira izvorne datoteke.
Cijeli pom.xml dostupan je ovdje.
Dostupno je puno dodataka za maven. Znajući kako se dobro koristiti dodatke, Maven se može koristiti za činjenje nevjerojatnih stvari. ?
Ovisnosti Mavena
Tijekom pisanja koda obično ćemo koristiti puno postojećih knjižnica. Te postojeće knjižnice nisu ništa drugo doli ovisnosti. Maven se može koristiti za jednostavno upravljanje ovisnostima.
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:
- Default lifecycle: This deals with building and deploying the artifact.
- Clean lifecycle: This deals with project cleaning
- 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 ?
You know how to use Maven now. This article covered just the basics of pom, plugins, dependencies and build lifecycle. To know more about Maven check the links I have given above.
Happy Coding ?
About the author
I love technology and follow the advancements in the field. I also like helping others with my technology knowledge.
Feel free to connect with me on my LinkedIn account //www.linkedin.com/in/aditya1811/
You can also follow me on twitter //twitter.com/adityasridhar18
My Website: //adityasridhar.com/
Originally published at adityasridhar.com.