Wir haben in unserem Projekt noch nie Build-Tools verwendet, daher haben wir Maven für die Implementierung zusammengefasst. Dieser Artikel soll Ihnen die Informationen geben, die Sie benötigen, um sich selbst zu verstehen und für Ihre Projektmitglieder bereitzustellen. Da Maven3 verwendet wird, basiert die Beschreibung auch darauf.
Maven ist ein Projektmanagement-Tool, das die Ausführung von Java-Programmerstellungen steuern (JAR-Bibliotheken verwalten, kompilieren, testen, WARs und JARs generieren) und Ergebnisberichte erstellen kann. Sie können das Plugin auch erweitern, um Ihren Builds und Berichten Funktionen hinzuzufügen. Maven kann detaillierte Anweisungen steuern, indem er den Prozess beschreibt, den Sie in pom.xml (Projektobjektmodell) ausführen möchten. Sie können beispielsweise eine WAR generieren, indem Sie die Version der zu verwendenden JAR-Bibliothek angeben oder umgebungsabhängige Einstellungen wie das DB-Verbindungsziel angeben.
pom.xml Ich werde nur die Gliederung zusammenfassen. Weitere Informationen finden Sie unter Maven-POM-Referenz. groupId / artefaktId / version ist ein erforderlicher Einstellungswert.
Element | Erläuterung |
---|---|
groupId | Eine eindeutige ID für Ihre Organisation oder Ihr Projekt. In einigen Fällen wird es gemäß der Paketstruktur des Projekts definiert. |
artifactId | Name, der das Projekt identifiziert |
version | Projektversion |
packaging | Der Status der Projektartefakte. Sie können Krieg, Glas usw. angeben. |
dependencies | Bibliothek, auf die das Projekt verweist |
parent | Gibt das übergeordnete POM an, auf das verwiesen werden soll. |
dependencyManagement | Definiert die Vorlage der abhängigen Bibliothek. |
modules | Definiert die vom Multiprojekt verwalteten Module. |
properties | Der in diesem Tag deklarierte Wert ist in pom${X}Sie können darauf unter verweisen. Es wird verwendet, wenn Sie einen Wert definieren möchten, auf den in einem Projekt wie JDK-Version oder Encording allgemein verwiesen wird. |
build | Definiert das Plugin, das beim Erstellen ausgeführt werden soll. |
reporting | Definiert das Plugin, das zum Zeitpunkt der Site ausgeführt werden soll. |
repositories | Definiert ein Repository, das nicht remote durchsucht werden soll. |
pluginRepositories | Definieren Sie ein reines Plugin-Repository, das Sie außerhalb von Remote durchsuchen möchten. |
profiles | Definiert die Einstellungsinformationen für jede Maven-Ausführungsumgebung. Sie können beispielsweise die Umgebung zwischen Produktion, Staging und Entwicklung wechseln. |
Im Allgemeinen folgt die Versionsverwaltung des durch das Versions-Tag angegebenen Projekts Semantic Versioning. Das heißt, es wird durch "X.Y.Z (Major Minor Patch) -Identifier (Alpha / Beta / m / RC / SNAPSHOT usw.)" dargestellt. Beim Erstellen eines neuen Maven-Projekts in Eclipse oder IntelliJ IDEA lautet die Standardversion 0.0.1-SNAPSHOT.
Die Abhängigkeitsauflösung ist eine wichtige Funktion in Maven und verwaltet die Bibliotheken (externe Jars), von denen Ihr Projekt abhängt. Durch die Beschreibung der Abhängigkeit [Abhängigkeit] in pom.xml wird die erforderliche Bibliothek automatisch aus dem Maven-Repository heruntergeladen. Mit dieser Funktion müssen Sie die erforderlichen Bibliotheken nicht mehr selbst von der Site herunterladen und zum Erstellungspfad hinzufügen oder ein Versionskontrollsystem festlegen. Sie können auch Umgebungseinstellungskonflikte beseitigen, die je nach Entwicklungsumgebung durch unterschiedliche Klassenpfade verursacht werden.
Im Maven-Repository werden die Bibliotheken verwaltet. Maven lädt die erforderlichen Bibliotheken aus dem Repository herunter, wenn Sie den Build ausführen. Projektartefakte können auch zur Verwendung durch andere Projekte in das Repository hochgeladen werden.
Mavens offizielles Repository im Internet veröffentlicht. Versionen verschiedener Bibliotheken sind hier verfügbar, und Sie können die erforderlichen Bibliotheken lokal herunterladen. Zentrales Repository
Verwalten Sie die Bibliothek wie ein zentrales Repository. Sie können auch Ihr eigenes Remote-Repository mit Sonatype NEXUS erstellen. Die folgenden Repositorys sind beispielsweise Remote-Repositorys.
Ein in der Entwicklungsumgebung erstelltes Repository. Wenn Maven nach einer Bibliothek sucht, durchsucht er zuerst das lokale Repository. Wenn nicht, sucht er nach dem zentralen Repository oder Remote-Repository und lädt es herunter.
Das lokale Repository befindet sich in ~ / .m2 / repository
.
Scope Wenn Sie den Bereich angeben, können Sie den Status der Definition der Bibliothek im Klassenpfad angeben. Wenn nicht angegeben, wird es "kompilieren".
Scope | Erläuterung |
---|---|
compile | In allen Situationen im Klassenpfad definiert. |
provided | Entspricht dem Kompilieren, ist jedoch nicht im Artefakt enthalten. Geben Sie dies an, wenn die Bibliothek hauptsächlich auf der Umgebungsseite vorbereitet wird, auf der die Artefakte wie JDK und Servlet-API bereitgestellt werden. |
runtime | Es ist in dem Artefakt in der Bibliothek enthalten, das für die Ausführung des Artefakts erforderlich ist. |
test | Test Eine Bibliothek, die kompiliert und ausgeführt werden muss, wenn der Code ausgeführt wird. JUnit und Mockito sind anwendbar. Es ist nicht in den Liefergegenständen enthalten. |
system | Entspricht der bereitgestellten, aber die Bibliothek ist kein RepositorysystemPath Bezieht sich auf den in angegebenen Pfad. |
Der von Maven ausgeführte Prozess wird für jede Funktion als "Ziel" bezeichnet. Das "Ziel" wird vom Plugin bereitgestellt und läuft unter "MVN-Plugin-Name: Zielname". Ein Plug-In hat mehrere Ziele.
Bei Maven wird das, was Sie tun möchten, als "Phase" bezeichnet. Mehrere "Ziele" sind mit einer Phase verknüpft. Wenn Sie die Phase ausführen, die Sie mit dem Namen "mvn phase" ausführen möchten, werden die mit der "Phase" verknüpften "Ziele" der Reihe nach ausgeführt. Die Reihenfolge, in der die Phasen ausgeführt werden, wird durch den später beschriebenen Lebenszyklus bestimmt.
Maven-Builds führen eine festgelegte Anzahl von "Phasen" nacheinander entsprechend ihrem Lebenszyklus aus. Es sind drei Lebenszyklen definiert
Es ist buchstäblich ein Standardlebenszyklus. Da es insgesamt 23 Phasen gibt, werden hier nur die Hauptphasen erläutert. (Die nicht beschriebene Phase ist die Vorverarbeitung der nächsten Phase und die Nachbearbeitung der vorherigen Phase.) "Artefakt" bezieht sich auf Krieg, Glas usw.
No. | Phase | Überblick |
---|---|---|
1 | validate | Überprüfen Sie die Legitimität des Projekts |
7 | compile | Projekt kompilieren |
15 | test | Unit-Test ausführen |
17 | package | Erstellung von Liefergegenständen (Verpackung) |
21 | verify | Überprüfung der Ergebnisse |
22 | install | Platzieren Sie Artefakte im lokalen Repository |
23 | deploy | Platzieren Sie Artefakte im Remote-Repository |
Wenn Sie beispielsweise "mvn package" ausführen, werden 17 Phasen von der Validierung bis zum Paket ausgeführt und Artefakte generiert. Wenn Sie bis zu "mvn deploy" ausführen, werden alle 23 Phasen von der Validierung bis zur Bereitstellung ausgeführt.
Der Bereinigungszyklus ist ein Lebenszyklus zum Löschen temporärer Dateien, die von einem Build generiert wurden. Temporäre Dateien sind lokal generierte Klassen- und Ressourcendateien wie Kompilieren und Testen. (In einem normalen Maven-Projekt wird die Datei in das Zielverzeichnis ausgegeben.)
Es ist eine gute Idee, immer sauber auszuführen, bevor der Build im Standardzyklus ausgeführt wird, da die temporären Dateien, die beim Wiederherstellen übrig bleiben, möglicherweise wiederverwendet werden.
Beispiel mvn clean package
No. | Phase | Überblick |
---|---|---|
1 | pre-clean | Vorverarbeitung zum temporären Löschen von Dateien |
2 | clean | Temporäre Dateien löschen |
3 | post-clean | Nachbearbeitung des temporären Löschens von Dateien |
Der Site-Lebenszyklus generiert eine Dokumentation für das Projekt. Generieren Sie beispielsweise mithilfe des später beschriebenen Plug-Ins Javadoc, statische Analyseergebnisberichte wie Checkstyles und FindBugs, Testergebnisse und Abdeckungsberichte.
Wenn Sie die Site gleichzeitig mit dem Erstellen angeben und ausführen, wird das Dokument des Erstellungsergebnisses generiert. Beispiel 'mvn install site'
No. | Phase | Überblick |
---|---|---|
1 | pre-site | Vorverarbeitung der Dokumentenerstellung |
2 | site | Dokument löschen |
3 | post-site | Nachbearbeitung der Dokumentenerstellung |
3 | site-deploy | Platzieren Sie das Dokument auf dem angegebenen Webserver |
Plugins sind in Java geschriebene Maven-Funktionen. Das Plug-In bietet auch Ziele, die mit den Phasen des Lebenszyklus verknüpft sind. Darüber hinaus werden verschiedene Plug-Ins veröffentlicht, und Sie können auch Ihr eigenes Plug-In erstellen. Bitte überprüfen Sie die HP jedes Plug-Ins, da die Verwendung für jedes Plug-In unterschiedlich ist.
Es definiert hauptsächlich das Plug-In, das Sie im Standardlebenszyklus ausführen möchten.
site Definiert ein Plug-In zur Ausgabe eines Laufzeitberichts. Sie können beispielsweise die statischen Analyseergebnisse wie checkstyle überprüfen und Fehler finden sowie das Javadoc des Projektcodes durchsuchen.
In Maven kann ein Projekt verwaltet werden, indem es für jede Rolle und jeden Dienst in "Module" unterteilt wird. Zum Beispiel Kernmodul, Plugin-Modul, gemeinsamer Funktionsbaustein usw. Für eine solche Projektkonfiguration können Sie die Modulkonfiguration und die allgemeinen Einstellungen in pom.xml des übergeordneten Moduls definieren, das das gesamte Projekt verwaltet, und es in pom.xml jedes Moduls erben.
Legen Sie in pom.xml im übergeordneten Modul des Multi-Modul-Projekts Folgendes fest.
Geben Sie im untergeordneten Modul die Gruppen-ID / Artefakt-ID / Version des übergeordneten Moduls im übergeordneten Tag an und erben Sie sie.
Nehmen Sie als Beispiel den Prozess der Migration eines in der Entwicklung befindlichen Projekts durch eine Gruppe in ein Maven-Projekt.
In Eclipse können Sie ein vorhandenes Projekt in ein Maven-Projekt konvertieren, indem Sie "Rechtsklick auf das Projekt> Konfiguration> In Maven-Projekt konvertieren" auswählen. Da dies jedoch das erste erstellte Maven-Projekt ist, habe ich beschlossen, das Modul in das von Grund auf neu erstellte Projekt zu kopieren.
Weitere Informationen finden Sie unter Installieren von Maven.
Entpacken Sie die komprimierte Datei und legen Sie den Ordner bin in der Umgebungsvariablen PATH ab.
Öffnen Sie eine Eingabeaufforderung und führen Sie mvn --version
aus, um die Versionsinformationen anzuzeigen.
Erstellen Sie als Nächstes einen Arbeitsordner .m2 für Maven.
Arbeitsordner werden normalerweise im Benutzerverzeichnis "~ / .m2" erstellt.
Erstellen Sie außerdem die folgenden Verzeichnisse und Dateien im Arbeitsordner.
~ / .m2 / repository
Dies ist das Verzeichnis, das das lokale Repository sein wird.
~ / .m2 / settings.xml
Dies ist eine Benutzereinstellungsdatei.
Wenn Sie über einen Proxy auf das Internet zugreifen, müssen Sie einen Proxy festlegen.
Beschreiben Sie wie folgt in ~ / .m2 / settings.xml
.
setting.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<proxies>
<proxy>
<id>http_proxy</id>
<active>true</active>
<protocol>http</protocol>
<username></username>
<password></password>
<host></host>
<port></port>
</proxy>
<proxy>
<id>https_proxy</id>
<active>true</active>
<protocol>https</protocol>
<username></username>
<password></password>
<host>Authentifizierungskennwort Proxyserver-IP-Adresse Proxyserver-Portnummer Authentifizierungskonto-Authentifizierungskennwort Proxyserver-IP-Adresse</host>
<port>Proxy-Server-Portnummer</port>
</proxy>
</proxies>
</settings>
~ / .m2 / settings.xml
an.Dieses Mal werden wir ein vorhandenes Tomcat-Projekt in ein Maven-Projekt konvertieren. Es wird in der folgenden Konfiguration mit mehreren Modulen verwaltet.
project ├─ main module ├─ sub module1 ├─ sub module2 └─ sub module3
Erstellen Sie einen übergeordneten POM, aus dem das Multi-Modul besteht.
groupId ・ ・ ・ ・ Eindeutige ID für das Projekt (jp.co.company name.product name / com.product name etc.) Artefakt-ID ・ ・ ・ Name der Projektidentifikation version ・ ・ ・ Version (Zunächst einmal ist der Standard 0.0.1-SNAPSHOT in Ordnung.) Paket ・ ・ ・ ** pom **
Nach der Erstellung haben Sie einen src-Ordner und eine pom.xml. Diesmal ist src nicht erforderlich, löschen Sie es also.
Java5 (1.5) ist standardmäßig angegeben. Öffnen Sie daher die Eigenschaft in pom.xml und geben Sie die Version an. Wenn Sie es als übergeordnetes POM angeben, wird es auch im Untermodul angezeigt. Wenn Sie die Version des Untermoduls ändern möchten, geben Sie die Eigenschaft auch in der pom.xml dieses Moduls an.
pom.xml[JDK version]
<properties>
<java-version>1.8</java-version>
<maven.compiler.source>${java-version}</maven.compiler.source>
<maven.compiler.target>${java-version}</maven.compiler.target>
</properties>
Erstellen Sie ein Untermodul unter dem übergeordneten Projekt. Das diesmal erstellte Submodul ist die JAR-Bibliothek, auf die in dem später beschriebenen Webmodul verwiesen wird.
groupId ・ ・ ・ ・ Wie das übergeordnete Projekt Artefakt-ID ・ ・ ・ Modulname version ・ ・ ・ Wie das übergeordnete Projekt Paket ・ ・ ・ ** Glas **
Ein Untermodul wird mit der folgenden Ordnerstruktur erstellt. sub module ├src/main/java └src/test/java
Erstellen Sie ein Webanwendungsmodul, das diesmal das Hauptmodul ist.
groupId ・ ・ ・ ・ Wie das übergeordnete Projekt Artefakt-ID ・ ・ ・ Modulname version ・ ・ ・ Wie das übergeordnete Projekt Paket ・ ・ ・ ** Krieg **
Ein Webmodul wird mit der folgenden Ordnerstruktur erstellt. web module ├src/main/resources └src / main / webapp (Stammordner der Web-App. Darunter befinden sich META-INF und WEB-INF.)
maven-archetype-webapp erstellt keinen Java-Quellordner oder Testordner. Erstellen Sie daher einen.
web module ├src/main/java ├src/main/resources ├src/main/webapp └src/test/java
Fügen Sie für jedes Modul eine Abhängigkeit zu pom.xml hinzu. In Eclipse können Sie auch den dedizierten Maven POM-Editor verwenden, um visuell leicht verständliche Eingaben vorzunehmen.
Öffnen Sie pom.xml im Maven POM Editor und öffnen Sie die Registerkarte Abhängigkeiten. Klicken Sie links auf Für Abhängigkeiten hinzufügen, um das Fenster Abhängigkeit auswählen zu öffnen. Geben Sie die Gruppen-ID / Artefakt-ID / Version / den Bereich der Bibliothek an, die Sie hinzufügen möchten, und drücken Sie OK. Wenn Sie es nicht wissen, können Sie mit Enter ... in der Mitte suchen.
Wenn Sie die hinzugefügte Bibliothek zum Abhängigkeitsmanagement des übergeordneten Pom hinzufügen und gemeinsam mit anderen Submodulen darauf verweisen möchten, klicken Sie auf Verwaltet. Wählen Sie links die Bibliothek aus, die Sie dem übergeordneten Pom hinzufügen möchten, wählen Sie rechts das übergeordnete Pom aus und drücken Sie OK. Dadurch wird die Bibliothek zum Abhängigkeitsmanagement des übergeordneten Pom hinzugefügt. Wenn Sie sie jedoch mit einem anderen Untermodul verwenden möchten, öffnen Sie diese pom.xml und fügen Sie die Bibliothek hinzu.
Führen Sie das folgende Plug-In aus, um den Bericht auf "mvn site" auszugeben. Wenn Sie den Bericht mit Jenkins erstellen, können Sie ihn auch als Ergebnis des Builds ausgeben.
Ein Einstellungsbeispiel finden Sie unter [hier](http://qiita.com/kazokmr/items/971ec5cc8e3a07f2429a#pomxml Beispiel). (Dies ist mein Artikel.)
pom.xml hat ein "Profil" -Tag. Beispielsweise wird es verwendet, wenn Sie einen bestimmten Einstellwert je nach Situation ändern möchten. Ich denke, dass es ein DB-Verbindungsziel als Methode gibt, die häufig verwendet wird. Die Definition des Verbindungsziels ist beispielsweise eine resourceProperty-Datei
jdbc.url=jdbc:oracle://xxxxxxxx:1521/ora
jdbc.username=username
jdbc.password=password
Um für die drei Umgebungen Entwicklungsumgebung (dev), Verifizierungsumgebung (Staging) und Produktionsumgebung (prod) zu erstellen, legen Sie im Profil Folgendes fest.
pom.xml
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<jdbc.url>jdbc:oracle://xxxxxxxx:1521/oradev</jdbc.url>
<jdbc.username>Benutzername der Entwicklungsumgebung</jdbc.username>
<jdbc.password>Passwort für die Entwicklungsumgebung</jdbc.password>
</properties>
</profile>
<profile>
<id>staging</id>
<properties>
<jdbc.url>jdbc:oracle://xxxxxxxx:1521/orastaging</jdbc.url>
<jdbc.username>Benutzername der Überprüfungsumgebung</jdbc.username>
<jdbc.password>Passwort für die Überprüfungsumgebung</jdbc.password>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<jdbc.url>jdbc:oracle://xxxxxxxx:1521/oraprod</jdbc.url>
<jdbc.username>Produktionsbenutzername</jdbc.username>
<jdbc.password>Passwort für die Produktionsumgebung</jdbc.password>
</properties>
</profile>
</profiles>
Da activeByDefault = true
der Standardwert ist, wird beim Erstellen ohne Angabe von Angaben oder beim Starten der Webanwendung in der IDE auf ihn verwiesen.
Wenn Sie zur Verifizierungsumgebung oder Produktionsumgebung wechseln möchten, geben Sie die Profil-ID mit den Optionen "mvn -P-Staging-Paket", "man -P-Produktpaket" und "-P" an.
Die umgebungsabhängige Einstellungsdatei wird von einem dedizierten Modul verwaltet. Durch Trennen vom Webanwendungsmodul kann die War-Datei wiederverwendet werden.
Dies ist eine Methode zum Wechseln einiger Eigenschaften, aber das Profil kann auch die Eigenschaftendatei selbst wechseln. Angenommen, Eigenschaftendateien werden für jede Umgebung in den folgenden Verzeichnissen verwaltet.
src/main/resources/··· Verzeichnis der Ressourcendatei der Entwicklungsumgebung (Standard)
resources/staging/··· Ressourcendateiverzeichnis für die Überprüfungsumgebung
resources/prod/··· Ressourcendateiverzeichnis für die Produktionsumgebung
Die pom.xml zum Ersetzen der Dateien unter "src / main / resources /" für jede Umgebung lautet wie folgt.
pom.xml
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<resources.directory>${basedir}/src/main/resources</resources.directory>
</properties>
</profile>
<profile>
<id>staging</id>
<properties>
<resources.directory>${basedir}/resources/staging</resources.directory>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<resources.directory>${basedir}/resources/prod</resources.directory>
</properties>
</profile>
</profiles>
···
<build>
<resources>
<resource>
<directory>${resources.directory}</directory>
</resource>
</resources>
</build>
Im Build-Tag wird der Pfad des Ressourcenverzeichnisses in "$ {resources.directory}" definiert, und der Verzeichnispfad für jede Umgebung wird im Profil definiert. Auf diese Weise entsteht ein umweltunabhängiger Krieg, der in einer anderen Umgebung wiederverwendet werden kann.
Darüber hinaus denke ich, dass es besser ist, die Umgebungseinstellungsdatei mit einem dedizierten Modul anstelle des Webanwendungsmoduls zu verwalten, als Referenzbibliothek auszugehen und sie nicht in den Krieg einzubeziehen.
In den Terasoluna-Richtlinien wird auch erläutert, wie umgebungsabhängige Dateien erstellt werden. Terasoluna --3.5. Build Development Project
~~ Ich wollte das Profil verwenden, da es in diesem Projekt auch 3 DB-Verbindungsziele gibt, Entwicklungsumgebung / Verifizierungsumgebung / Produktionsumgebung, aber die Einstellungsdatei des Verbindungsziels befand sich nicht im Ressourcenordner und im Ressourcenordner. Aufgrund der großen Anzahl von Dateien war es schwierig, alle zu verwalten. Daher habe ich zuerst ohne Profil migriert. ~~ Ich habe es in diesem Artikel versucht.
Der OJDBC-Treiber (oracle.jar) wird nicht vom Maven-Repository verwaltet und muss folgendermaßen in das Maven-Projekt importiert werden: (In diesem Projekt ist Oracle.jar auf Laufzeit eingestellt, und auf dem Produktionsserver wird das JAR in Tomcats Bibliothek abgelegt.)
~ / .m2 / repository
.Verwendung des offiziellen Oracle Maven-Repositorys
Diese Methode selbst ist nicht bestätigt und nicht verifiziert. Es scheint jedoch notwendig zu sein, die OTN-Lizenz in jeder Entwicklungsumgebung festzulegen und den Befehl mvn zum ersten Mal in Eclipse auszuführen.
clean compile`` clean install site
etc.Obwohl es nichts mit Maven zu tun hat, haben Sie beim Ausführen einer Web-App in Eclipse das Tomcat-Plug-In installiert. Dieses Mal wird jedoch erläutert, wie Sie eine Tomcat-Anwendung mit dem WTP-Plug-In ausführen. (Es wird davon ausgegangen, dass das WTP-Plug-In in Eclipse installiert ist.)
Apache Maven Project Wikipedia Maven Basics Erste Schritte mit Maven3 Zusammenfassung zum Schreiben von POM für Maven2 und Maven3 ~ Übersicht ~ Maven Build Lifecycle Ich erkläre "Was ist ein Build-Tool?" Einem Neuling, der nur Java-Apps von Eclipse ausgeführt hat ... und dann von CI 6. Profil | TECHSCORE
Recommended Posts