Projektbeskrivning Objektmodell

En av de saker som Maven standardiserade i första hand var projektbeskrivningen. Före Maven hade varje IDE sin egen projektfil, som lagrade information om projektet och dess montering (och ofta i binär form).

Maven har kommit med en XML-baserad, universell, öppen standard som beskriver vad ett projekt är, hur det ska byggas och vilka beroenden det har med hjälp av olika taggar. Projektbeskrivningen finns i en enda fil, vanligtvis kallad pom.xml .

Ett exempel på pom.xml- fil :

<?xml version="1.0" encoding="UTF-8"?>
<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>example.com</groupId>
   <artifactId>exempel</artifactId>
   <version>1.0-SNAPSHOT</version>

   <dependencies>
       <dependency>
           <groupId>commons-io </groupId>
           <artifactId>commons-io</artifactId>
        <version>2.6</version>
        </dependency>
   </dependencies>


</project>

Det här exemplet har tre saker skrivna:

  • Information om versionen av maven-projektstandarden är blå.
  • Information om själva projektet är i rött.
  • Information om begagnade bibliotek är grön.

Låt oss ta en närmare titt på pom-filenheten.

Maven projektstruktur

Och genast är frågan: uppmärksammade du det konstiga i det förra exemplet? Den innehåller ingen information om själva projektkoden! Det finns inget ord om var java-filer, resurser, egenskapsfiler, html, build-skript och liknande lagras.

Och svaret är enkelt - Maven standardiserade utformningen av projektet. Det finns flera alternativ för att organisera kod inom ett projekt, och det vanligaste är:

Strukturen är lite ovanlig efter de vanliga IDEA-projekten, men för det är den universell. 90 % av projekten du kommer att stöta på i ditt liv kommer att ha denna mappstruktur .

Om du skapar ett Maven-projekt (med IDEA eller med hjälp av konsolen), kommer det att ha den angivna formen. Låt oss se hur det hela fungerar här.

src- mappen , du gissade rätt, innehåller källkoden för projektet. Den har två undermappar: main och test .

Mappen /src/main/java är roten för alla Java-klasser i projektet. Om du har en com.codegym.Cat-klass kommer den att finnas i mappen /src/main/java /com/codegym /Cat.java . Om det finns text- eller binära resurser bör de lagras i mappen /src/main/resources .

Strukturen för mappen /src/test liknar strukturen för /src/huvudmappen , men den innehåller testerna och deras resurser. Maven själv vet hur man kör de nödvändiga testerna när man bygger ett projekt, men vi kommer att prata om detta i en separat föreläsning.

Det finns också en /target- mapp i projektet , där Maven kommer att spara projektet efter att det har byggts. Eftersom stora projekt ofta har icke-triviala byggskript, lagras ingenting i den här mappen.

Det andra syftet med /target -mappen är att cachelagra mellanliggande byggresultat. När man bygger ett stort projekt kan Maven bara bygga om den del av det som har förändrats, vilket påskyndar byggtiden med flera gånger.

Tja, som en körsbär på kakan - själva roten av projektet är pom.xml-filen. Den innehåller all nödvändig information om projektet, som vi kommer att diskutera nedan.

Enhet pom.xml

Till att börja med är pom-filen xml, så den innehåller information om standardhuvuden och namnutrymmen. Det här handlar om den rent XML-standarden, så vi kommer inte att prata om det i detalj. Det betyder detta:

<?xml version="1.0" encoding="UTF-8"?>
<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">

        …

</project>

Dessutom är vanligtvis den första raden inuti <project>-taggen en beskrivning av versionen av pom-filstandarden. Nästan alltid är det 4.0. Inte heller detta är av intresse för oss.

De första raderna vi är intresserade av ser ut så här:

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sample.app</groupId>
  <artifactId>new-app</artifactId>
  <version>1.0-SNAPSHOT</version>

För att inte ännu en gång förstå vad vi beskriver (program, projekt, modul, bibliotek, etc.) i Maven-standarden kallas allt detta för ordet artefakt . Vad du inte kan vägra skaparna av Maven är kärleken till standardisering.

De tre taggarna du ser betyder:

  • groupId - paketet som applikationen tillhör, med tillägg av domännamnet;
  • artifactId – unik strängnyckel (projekt-id);
  • version - version av projektet.

Dessa tre parametrar räcker för att entydigt beskriva vilken artefakt som helst .

Vidare, efter beskrivningen av projektet, finns det vanligtvis en lista över artefakter (bibliotek) som projektet använder. Det ser ut ungefär så här:

   <dependencies>

       <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.6</version>
       </dependency>

   </dependencies>

I det här exemplet lägger vi till commons-io-biblioteket från commons-io-paketet, version 2.6, till vårt projekt.

Vid byggtid kommer Maven att hitta ett sådant bibliotek i sitt globala arkiv och lägga till det i ditt projekt. Och förresten, inte bara Maven kan göra detta.

Hur IDEA fungerar med Maven

Intellij IDEA är bra på att arbeta med Maven. Hon vet hur man öppnar sådana projekt, skapar dem själv, kör olika byggskript och förstår perfekt de inkluderade biblioteken.

Den har till och med sin egen inbyggda Maven under en tid, men du måste fortfarande kunna installera och konfigurera den själv, så den här funktionen hos IDEA nämndes inte tidigare. I teorin kan IDEA ha en konflikt mellan två Mavens, så det är bra för dig att veta att det finns två.

Så här skapar du ett nytt Maven-projekt i IDEA:

Klicka på menyn Filer > Nytt projekt. Välj menyalternativet Nytt projekt till vänster .

maven projekt

Låt oss förtydliga några punkter:

  1. Projektnamn;
  2. Mapp för projektet;
  3. Projektets språk är Java;
  4. Projekttypen är Maven.

I avsnittet Avancerade inställningar längst ner kommer IDEA att uppmana dig att ange goupID, artefaktID och version av vårt nya projekt. Dessa data kan alltid enkelt ändras senare. Välj bland de föreslagna eller ange din egen:

Maven projekt 2

Skapa sedan ett projekt som standard på önskad plats. Som ett resultat ser vi strukturen:

Maven projekt 3

Klasser och paket måste skapas i java-mappen, vi har redan pratat om detta. Och jag tror att du lätt kan hantera det. Vi är redo att gå vidare, men låt oss gå tillbaka lite, till en viktig fråga som vi "hoppade över" lite.