Projectbeschrijving Objectmodel

Een van de dingen die Maven in de eerste plaats standaardiseerde, was de projectbeschrijving. Vóór Maven had elke IDE zijn eigen projectbestand, waarin informatie over het project en de samenstelling ervan werd opgeslagen (vaak in binaire vorm).

Maven heeft een op XML gebaseerde, universele, open standaard bedacht die beschrijft wat een project is, hoe het moet worden gebouwd en welke afhankelijkheden het heeft met behulp van verschillende tags. De projectbeschrijving is opgenomen in een enkel bestand, gewoonlijk genaamd pom.xml .

Een voorbeeld van een pom.xml -bestand :

<?xml versie="1.0" codering="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3 .org/2001/XMLSchema-instantie"
        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>example</artifactId>
   <version>1.0-SNAPSHOT</version>

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


</project>

In dit voorbeeld zijn drie dingen geschreven:

  • Informatie over de versie van de maven-projectstandaard is blauw.
  • Informatie over het project zelf is in het rood.
  • Informatie over gebruikte bibliotheken is groen.

Laten we het pom-bestandsapparaat eens nader bekijken.

Maven-projectstructuur

En meteen is de vraag: heb je in het laatste voorbeeld op de vreemdheid gelet? Het bevat geen informatie over de projectcode zelf! Er is geen woord over waar java-bestanden, bronnen, eigenschappenbestanden, html, build-scripts en dergelijke worden opgeslagen.

En het antwoord is simpel: Maven heeft het ontwerp van het project gestandaardiseerd. Er zijn verschillende opties voor het organiseren van code binnen een project, en de meest voorkomende is:

De structuur is een beetje ongewoon na de standaard IDEA-projecten, maar daarvoor is het universeel. 90% van de projecten die je in je leven tegenkomt, hebben deze mappenstructuur .

Als u een Maven-project maakt (met IDEA of met de console), krijgt het de opgegeven vorm. Laten we eens kijken hoe het hier allemaal werkt.

De map src , je raadt het al, bevat de broncode voor het project. Het heeft twee submappen: main en test .

De map /src/main/java is de root voor alle Java-klassen in het project. Als u een klasse com.codegym.Cat hebt, bevindt deze zich in de map /src/main/java /com/codegym /Cat.java . Als er tekst- of binaire bronnen zijn, moeten deze worden opgeslagen in de map /src/main/resources .

De structuur van de map /src/test is vergelijkbaar met de structuur van de map /src/main , maar bevat de tests en hun bronnen. Maven weet zelf de nodige tests uit te voeren bij het bouwen van een project, maar daar gaan we het in een apart college over hebben.

Er is ook een map /target in het project , waar Maven het project zal opslaan nadat het gebouwd is. Omdat grote projecten vaak niet-triviale buildscripts hebben, wordt er niets in deze map opgeslagen.

Het tweede doel van de map /target is om tussentijdse buildresultaten in de cache op te slaan. Bij het bouwen van een groot project kan Maven alleen dat deel herbouwen dat is veranderd, waardoor de bouwtijd meerdere keren wordt versneld.

Nou, als kers op de taart: aan de basis van het project staat het pom.xml-bestand. Het bevat alle nodige informatie over het project, die we hieronder zullen bespreken.

Apparaat pom.xml

Om te beginnen is het pom-bestand xml, dus het bevat de standaard headers en naamruimte-informatie. Dit gaat allemaal over de puur XML-standaard, dus we zullen er niet in detail over praten. Het betekent dit:

<?xml versie="1.0" codering="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3 .org/2001/XMLSchema-instantie"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        …

</project>

Ook is de eerste regel binnen de tag <project> meestal een beschrijving van de versie van de pom-file-standaard. Bijna altijd is het 4.0. Ook dit interesseert ons niet.

De eerste regels waarin we geïnteresseerd zijn, zien er als volgt uit:

  <modelVersion>4.0.0</modelVersion>

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

Om niet nog eens te begrijpen wat we beschrijven (programma, project, module, bibliotheek, enz.) in de Maven-standaard, wordt dit allemaal het woord artefact genoemd . Wat je de makers van Maven niet kunt weigeren, is de liefde voor standaardisatie.

De drie tags die je ziet betekenen:

  • groupId - het pakket waartoe de applicatie behoort, met toevoeging van de domeinnaam;
  • artefactId – unieke tekenreekssleutel (project-ID);
  • versie - versie van het project.

Deze drie parameters zijn voldoende om elk artefact ondubbelzinnig te beschrijven .

Verder is er na de beschrijving van het project meestal een lijst met artefacten (bibliotheken) die het project gebruikt. Het ziet er ongeveer zo uit:

   <dependencies>

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

   </dependencies>

In dit voorbeeld voegen we de commons-io-bibliotheek uit het commons-io-pakket, versie 2.6, toe aan ons project.

Tijdens het bouwen zal Maven zo'n bibliotheek vinden in zijn wereldwijde repository en deze aan uw project toevoegen. En trouwens, niet alleen Maven kan dit.

Hoe IDEA werkt met Maven

Intellij IDEA is geweldig in het werken met Maven. Ze weet hoe ze dergelijke projecten moet openen, ze zelf moet maken, verschillende build-scripts moet uitvoeren en de meegeleverde bibliotheken perfect begrijpt.

Het heeft zelfs al enige tijd zijn eigen ingebouwde Maven, maar je moet het nog steeds zelf kunnen installeren en configureren, dus deze functie van IDEA werd niet eerder genoemd. In theorie kan IDEA een conflict hebben tussen twee Mavens, dus het is goed voor je om te weten dat er twee zijn.

Een nieuw Maven-project maken in IDEA:

Klik op het menu Bestanden > Nieuw project. Selecteer aan de linkerkant het menu-item Nieuw project .

maven-project

Laten we enkele punten verduidelijken:

  1. Naam van het project;
  2. Map voor het project;
  3. De projecttaal is Java;
  4. Het projecttype is Maven.

In het gedeelte Geavanceerde instellingen onderaan vraagt ​​IDEA u om de goupID, artefactID en versie van ons nieuwe project op te geven. Deze gegevens kunnen later altijd eenvoudig gewijzigd worden. Kies uit de voorgestelde of voer uw eigen in:

Maven-project 2

Maak vervolgens standaard een project aan op de gewenste locatie. Als resultaat zien we de structuur:

Maven-project 3

Klassen en pakketten moeten in de java-map worden gemaakt, we hebben hier al over gesproken. En ik denk dat je het gemakkelijk aankan. We zijn klaar om verder te gaan, maar laten we een beetje teruggaan naar een belangrijke kwestie die we een beetje hebben "overgeslagen".