Ich benutze Gradle schon lange, aber ich muss Maven für die Arbeit verwenden, also lerne ich.
Java Build Tool. OSS. Es scheint als Alternative zu Apache Ant erstellt worden zu sein.
Die Lesung ist "Maven" oder "Maven" (ich bin eine Maven-Schule).
Es gibt es schon lange [^ 1], aber es befindet sich noch in der Entwicklung, und ich habe den Eindruck, dass es viele Projekte gibt, die Maven verwenden. Ab 2020 sind Maven oder Gradle oft die Wahl für Java-Build-Tools (glaube ich).
[^ 1]: Maven 1.0 im Jahr 2004, Maven 2.0 im Jahr 2005, Maven 3.0 im Jahr 2010 (Maven - Maven veröffentlicht Verlauf)
Die Hauptversion ab 2020 ist 3. Maven 1 und 2 sind nicht kompatibel, 2 und 3 jedoch.
>mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: ...\bin\..
Java version: 11.0.6, vendor: AdoptOpenJDK, runtime: ...
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
apache-maven-X.X.X-bin.zip) von Official Site herunter.Zustand nach dem Auftauen
`-apache-maven-X.X.X/
|-bin/
|-boot/
|-conf/
|-lib/
|-LICENSE
|-NOTICE
`-README.txt
Bestätigung der Installation
>mvn --version
Apache Maven X.X.X (...)
...
Allgemeine projektübergreifende Einstellungen können in einer der folgenden Dateien beschrieben werden.
%MAVEN_HOME%\conf\settings.xml%USERPROFILE%\.m2\settings.xml [^2][^ 2]: "% USERPROFILE%" ist eine Windows-Umgebungsvariable, die auf das Haus des Benutzers verweist (für Linux bedeutet dies "$ HOME").
Der in der vorherigen Datei festgelegte Inhalt ist allen Projekten für alle Benutzer gemeinsam. Der in der letzteren Datei festgelegte Inhalt ist für alle Projekte innerhalb des Benutzers gleich.
Die vorherige Datei befindet sich in der heruntergeladenen Zip-Datei, aber alle Einstellungen sind leer und werden in den Kommentaren erläutert. Die letztere Datei existiert zunächst nicht, daher ist es eine gute Idee, die erstere Datei zu kopieren.
settings.xml
<settings ...>
...
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
...
</settings>
Schreiben Sie die erforderlichen Einstellungen neu und schreiben Sie sie in eine der oben genannten "settings.xml".
Hello World
--Öffnen Sie die Befehlszeile in einem geeigneten Ordner und führen Sie den folgenden Befehl aus.
> mvn archetype:generate
―― Zum ersten Mal wird die folgende Liste angezeigt, nachdem verschiedene Prozesse wie das Herunterladen durchgeführt wurden.
...
Choose archetype:
1: internal -> org.appfuse.archetypes:appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> org.appfuse.archetypes:appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
3: internal -> org.appfuse.archetypes:appfuse-basic-struts (AppFuse archetype for creating a web application with Hibernate, Spring and Struts 2)
...
16: internal -> org.apache.maven.archetypes:maven-archetype-quickstart ()
...
57: internal -> org.fusesource.scalate.tooling:scalate-archetype-empty (Generates a Scalate empty web application)
58: internal -> org.fusesource.scalate.tooling:scalate-archetype-guice (Generates a Scalate Jog web application)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 16:
org.apache.maven.archetypes: maven-archetype-quickstart) (drücken Sie einfach die Eingabetaste, um die Standardnummer auszuwählen).Define value for property 'groupId': : 【com.example】
Define value for property 'artifactId': : 【hello-world】
Define value for property 'version': 1.0-SNAPSHOT: :【】
Define value for property 'package': com.example: :【】
Confirm properties configuration:
groupId: com.example
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.example
Y: : 【y】
BUILD SUCCESS angezeigt wirdhello-Der Inhalt des Weltordners
hello-world/
|-pom.xml
`-src/
|-main/java/
| `-com/example/
| `-App.java
`-test/java/
`-com/example/
`-AppTest.java
pom.xml
<?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>com.example</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hello-world</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
...
</plugins>
</pluginManagement>
</build>
</project>
App.java
package com.example;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
kompilieren
> mvn compile
--Auch verschiedene Download-Prozesse werden zum ersten Mal ausgeführt (es sollte schneller sein, da nach dem zweiten Mal keine Downloads mehr stattfinden).
hello-Welt führen
> java -cp target\classes com.example.App
Hello World!
mvn-Archetyp: generate implementiert einen Mechanismus namens ** archetype **, der automatisch ein Projekt aus einer Vorlage generiert.POM Maven – Introduction to the POM
Maven-Einstellungen werden in einer XML-Datei namens pom.xml beschrieben. POM ist eine Abkürzung für Project Object Model.
Maven verwaltet Build-Ziele in Einheiten, die als ** Projekte ** bezeichnet werden. Das POM ist eine Datei, die verschiedene Einstellungen für das Projekt beschreibt.
Super POM POMs haben eine Eltern-Kind-Beziehung und es gibt einen ** Super-POM ** als höchsten Elternteil aller POMs. Das neueste Super POM finden Sie beispielsweise auf der nächsten Seite.
Maven Model Builder – Super POM
Wenn im POM des Projekts keine Einstellung vorhanden ist, wird die Einstellung des übergeordneten POM grundsätzlich vererbt. Mit anderen Worten, das Super-POM ist ein POM, das die Standardeinstellungen beschreibt, die für alle Projekte gelten.
Angenommen, ein POM mit der Mindestkonfiguration wird erstellt, lautet der Inhalt von pom.xml wie folgt.
Minimale Konfiguration pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
--Schreiben Sie das Tag "
<modelVersion><groupId><artifactId><version>
--<modelVersion>gibt die Version von POM an
――Das ändert sich im Grunde nicht, daher sollten Sie diesen Wert vorerst angeben.<groupId>, <artifactId>, <version> definieren Informationen, um das Projekt eindeutig zu identifizieren.<groupId>groupId von org.apache.maven.plugins.
--. Kann oder darf nicht angebracht sein (junit usw. sind nicht angebracht)groupId muss nicht mit der Java-Paketstruktur des Projekts übereinstimmen, es ist jedoch sicherer, ihn abzugleichen, um weniger Verwirrung zu stiften.
<artifactId><version>
--version gibt die Version des Projekts an
--groupId und artefaktId identifizieren das Projekt eindeutig und version identifiziert die Version.[^ 3]: Ich denke "<modelVersion>ist auch in Super POM", aber leider wird dies nicht vererbt (es wird einen Fehler verursachen, wenn es gelöscht wird)
-SNAPSHOT am Ende hat jedoch eine besondere Bedeutung.In pom.xml kann auf Variablen verwiesen werden, um das Problem des Duplizierens desselben Werts an mehreren Stellen zu vermeiden.
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>project.groupId = ${project.groupId}</echo>
<echo>project.artifactId = ${project.artifactId}</echo>
<echo>project.version = ${project.version}</echo>
<echo>project.build.directory = ${project.build.directory}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
»Irgendwie tauchten plötzlich viele von ihnen auf, aber die wichtigen Punkte hier sind wie folgt.
Extrahieren Sie nur wichtige Teile
<echo>project.groupId = ${project.groupId}</echo>
<echo>project.artifactId = ${project.artifactId}</echo>
<echo>project.version = ${project.version}</echo>
<echo>project.build.directory = ${project.build.directory}</echo>
Ausführungsergebnis
> mvn antrun:run
...
[echo] project.groupId = example
[echo] project.artifactId = hello
[echo] project.version = 1.0.0
[echo] project.build.directory = F:\tmp\maven\hello\target
...
project.version bezieht sich auf den Wert von<project> <version>
--project.build.directory befindet sich nicht in dieser pom.xml, sondern in Super POM ) Erklärt inpom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>project.class = ${project.class}</echo>
<echo>project.getClass() = ${project.getClass()}</echo>
<echo>plugins[0].artifactId = ${project.build.plugins[0].artifactId}</echo>
<echo>plugins[1].artifactId = ${project.build.plugins[1].artifactId}</echo>
<echo>plugins[2].artifactId = ${project.build.plugins[2].artifactId}</echo>
</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] project.class = class org.apache.maven.model.Model
[echo] project.getClass() = ${project.getClass()}
[echo] plugins[0].artifactId = maven-antrun-plugin
[echo] plugins[1].artifactId = maven-jdeps-plugin
[echo] plugins[2].artifactId = ${project.build.plugins[2].artifactId}
$ {...} geschriebenen Ausdruck können Sie grundsätzlich auf die Eigenschaft des durch Punkte (.) getrennten Objekts verweisen.class verweisen).Model-Instanz ist ReflectionValueExtractor Der Ausdruck wird ausgewertet, indem er an .java # L163 übergeben wird.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>${project.build.pluginsAsMap(org.apache.maven.plugins:maven-antrun-plugin).id}</echo>
<echo>${project.build.pluginsAsMap(org.apache.maven.plugins:maven-jdeps-plugin).id}</echo>
</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] org.apache.maven.plugins:maven-antrun-plugin:1.8
[echo] org.apache.maven.plugins:maven-jdeps-plugin:3.1.2
--Wenn die Eigenschaft "Map" ist, können Sie auf die Schlüsselspezifikation in Form von "fooMap (<key>muss nicht in doppelte Anführungszeichen ( ") eingeschlossen werden und wird so wie es ist als Schlüssel von String verwendet.
pluginsAsMap ist eine Klasse namens PluginContainer Bezieht sich auf die in definierte Methode
--Diese Map hat [Plugin # getKey ()](https://maven.apache.org/ref/3.6.3/maven-model/apidocs/org/apache/maven/model/Plugin.html" als Schlüssel. Als Ergebnis von # getKey-) wird die dem Wert entsprechende Plugin-Instanz gesetzt.
--Plugin # getKey () gibt den Wert der groupId und artefaktId des Plugins zurück, die durch einen Doppelpunkt (: ) verbunden sind.project.build verwiesen werden kann, lautet Es erbt von diesem PluginContainer~ AsMap
Das Gesamtbild jeder Klasse und Eigenschaft, auf das aus "Modell" verwiesen werden kann, ist im Klassendiagramm zusammengefasst.

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
...
<target>
<echo>project.basedir = ${project.basedir}</echo>
<echo>project.baseUri = ${project.baseUri}</echo>
<echo>maven.build.timestamp = ${maven.build.timestamp}</echo>
</target>
...
</build>
</project>
Ausführungsergebnis
[echo] project.basedir = F:\tmp\maven\hello
[echo] project.baseUri = file:///F:/tmp/maven/hello/
[echo] maven.build.timestamp = 2020-03-04T13:45:10Z
--Die folgenden drei Variablen sind implizit als ** Spezielle Variablen ** definiert.
- project.basedir
project.baseUri
--project.basedir wird durch URI dargestelltmaven.build.timestampmaven.build.timestamp.format deklarieren, können Sie das Format von maven.build.timestamp beliebig angeben.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<properties>
<maven.build.timestamp.format>yyyy/MM/dd HH:mm:ss</maven.build.timestamp.format>
</properties>
<build>
...
<echo>maven.build.timestamp = ${maven.build.timestamp}</echo>
...
</build>
</project>
Ausführungsergebnis
[echo] maven.build.timestamp = 2020/03/04 13:49:49+00:00
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<properties>
<foo>FOO!!</foo>
<fizz.buzz>FIZZ.BUZZ!?</fizz.buzz>
<hoge-fuga>HOGE-FUGA??</hoge-fuga>
</properties>
<build>
...
<echo>foo = ${foo}</echo>
<echo>fizz.buzz = ${fizz.buzz}</echo>
<echo>hoge-fuga = ${hoge-fuga}</echo>
<echo>FOO = ${FOO}</echo>
...
</build>
</project>
Ausführungsergebnis
[echo] foo = FOO!!
[echo] fizz.buzz = FIZZ.BUZZ!?
[echo] hoge-fuga = HOGE-FUGA??
[echo] FOO = ${FOO}
-und . können im Namen enthalten seinxml.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
...
<echo>hoge = ${env.hoge}</echo>
<echo>Hoge = ${env.Hoge}</echo>
<echo>HOGE = ${env.HOGE}</echo>
...
</build>
</project>
Ausführungsergebnis(Unter Windows)
> set Hoge=Hello
> mvn antrun:run
...
[echo] hoge = ${env.hoge}
[echo] Hoge = ${env.Hoge}
[echo] HOGE = Hello
...
Ausführungsergebnis(Unter Linux)
$ export Hoge=Hello
$ mvn antrun:run
...
[echo] hoge = ${env.hoge}
[echo] Hoge = Hello
[echo] HOGE = ${env.HOGE}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<properties>
<foo.bar>foo-bar</foo.bar>
<fizz.buzz>fizz-buzz</fizz.buzz>
</properties>
<build>
...
<echo>java.version = ${java.version}</echo>
<echo>java.vm.vendor = ${java.vm.vendor}</echo>
<echo>foo.bar = ${foo.bar}</echo>
<echo>fizz.buzz = ${fizz.buzz}</echo>
...
</build>
</project>
Ausführungsergebnis
> mvn antrun:run -Dfoo.bar=FOO-BAR
...
[echo] java.version = 11.0.6
[echo] java.vm.vendor = AdoptOpenJDK
[echo] foo.bar = FOO-BAR
[echo] fizz.buzz = fizz-buzz
groupIdpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
</project>
--<Abhängigkeit>unter<Abhängigkeiten>zeigt auf ein Artefakt
Pom, wenn ein Remote-Repository angegeben ist.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<repositories>
<repository>
<id>my-private-repository</id>
<name>My Private Repository</name>
<url>http://private.repository.host/repository</url>
<layout>default</layout>
</repository>
</repositories>
</project>
** Proxy-Bild **

In Maven erfolgt die gesamte Verarbeitung über das ** Plugin **.
Der Prozess zum Kompilieren von Java-Quellcode wird beispielsweise von maven-compiler-plugin bereitgestellt.
Eine Liste der vom Maven-Projekt selbst bereitgestellten Basis-Plugins finden Sie unter Maven - Verfügbare Plugins.
Es gibt zwei Möglichkeiten, um die Ziele eines Plug-Ins auszuführen.
Die Methode zur Verknüpfung mit der zweiten Phase wird aufgehoben, und die Methode zur direkten Angabe von 1 wird zuerst bestätigt.
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
Führen Sie das JDEPS-Plug-In aus
> mvn org.apache.maven.plugins:maven-jdeps-plugin:3.1.2:jdkinternals
...
classes -> java.base
example -> java.io java.base
example -> java.lang java.base
...
<voll qualifizierter Name>ist hier org.apache.maven.plugins: maven-jdeps-plugin: 3.1.2,――Da es schwierig ist, jedes Mal den vollständig qualifizierten Namen einzugeben, können Sie auch die folgende Beschreibung weglassen.
Wenn weggelassen
> mvn jdeps:jdkinternals
...
classes -> java.base
example -> java.io java.base
example -> java.lang java.base
...
:) [^ 4] unterschieden.: gibt, geben Sie mit dem vollständig qualifizierten Namen groupId: artefaktId: version: target an.
--Wenn es zwei : gibt, geben Sie groupId: ArtefaktId: Ziel ohne die Versionsnummer an.
--Wenn es nur ein : gibt, geben Sie mit dem Präfix Präfix: Ziel angroupdId eine der folgenden sein:
org.apache.maven.pluginorg.codehaus.mojomaven-metadata.xml) für jede groupId anxml:org.apache.maven.Plugin Maven-metadata-xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<plugins>
<plugin>
<name>Apache Maven ACR Plugin</name>
<prefix>acr</prefix>
<artifactId>maven-acr-plugin</artifactId>
</plugin>
...
<plugin>
<name>Apache Maven JDeps Plugin</name>
<prefix>jdeps</prefix>
<artifactId>maven-jdeps-plugin</artifactId>
</plugin>
...
</plugins>
</metadata>
--Finden Sie in dieser maven-metadata.xml eine Übereinstimmung, die dem in der Befehlszeile angegebenen Präfix entspricht, und setzen Sie diese <artifactId> auf artefaktId.
maven-metadata.xml) für jede Artefakt-IDmaven-jdeps-Plugin Maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<versioning>
<latest>3.1.2</latest>
<release>3.1.2</release>
<versions>
<version>3.0.0</version>
<version>3.1.0</version>
<version>3.1.1</version>
<version>3.1.2</version>
</versions>
<lastUpdated>20190619052916</lastUpdated>
</versioning>
</metadata>
<release>) festgelegten Wert auf version
--Wenn es keine Release-Version gibt, soll die neueste Version (<latest>) [^ 5] version sein.groupId , artefaktId und version sind vollständig qualifizierte Namen.
groupId : org.apache.maven.pluginartifactId : maven-jdeps-pluginversion : 3.1.2[^ 4]: Genau genommen wird eine Spezifikation wie compiler :::: compile auch als Präfixspezifikation beurteilt, aber hier wird die Anzahl der Doppelpunkte aus Gründen der Klarheit verwendet (für Details [MojoDescriptorCreator-Implementierung] Siehe](https://github.com/apache/maven/blob/maven-3.6.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java#L141) )
[^ 5]: <release> ist die neueste Version in der Release-Version, während <latest> auf die neueste Version verweist, einschließlich Snapshots.
-In der Methode von ↑ wird die Version des Plug-Ins anhand der Metadaten festgelegt.
groupId entweder org.apache.maven.plugin oder org.codehaus.mojo ist [^ 6][^ 6]: Genau genommen können Sie die "groupId" hinzufügen, nach der "
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.8</version>
</plugin>
</plugins>
</build>
</project>
<plugin>ist unter<build> <plugins>aufgeführtasciidoctor-mavne-plugin auf 1.5.8.asciidoctor-maven-Plugin ausführen
> mvn asciidoctor:process-asciidoc
...
[INFO] BUILD SUCCESS
...
-Wenn das Plug-In wie in ↑ durch <Plugin> angegeben wird, ändert sich die Methode zum Auflösen des vollständig qualifizierten Namens aus der Präfixspezifikation geringfügig.
plugin.xml jedes Plugins, das explizit in pom.xml festgelegt ist.plugin.xml von asciidoctor-mavne-plugin folgendermaßen aus:asciidoctor-maven-Plugin Plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by maven-plugin-tools 3.5 on 2019-03-30 -->
<plugin>
<name>Asciidoctor Maven Plugin and Doxia Parser</name>
<description>Asciidoctor Maven Plugin and Doxia Parser (for Maven Site integration)</description>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.8</version>
<goalPrefix>asciidoctor</goalPrefix>
<isolatedRealm>false</isolatedRealm>
<inheritedByDefault>true</inheritedByDefault>
...
<goalPrefix> festgelegte Wert
--Die Plugins groupId und artefaktId, deren Wert dem in der Befehlszeile angegebenen Präfix entspricht, werden übernommen.maven-metadata.xml) für jede Artefakt-ID bestimmt (dieselbe Methode wie wenn kein Plug-In angegeben ist).arifactId und Präfix im Wesentlichen nichts miteinander zu tun haben.artefaktId`` maven-XXX-plugin ist, ist XXX das PräfixartefaktId`` XXX-Maven-Plugin ist, ist XXX das Präfix
――Dies sind die Ergebnisse der Empfehlung solcher Namensregeln, und dies bedeutet nicht, dass Sie ohne diesen Namen kein Plug-In erstellen können.artefaktId`` foo-maven-plugin ist, können Sie sich das Präfix als foo vorstellen (glaube ich)pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>Hello World!!</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
main:
[echo] Hello World!!
...
--Plug-In-Einstellungen (** Parameter **) können mit dem Tag
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn help:describe
...
Name: Apache Maven AntRun Plugin
Description: Runs Ant scripts embedded in the POM
Group Id: org.apache.maven.plugins
Artifact Id: maven-antrun-plugin
Version: 1.8
Goal Prefix: antrun
This plugin has 2 goals:
antrun:help
Description: Display help information on maven-antrun-plugin.
Call mvn antrun:help -Ddetail=true -Dgoal=<goal-name> to display parameter
details.
antrun:run
Description: Maven AntRun Mojo.
This plugin provides the capability of calling Ant tasks from a POM by
running the nested Ant tasks inside the <tasks/> parameter. It is
encouraged to move the actual tasks to a separate build.xml file and call
that file with an <ant/> task.
For more information, run 'mvn help:describe [...] -Ddetail'
...
beschreiben Wie Sie auf der Zielbeschreibungsseite sehen können, können Sie das Ziel mit <Ziel> eingrenzen und Details (Parameter, die für jedes Ziel angegeben werden können) mit <detail> ausgeben.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<goal>run</goal>
<detail>true</detail>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn help:describe
...
antrun:run
Description: Maven AntRun Mojo.
...
Implementation: org.apache.maven.plugin.antrun.AntRunMojo
Language: java
Available parameters:
...
target
The XML for the Ant target. You can add anything you can add between
<target> and </target> in a build.xml.
...
...
-Obwohl das Beispiel von ↑ weggelassen wird, werden alle Parameter mit Erläuterungen ausgegeben.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn help:describe -Dplugin=antrun
...
Name: Apache Maven AntRun Plugin
Description: Runs Ant scripts embedded in the POM
Group Id: org.apache.maven.plugins
Artifact Id: maven-antrun-plugin
Version: 1.8
Goal Prefix: antrun
This plugin has 2 goals:
antrun:help
Description: Display help information on maven-antrun-plugin.
...
antrun:run
Description: Maven AntRun Mojo.
...
For more information, run 'mvn help:describe [...] -Ddetail'
...
---Dplugin = antrun wird bei der Ausführung von Maven als Systemeigenschaft angegeben
plugin finden Sie unter Dokumentation.plugin stimmt einfach überein, wie antrun skip Einige sind es nicht
--Hier bedeutet ** Eigenschaften **, dass Sie nicht nur Systemeigenschaften, sondern auch pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<properties>
<plugin>jdeps</plugin>
</properties>
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
</project>
<Eigenschaften> wird jdeps im Plugin gesetzt.Ausführungsergebnis (wenn das Plugin nicht in den Systemeigenschaften angegeben ist)
> mvn help:describe
...
Name: Apache Maven JDeps Plugin
Description: The JDeps Plugin uses the jdeps tool to analyze classes for
internal API calls.
Group Id: org.apache.maven.plugins
Artifact Id: maven-jdeps-plugin
Version: 3.1.2
Goal Prefix: jdeps
...
Ausführungsergebnis (wenn Plugin in den Systemeigenschaften angegeben ist)
> mvn help:describe -Dplugin=antrun
...
Name: Apache Maven AntRun Plugin
Description: Runs Ant scripts embedded in the POM
Group Id: org.apache.maven.plugins
Artifact Id: maven-antrun-plugin
Version: 1.8
Goal Prefix: antrun
...
<Eigenschaften> (jdeps) angegebene Wert übernommen.antrun) übernommen.――Selbst wenn Sie kurz gesagt "bauen" sagen, umfasst der Inhalt verschiedene Prozesse.
--Maven hat standardmäßig die folgenden drei Lebenszyklen.
- default
- clean
- site
validateinitializegenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resourcescompileprocess-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resourcestest-compileprocess-test-classestestprepare-packagepackagepre-integration-testintegration-testpost-integration-testverifyinstalldeploy--clean Lifecycle definiert einen Lebenszyklus, der Projektartefakte löscht
--clean Der Lebenszyklus besteht aus folgenden Phasen
1. pre-clean
2. clean
3. post-clean
--site Lifecycle definiert den Lebenszyklus der Generierung von Projektwebsites
pre-sitesitepost-sitesite-deploy** Plug-In reinigen **
| Phase | Plugin | Tor |
|---|---|---|
pre-clean |
- | - |
clean |
maven-clean-plugin |
clean |
post-clean |
- | - |
** Site-Plug-In **
| Phase | Plugin | Tor |
|---|---|---|
pre-site |
- | - |
site |
maven-site-plugin |
site |
post-site |
- | - |
site-deploy |
maven-site-plugin |
deploy |
--Das heißt, wenn Sie die "Clean" -Phase ausführen, wird das "Clean" -Ziel des "Maven-Clean-Plugins" ausgeführt.
packaging
-Packaging ist ein Einstellungswert, der bestimmt, wie das Projekt verpackt wird, und einer der folgenden Werte kann angegeben werden.
- pom
- jar
- ejb
- maven-plugin
- war
- ear
- rar
--Diese Verpackung ist in pom.xml wie folgt angegeben:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<packaging>jar</packaging>
...
</project>
--default Die mit den Lebenszyklusphasen verbundenen Ziele unterscheiden sich je nach Verpackung wie folgt:
pom
| Phase | Plugin | Tor |
|---|---|---|
install |
maven-install-plugin |
install |
deploy |
maven-deploy-plugin |
deploy |
jar
| Phase | Plugin | Tor |
|---|---|---|
process-resources |
maven-resources-plugin |
resources |
compile |
maven-compiler-plugin |
compile |
process-test-resources |
maven-resources-plugin |
testResources |
test-compile |
maven-compiler-plugin |
testCompile |
test |
maven-surefire-plugin |
test |
package |
maven-jar-plugin |
jar |
install |
maven-install-plugin |
install |
deploy |
maven-deploy-plugin |
deploy |
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>example</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
Führen Sie die Testphase aus
> mvn test
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello ---
...
--Phase kann ausgeführt werden, indem es im Argument des Befehls mvn angegeben wird.
maven-resources-plugin: resources, maven-compiler-plugin: compile, ... ausgeführt werden.
--Wenn eine Phase ausgeführt wird, werden alle mit dieser Phase verbundenen Ziele ausgeführt.
-- Maven-Resources-Plugin: Resources Das Ziel ist in der Phase Resources,
maven-compiler-plugin: compile Das Ziel ist an die Phase compile gebunden> mvn clean compiler:compile
--Mehr Phasen und Ziele können im Befehl mvn angegeben und ausgeführt werden.
clean → compiler: compile.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<target>
<echo>Hello Antrun!!</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn compile
...
[INFO] --- maven-antrun-plugin:1.8:run (default) @ hello ---
[INFO] Executing tasks
main:
[echo] Hello Antrun!!
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<version>3.2.6</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>jdkinternals</goal>
<goal>test-jdkinternals</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn verify
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello ---
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello ---
...
[INFO] --- maven-jdeps-plugin:3.1.2:jdkinternals (default) @ hello ---
...
[INFO] --- maven-jdeps-plugin:3.1.2:test-jdkinternals (default) @ hello ---
jdkinternals → test-jdkinternals ausgeführt.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>foo</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>bar</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<target>
<echo>Hello Antrun!!</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn compile
...
[INFO] --- maven-antrun-plugin:1.8:run (foo) @ hello ---
...
[echo] Hello Antrun!!
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-antrun-plugin:1.8:run (bar) @ hello ---
...
[echo] Hello Antrun!!
...
(foo) Teil von maven-antrun-plugin: 1.8: run (foo))pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>foo</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>VALIDATE!!</echo>
</target>
</configuration>
</execution>
<execution>
<id>bar</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>COMPILE!!</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn compile
...
[INFO] --- maven-antrun-plugin:1.8:run (foo) @ hello ---
...
[echo] VALIDATE!!
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-antrun-plugin:1.8:run (bar) @ hello ---
...
[echo] COMPILE!!
...
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<target>
<echo>Hello @ default-cli</echo>
</target>
</configuration>
</execution>
<execution>
<id>validate-phase</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>Hello @ validate-phase</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] Hello @ default-cli
...
> mvn validate
...
[echo] Hello @ validate-phase
...
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<target>
<echo>Hello default-cli!!</echo>
</target>
</configuration>
</execution>
<execution>
<id>foo</id>
<configuration>
<target>
<echo>Hello Foo!!</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] Hello default-cli!!
> mvn antrun:run@foo
...
[echo] Hello Foo!!
antrun: run ausführen, wird default-cli ausgeführt.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn verify
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello ---
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello ---
...
[INFO] --- maven-checkstyle-plugin:3.1.1:check (default) @ hello ---
――Sie können im Projekt eine Eltern-Kind-Beziehung haben
Ordnerstruktur
|-pom.xml
`-child/
`-pom.xml
/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>artifactId = ${project.artifactId}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
/child/pom.xml
<?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>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child</artifactId>
</project>
<parent>gibt groupId, artefaktId, version an, um das übergeordnete POM zu identifizierenAusführungsergebnis (oberster Ordner)
> mvn antrun:run
...
[echo] artifactId = parent
Ausführungsergebnis (untergeordneter Ordner)
> mvn antrun:run
...
[echo] artifactId = child
--Parent pom.xml mit <parent> wird in der folgenden Reihenfolge durchsucht:
<relativePath> nicht angegeben ist, verweisen Sie auf pom.xml von ** eine Ebene höher **Ordnerstruktur
|-parent/
| `-pom.xml
`-child/
`-pom.xml
--parent und child stehen nebeneinander, und pom.xml des übergeordneten Projekts existiert nicht über dem untergeordneten Projekt.
Ausführungsergebnis (untergeordnetes Projekt)
> mvn antrun:run
...
[FATAL] Non-resolvable parent POM for example:child:1.0.0: Failure to find example:parent:pom:1.0.0 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 6, column 11
@
...
/child/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>child</artifactId>
</project>
Ausführungsergebnis (untergeordnetes Projekt)
> mvn antrun:run
...
[echo] artifactId = child
Eltern pom.xml
<?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</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<properties>
<hoge>PARENT</hoge>
<fuga>PARENT</fuga>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>parent/dir</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>hoge = ${hoge}</echo>
<echo>fuga = ${fuga}</echo>
<echo>piyo = ${piyo}</echo>
<echo>dependencies[0].artifactId = ${project.dependencies[0].artifactId}</echo>
<echo>dependencies[1].artifactId = ${project.dependencies[1].artifactId}</echo>
<echo>resources[0].directory = ${project.build.resources[0].directory}</echo>
<echo>resources[1].directory = ${project.build.resources[1].directory}</echo>
<echo>plugins[0] = ${project.build.plugins[0].id}</echo>
<echo>plugins[1] = ${project.build.plugins[1].id}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Kind pom.xml
<?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>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child</artifactId>
<properties>
<fuga>CHILD</fuga>
<piyo>CHILD</piyo>
</properties>
<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.14</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>child/dir</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis (übergeordnetes Projekt)
> mvn antrun:run
...
[echo] hoge = PARENT
[echo] fuga = PARENT
[echo] piyo = ${piyo}
[echo] dependencies[0].artifactId = commons-lang3
[echo] dependencies[1].artifactId = ${project.dependencies[1].artifactId}
[echo] resources[0].directory = parent/dir
[echo] resources[1].directory = ${project.build.resources[1].directory}
[echo] plugins[0] = org.apache.maven.plugins:maven-antrun-plugin:1.8
[echo] plugins[1] = ${project.build.plugins[1].id}
Ausführungsergebnis (untergeordnetes Projekt)
> mvn antrun:run
...
[echo] hoge = PARENT
[echo] fuga = CHILD
[echo] piyo = CHILD
[echo] dependencies[0].artifactId = commons-codec
[echo] dependencies[1].artifactId = commons-lang3
[echo] resources[0].directory = child/dir
[echo] resources[1].directory = ${project.build.resources[1].directory}
[echo] plugins[0] = org.apache.maven.plugins:maven-antrun-plugin:1.8
[echo] plugins[1] = org.apache.maven.plugins:maven-jdeps-plugin:3.1.2
<Abhängigkeiten>, <Plugins> usw.) bei der Einstellung mehrerer Werte auf dem übergeordneten POM und das Element des untergeordneten POM wird hinzugefügt.ModelMerger MavenModelMerger org / apache / maven / model / merge / MavenModelMerger.java) scheint zu verschmelzen
--MavenModelMerger ist [mergeBuildBase_Resources ()](https://github.com/apache/maven/blob/maven-3.6.3/maven-model-builder/src/main/java/org/apache/maven/model Überschreiben von /merge/MavenModelMerger.java#L381), um den Inhalt des übergeordneten POM nur dann zusammenzuführen, wenn "--POMs haben eine Eltern-Kind-Beziehung. Wenn Sie mehrere POMs als Eltern haben, können Sie den endgültigen Status nicht einfach anhand der Terminal-POMs ermitteln.
maven-help-plugin verwendet werden.effective-Führen Sie das Pom-Ziel aus
> mvn help:effective-pom
...
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>example</groupId>
<artifactId>child</artifactId>
<version>1.0.0</version>
(Weggelassen, weil es lang ist)
...
--effective-pom Goal druckt das endgültige POM mit den Informationen aller übergeordneten POMs einschließlich des zusammengeführten Super-POMs.
――Wenn Sie dies betrachten, können Sie sehen, wie die Einstellungen dieses Projekts tatsächlich sind.
<Konfigurationen> Im Folgenden ist keine feste Schemadefinition festgelegt, da die Einstellungen für jedes Plug-In unterschiedlich sind.Übergeordnetes POM
...
<configuration>
<persons>
<person>
<name>Taro</name>
<age>18</age>
</person>
<person>
<name>Hanako</name>
<sex>female</sex>
</person>
</persons>
</configuration>
...
Kind POM
...
<configuration>
<persons>
<person>
<sex>male</sex>
</person>
<cat>nya-</cat>
<person>
<name>Ayako</name>
<age>15</age>
</person>
<person>
<name>Rin</name>
<age>12</age>
<sex>female</sex>
</person>
</persons>
</configuration>
...
Überprüfen Sie in diesem Zustand das Zusammenführungsergebnis mit "help: effektive-pom".
effective-pom
...
<configuration>
<persons>
<person>
<sex>male</sex>
<name>Taro</name>
<age>18</age>
</person>
<cat>nya-</cat>
<person>
<name>Ayako</name>
<age>15</age>
<sex>female</sex>
</person>
<person>
<name>Rin</name>
<age>12</age>
<sex>female</sex>
</person>
</persons>
</configuration>
...
――Es ist schwer in Worten zu erklären, aber Sie können sehen, dass sie auf nette Weise zusammengeführt werden. ――Wenn sich ein Tag mit demselben Namen an derselben Position befindet, wird der Inhalt wahrscheinlich rekursiv zusammengeführt.
――Ich bin der Meinung, dass selbst das Standardverhalten einigermaßen gut zusammengeführt werden kann. --Aber wenn dies ein Problem ist, können Sie das Standard-Zusammenführungsverhalten ändern.
Übergeordnetes POM
...
<configuration>
<persons>
<person>
<name>Taro</name>
<age>18</age>
</person>
<person>
<name>Hanako</name>
<sex>female</sex>
</person>
</persons>
</configuration>
...
--Parent POM hat sich nicht geändert
Kind POM
...
<configuration>
<persons>
<person combine.self="override">
<sex>male</sex>
</person>
<cat>nya-</cat>
<person combine.children="append">
<name>Ayako</name>
<age>15</age>
</person>
<person>
<name>Rin</name>
<age>12</age>
<sex>female</sex>
</person>
</persons>
</configuration>
...
combile.self =" override " und comb.children =" append "effective-pom
...
<configuration>
<persons>
<person combine.self="override">
<sex>male</sex>
</person>
<cat>nya-</cat>
<person combine.children="append">
<name>Hanako</name>
<sex>female</sex>
<name>Ayako</name>
<age>15</age>
</person>
<person>
<name>Rin</name>
<age>12</age>
<sex>female</sex>
</person>
</persons>
</configuration>
...
comb.children =" append " angegeben ist, wird das untergeordnete POM-Element einfach am Ende des übergeordneten POM-Elements hinzugefügt.combin. * Für verschachtelte Elemente auf die gleiche Weise angeben.Eltern pom.xml
<?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</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>validate</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<echo>Hello ${project.artifactId}</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
--Verwenden Sie
Kind 1 Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child1</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Kind 2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child2</artifactId>
</project>
――Dies verwendet kein Plug-In
Ausführungsergebnis (Kind 1)
> mvn validate
...
[INFO] ---------------------------< example:child1 >---------------------------
[INFO] Building child1 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.8:run (default) @ child1 ---
[INFO] Executing tasks
main:
[echo] Hello child1
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
Ausführungsergebnis (Kind 2)
> mvn validate
...
[INFO] ---------------------------< example:child2 >---------------------------
[INFO] Building child2 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
Eltern pom.xml
<?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</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
</project>
--Verwenden Sie
Kind 1 Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child1</artifactId>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
</project>
Kind 2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child2</artifactId>
</project>
--Dies definiert keine Abhängigkeiten
Ausführungsergebnis (wirksam von Kind 1-pom)
> mvn help:effective-pom
...
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
</dependencies>
...
--commons-io wird in der im übergeordneten POM festgelegten Version angewendet
Ausführungsergebnis (gültig ab Kind 2)-pom)
> mvn help:effective-pom
...
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
</dependencies>
...
commons-io-Abhängigkeit wird nicht angewendetOrdnerstruktur
|-pom.xml
`-sub/
`-pom.xml
Aggregationsquelle pom.xml
<?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</groupId>
<artifactId>root</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>sub</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>Hello ${project.artifactId}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Pom aggregiert werden.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>example</groupId>
<artifactId>sub</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>Hello ${project.artifactId}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
--Schreiben Sie pom.xml, um es normal zu aggregieren
Ausführungsergebnis (im Aggregationsquellprojekt ausgeführt)
> mvn antrun:run
...
main:
[echo] Hello sub
...
main:
[echo] Hello root
...
Ordnerstruktur
|-pom.xml
`-child/
`-pom.xml
Eltern pom.xml
<?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</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>child</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>Hello ${project.artifactId}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Kind pom.xml
<?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>
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child</artifactId>
</project>
Ausführungsergebnis (im übergeordneten Projekt ausgeführt)
> mvn antrun:run
...
main:
[echo] Hello parent
...
main:
[echo] Hello child
...
resources:resourcescompiler:compileresources:testResourcescompiler:testCompilesurefire:testjar:jarinstall:installdeploy:deploy
―― Sehen Sie sich nacheinander an, was jedes Ziel tut--Das erste, was ausgeführt wird, ist das [Ressourcenziel] des maven-resources-plugin (https://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html).
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
--Überprüfen Sie mit der Mindestkonfiguration pom.xml
Ordnerstruktur
|-pom.xml
`-src/main/
|-java/
| `example/
| `-App.java
`-resources/
|-hoge.txt
`-foo/
`-bar.txt
--Dateien und Ordner sind entsprechend unter "src / main / resources" angeordnet
Befehlsausführung
> mvn resources:resources
...
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ hello ---
...
[INFO] BUILD SUCCESS
--Ressourcen: Ressourcen Ziele direkt ausführen
Ordnerstruktur nach der Ausführung
|-pom.xml
|-src/main/
| |-java/
| | `example/
| | `-App.java
| `-resources/
| |-hoge.txt
| `-foo/
| `-bar.txt
`-target/classes/
|-hoge.txt
`-foo/
`-bar.txt
maven-resources-plugin ermöglicht das Kopieren des Ressourcenordners des Projekts in den Ausgabeordner.src / main / resourcesZiel / Klassen$ {project.build.directory} / classes gesetztpom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<resources>
<resource>
<directory>src/main/hoge</directory>
</resource>
</resources>
</build>
</project>
Ordnerstruktur
|-pom.xml
`-src/main/
|-hoge/
| |-fizz.txt
| `-hoge/
| `-fuga.txt
|
`-resources/
|-buzz.txt
`-foo/
`-bar.txt
Ressourcenziel ausführen
> mvn resources:resources
...
Ausführungsergebnis
|-pom.xml
|-src/main/
| |-hoge/
| | |-fizz.txt
| | `-hoge/
| | `-fuga.txt
| |
| `-resources/
| |-buzz.txt
| `-foo/
| `-bar.txt
|
`-target/classes/
|-fizz.txt
`-hoge/
`-fuga.txt
--src / main / hoge Es wurde geändert, sodass nur das Folgende kopiert wird
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
--Überprüfen Sie mit der Mindestkonfiguration POM
Ordnerstruktur
|-pom.xml
`-src/main/java
`-example/
`-Hello.java
Hello.javaKompilierungsziel ausführen
> mvn compiler:compile
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-cli) @ hello ---
...
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR]Quelloption 5 wird derzeit nicht unterstützt. Bitte verwenden Sie 6 oder höher.
[ERROR]Zieloption 1.5 wird derzeit nicht unterstützt. 1.Bitte verwenden Sie 6 oder höher.
maven-compiler-plugin ist die Versionsspezifikation von -source und -target standardmäßig [1.5](https://github.com/apache/maven-compiler- Plugin / Blob / Maven-Compiler-Plugin-3.1 /src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java#L120)maven-compiler-plugins zum Zeitpunkt der Bestätigung [1.6](https://github.com/apache/maven-compiler-plugin/blob/maven-compiler-plugin-3.8. 1 / src / main / java / org / apache / maven / plugin / compiler / AbstractCompilerMojo.java # L100) ist die Standardeinstellungpom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>
source mit maven-compiler-plugin anzugeben, verwenden Sie source parameter. einstellentarget, das mit der Eigenschaft maven.compiler.target festgelegt werden kann.Ausführungsergebnis
> mvn compiler:compile
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-cli) @ hello ---
...
[WARNING] File encoding has not been set, using platform encoding MS932, i.e. build is platform dependent!
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
...
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn compiler:compile
...
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-cli) @ hello ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ausgabeergebnis
|-pom.xml
|-src/main/java/
| :
`-target/
|-classes/
: `-example/
`-Hello.class
readonly = true gesetzt ist, kann dieses Feld nicht direkt von außen gesetzt werden.defaultValue ansehen, können Sie sehen, dass $ {project.compileSourceRoots} gesetzt ist.
--Aber wenn ich versuche, auf diese Eigenschaft namens "project.compileSourceRoots" in pom.xml zu verweisen, kann ich den Wert nicht sehen.
--compileSourceRoots ist MavenProject # L131) Als Klassenfeld deklariert$ {project.basedir} / src / main / java wird in project.build.sourceDirectory von Super POM festgelegt.
――Wenn Sie sich diesen Mechanismus ansehen, können Sie davon ausgehen, dass Sie nicht mehrere Quellordner festlegen können.compiler: compile Folgendes:
--Kompilieren Sie den Java-Quellcode unter "$ {project.basedir} / src / main / java" und geben Sie ihn in "$ {project.basedir} / target / classes" aus
Die Optionen "-source" und "-target" von --javac können mit den Eigenschaften "maven.compiler.source" und "maven.compiler.target" angegeben werdenproject.build.sourceEncoding angegeben werden.Ordnerstruktur
|-pom.xml
`-src/test/
|-java/
| `-example/
| `-HelloTest.java
|
`-resources/
|-foo/
| `-bar.txt
`-fizz.txt
src / test / java,
Platzieren Sie die Testressourcendateien unter "src / test / resources"pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>
--pom.xml ist dasselbe wie für compiler: compile
Lauf
> mvn resources:testResources compiler:testCompile
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-cli) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-cli) @ hello ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
Ausführungsergebnis
|-pom.xml
|-src/test/
| :
`-target/
`-test-classes/
|-fizz.txt
|-foo/
| `-bar.txt
`-example/
`-HelloTest.class
――Wenn organisiert, ist die Operation wie folgt.
--Nächste, um den kompilierten Testcode auszuführen, [Testziel](https: //) von maven-surefire-plugin maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html) wird ausgeführt.
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
</project>
Ordnerstruktur
|-pom.xml
`-src/
|-main/java/
| `-example/
| `-Hello.java
`-test/java/
`-example/
`-HelloTest.java
Hello.java) und die Testklasse ( HelloTest.java)Lauf
> mvn test
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ hello ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running example.HelloTest
...
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 s - in example.HelloTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
> dir /b target\surefire-reports
example.HelloTest.txt
TEST-example.HelloTest.xml
safefire: test alleine auszuführen, aber in diesem Fall muss die Quelle separat kompiliert werden.**/Test*.java**/*Test.java**/*Tests.java**/*TestCase.java
--Testergebnisse werden im Text- und XML-Format unter "Ziel- / todsichere Berichte" gedruckt
--Dies wird im Ziel "safefire: test" Berichtsparameter angegeben (Standard ist) $ {project.build.directory} / todsichere Berichte)--Nach der "Test" -Phase wird die "Paket" -Phase ausgeführt, die das Kompilierungsergebnis des Projekts in einem Glas einfriert.
Ausführungsergebnis
> mvn -DskipTests package
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello ---
[INFO] Tests are skipped.
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello ---
...
--surefire: test Das Ziel hat einen Parameter namens skipTests.
maven-surefire-plugin ausgeführtpom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>
Ordnerstruktur
|-pom.xml
`-src/
|-test/
| :
`-main/
|-java/
| `-example/
| `-Hello.java
`-resources/
`-hoge.txt
Führen Sie die Paketphase aus
> mvn package
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hello ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello ---
...
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hello ---
...
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ hello ---
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ausführungsergebnis
|-pom.xml
|-src/
| :
`-target/
|-hello-1.0.0.jar
:
--hello-1.0.0.jar wird direkt unter dem Ordner target ausgegeben.
text:hello-1.0.0.Inhalt des Glases
|-hoge.txt
|-example/
| `-Hello.class
`-META-INF/
|-MANIFEST.MF
`-maven/example/hello/
|-pom.properties
`-pom.xml
--hoge.txt und Hello.class werden mit der Ausgabe unter target / classes von resources: resources bzw. compiler: compile gepackt.
--Welcher Ordnerinhalt in ein JAR gepackt wird, wird durch den Parameter classesDirectory des JAR-Ziels festgelegt. Ist gewesen
META-INF ausgegeben, aber der Inhalt ist der gleiche wie pom.xml dieses Projekts.MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.6.3
Built-By: xxxxx
Build-Jdk: 11.0.6
pom.properties
#Generated by Maven
#Sun Mar 29 21:59:48 JST 2020
groupId=example
artifactId=hello
version=1.0.0
--Diese werden im Parameter archive des JAR-Ziels festgelegt.
${project.artifactId}-${project.version}${project.basedir}/target${project.basedir}/target/classespom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
...
</project>
Führen Sie install aus
> mvn install
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
settings.xml einen anderen Speicherort angegeben haben, diesenLokales Repository
Lokales Repository/
|-example/
: `-hello/
|-1.0.0/
: |-hello-1.0.0.jar
:
install: install In der Zieldokumentation stand "Hauptartefakt des Projekts", aber ich konnte keine klare Beschreibung des Hauptartefakts des Projekts finden.pom.xml
<?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</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>example</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>
hello-1.0.0.jar mit <Abhängigkeiten>Foo.java
package example;
public class Foo {
public static void main(String... args) {
new Hello().hello();
}
}
Kompilieren Sie das Projekt
> mvn compile
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ foo ---
...
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ foo ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
--Kompiliert (Hallo Klasse wurde aufgelöst)
--deploy Goal stellt Projektartefakte in einem Remote-Repository bereit
―― Ich bin der Meinung, dass es nur wenige Möglichkeiten gibt, es tatsächlich zu verwenden, obwohl es schwierig ist, eine Umgebung zu erstellen. </ Del> Die Überprüfung wird weggelassen.
Sehen Sie, wie Ihr Projekt erstellt wird, wenn Sie --packaging auf war setzen
Ordnerstruktur
|-pom.xml
`-src/main/
|-java/
| `-example/webapp/
| `-HelloServlet.java
`-webapp/
`-WEB-INF/
`-hello.jsp
--Erstellte einen Ordner mit dem Namen "src / main / webapp" und erstellte einen Ordner wie "WEB-INF", der in "war" darunter aufgenommen werden soll.
pom.xml
<?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</groupId>
<artifactId>webapp</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
</project>
--war ist angegeben für<packaging>
Bauen
> mvn package
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ webapp ---
...
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ webapp ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ webapp ---
...
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ webapp ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ webapp ---
...
[INFO] --- maven-war-plugin:3.2.3:war (default-war) @ webapp ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ausgabeergebnis
|-pom.xml
|-src/
| :
`-target/
`-webapp-1.0.0.war
war-Ziels angegeben (https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputDirectory) und ist standardmäßig$ Es ist {project.build.directory}webapp-1.0.0.war ist wie folgttext:webapp-1.0.0.Der Inhalt des Krieges
webapp-1.0.0.war/
|-WEB-INF/
| |-hello.jsp
| |-classes/
| | `-example/webapp/
| | `-HelloServlet.class
| `-lib/
| `-commons-lang3-3.10.jar
`-META-INF/
|-MANIFEST.MF
`-maven/example/webapp/
|-pom.properties
`-pom.xml
src / main / webapp.
--Dies wird im [warSourceDirectory-Parameter] des war-Ziels angegeben (https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#warSourceDirectory) und ist standardmäßig $ { basedir} / src / main / webappHello.java
package example;
import java.util.Arrays;
public class Hello {
public static void main(String... args) {
System.out.println("Hello World! args=" + Arrays.toString(args));
}
}
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<mainClass>example.Hello</mainClass>
<arguments>
<argument>one</argument>
<argument>two</argument>
<argument>three</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Lauf
> mvn compile exec:java
...
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ hello ---
Hello World! args=[one, two, three]
...
--Hello.java wurde ausgeführt
--Mit dem exec-maven-plugin Java-Ziel können Sie das Projekterstellungsergebnis in den Klassenpfad einfügen. Kann Java-Programme ausführen
--exec-maven-plugin hat auch ein exec-Ziel, mit dem Sie beliebige Befehle ausführen können. Hier weggelassen
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<mainClass>example.Hello</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn compile exec:java -Dexec.args="ONE TWO THREE"
...
Hello World! args=[ONE, TWO, THREE]
compileprovidedruntimetestsystemimportpom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.12</version>
<scope>runtime</scope>
</dependency>
pom.xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.1</version>
<scope>test</scope>
</dependency>
--test scope wird für Abhängigkeiten verwendet, die nur beim Kompilieren und Ausführen der Testquelle verwendet werden.
pom.xml
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
Ordnerstruktur
|-foo/
| `-pom.xml
`-bar/
`-pom.xml
pom.xml(foo)
<?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</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
org.apache.commons:commons-lang3:3.10org.apache.commons:commons-text:1.8pom.xml(bar)
<?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</groupId>
<artifactId>bar</artifactId>
<version>1.0.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
org.apache.commons:commons-lang3:3.9org.apache.commons:commons-csv:1.8effective-Bestätigung von pom(bar)
> cd bar
> mvn help:effective-pom
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</dependencyManagement>
| artifactId | foo | bar | effective-pom |
|---|---|---|---|
commons-lang3 |
3.10 |
3.9 |
3.9 |
commons-csv |
- | 1.8 |
1.8 |
commons-text |
1.8 |
- | 1.8 |
--Derklärungen von Abhängigkeiten zum foo-Projekt sind verschwunden und stattdessen wurden die in <dependencyManagement> des foo-Projekts deklarierten Abhängigkeiten hinzugefügt.
commons-lang3).BOM

○ gibt an, dass sich das Ziel auf die Abhängigkeit des entsprechenden Bereichs bezieht und diese verwendet.war: war bedeutet dies, ob es in die generierte Kriegsdatei gepackt wird.pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
</project>
spring-web und spring-jdbc abhängen.Ausführungsergebnis
> mvn dependency:tree
...
[INFO] +- org.springframework:spring-web:jar:5.2.5.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:5.2.5.RELEASE:compile
[INFO] | \- org.springframework:spring-core:jar:5.2.5.RELEASE:compile
[INFO] | \- org.springframework:spring-jcl:jar:5.2.5.RELEASE:compile
[INFO] \- org.springframework:spring-jdbc:jar:5.2.5.RELEASE:compile
[INFO] \- org.springframework:spring-tx:jar:5.2.5.RELEASE:compile
...
spring-jdbc von spring-tx abhängtAusführungsergebnis
> mvn dependency:copy-dependencies
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
> dir /b target\dependency
spring-beans-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar
spring-jdbc-5.2.5.RELEASE.jar
spring-tx-5.2.5.RELEASE.jar
spring-web-5.2.5.RELEASE.jar
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<profiles>
<profile>
<id>foo</id>
<properties>
<message>foo profile!!</message>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
</dependencies>
<build>
<directory>${project.basedir}/build</directory>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>message = ${message}</echo>
<echo>project.build.directory = ${project.build.directory}</echo>
<echo>dependency[0] = ${project.dependencies[0].artifactId}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
--<profiles> <profile>deklariert ein Profil namens foo
foo Profil legt Eigenschaften, Abhängigkeiten und project.build.directory fest.maven-antrun-plugin um diese Werte anzuzeigen.Ausführungsergebnis
> mvn antrun:run
...
[echo] message = ${message}
[echo] project.build.directory = F:\tmp\maven\hello\target
[echo] dependency[0] = ${project.dependencies[0].artifactId}
...
> mvn -P foo antrun:run
...
[echo] message = foo profile!!
[echo] project.build.directory = F:\tmp\maven\hello\build
[echo] dependency[0] = commons-lang3
foo -Profil festgelegten Inhalte nicht wiedergegeben.<Abhängigkeiten>, <build> usw.), so wie sie sind beschreiben.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>foo</id>
<properties>
<foo>FOO</foo>
<message>foo profile!!</message>
</properties>
</profile>
<profile>
<id>bar</id>
<properties>
<bar>BAR</bar>
<message>bar profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<configuration>
<target>
<echo>foo = ${foo}</echo>
<echo>bar = ${bar}</echo>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
message wird in beiden Profilen als dupliziert deklariertAusführungsergebnis
> mvn -P bar,foo antrun:run
...
[echo] foo = FOO
[echo] bar = BAR
[echo] message = bar profile!!
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>foo</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<message>foo profile!!</message>
</properties>
</profile>
<profile>
<id>bar</id>
<properties>
<message>bar profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
...
<configuration>
<target>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
foo Profil wird auf <activeByDefault> true </ activeByDefault> gesetztAusführungsergebnis
> mvn antrun:run
...
[echo] message = foo profile!!
...
> mvn -P bar antrun:run
...
[echo] message = bar profile!!
foo ist standardmäßig aktiviert-P ein anderes Profil angegeben wird, ist das Profil mit <activeByDefault> is true ungültig.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>foo</id>
<activation>
<property>
<name>foo</name>
</property>
</activation>
<properties>
<message>foo profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
...
<configuration>
<target>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] message = ${message}
...
> mvn -Dfoo antrun:run
...
[echo] message = foo profile!!
<Aktivierung> können Sie die Bedingungen definieren, um das Profil zu aktivieren.
--<Eigenschaft>kann unter der Bedingung angegeben werden, dass eine Systemeigenschaft deklariert oder ein bestimmter Wert festgelegt wird.Wenn der Wert der Systemeigenschaft ebenfalls in der Bedingung enthalten ist
<property>
<name>foo</name>
<value>enable</value>
</property>
Ausführungsergebnis
> mvn -Dfoo antrun:run
...
[echo] message = ${message}
...
> mvn mvn -Dfoo=enable antrun:run
...
[echo] message = foo profile!!
foo Profil ist nur aktiviert, wenn der Wert der Systemeigenschaft foo`` enable ist.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>jdk11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<message>jdk11 profile!!</message>
</properties>
</profile>
<profile>
<id>jdk14</id>
<activation>
<jdk>14</jdk>
</activation>
<properties>
<message>jdk14 profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
...
<configuration>
<target>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> java --version
openjdk 11.0.6 2020-01-14
...
> mvn antrun:run
...
[echo] message = jdk11 profile!!
...
> java --version
openjdk 14 2020-03-17
...
> mvn antrun:run
...
[echo] message = jdk14 profile!!
<jdk> verwenden, um die Java-Version zur Laufzeit zu einer Bedingung für die Profilanwendung zu machen.<jdk> beschriebene Bedingung ist präfixangepasst und wird mit der Java-Version verglichen.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<name>Windows 10</name>
</os>
</activation>
<properties>
<message>Windows profile!!</message>
</properties>
</profile>
<profile>
<id>Linux</id>
<activation>
<os>
<name>Linux</name>
</os>
</activation>
<properties>
<message>Linux profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
...
<configuration>
<target>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
--<Aktivierung>ist auf<os>gesetzt
Ausführungsergebnis(Windows)
> mvn antrun:run
...
[echo] message = Windows profile!!
Ausführungsergebnis(Linux)
> mvn antrun:run
...
[echo] message = Linux profile!!
<os>ermöglicht die Verwendung des Betriebssystems als Bedingung für die Profilanwendung zur Laufzeit
--<Name>hängt vom Namen des Betriebssystems ab<family>
--OS Typ<arch><version>
--OS VersionAusführungsergebnis
> mvn enforcer:display-info
...
[INFO] Maven Version: 3.6.3
[INFO] JDK Version: 11.0.6 normalized as: 11.0.6
[INFO] OS Info: Arch: amd64 Family: windows Name: windows 10 Version: 10.0
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>Exists</id>
<activation>
<file>
<exists>${basedir}/pom.xml</exists>
</file>
</activation>
<properties>
<message>Exists profile!!</message>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
...
<configuration>
<target>
<echo>message = ${message}</echo>
</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn antrun:run
...
[echo] message = Exists profile!!
<exists>wird unter der Bedingung festgelegt, dass die Datei vorhanden ist
--Verwenden Sie "$ {basedir} oder Systemeigenschaft / Anforderungseigenschaft? Es gibt eine Einschränkung, dass es nur verwendet werden kannpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>foo</id>
<properties>
<message>foo profile!!</message>
</properties>
</profile>
<profile>
<id>bar</id>
<properties>
<message>bar profile!!</message>
</properties>
</profile>
</profiles>
...
</project>
--foo, bar, zwei Profile sind definiert
Ausführungsergebnis
> mvn help:all-profiles
...
[INFO] Listing Profiles for Project: example:hello:jar:1.0.0
Profile Id: bar (Active: false , Source: pom)
Profile Id: foo (Active: false , Source: pom)
Ausführungsergebnis
> mvn -P foo help:active-profiles antrun:run
...
Active Profiles for Project 'example:hello:jar:1.0.0':
The following profiles are active:
- foo (source: example:hello:1.0.0)
...
[echo] message = foo profile!!
--Verwenden Sie aktive Profile, um festzustellen, welche Profile zur Laufzeit aktiv sind. es kann ――Es kann beim Debuggen hilfreich sein
org.apache.maven.plugins oder com.codehaus.mojo Ihre Ziele nicht erreichen, müssen Sie Ihre eigenen erstellen.Hello World
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
<packaging>maven-plugin</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</build>
</project>
org.apache.maven:maven-plugin-apiorg.apache.maven.plugin-tools:maven-plugin-annotations
--Dies ist im "bereitgestellten" Bereich angegeben
--Einstellen von maven-plugin-pluginHelloMojo.java
package example;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
public void execute() throws MojoExecutionException {
getLog().info("Hello Custom Plugin!");
}
}
--Erstellen Sie eine Klasse, indem Sie die AbstractMojo -Klasse erben
name wird der Name des ZielsBauen
> mvn install
...
pom.xml(Weitere Projekte)
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn hello:hello
...
[INFO] Hello Custom Plugin!
pom.xml
...
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
...
Inhalt des Glases
hello-1.0.0.jar/
|-example/
`-META-INF/
|-MANIFEST.MF
`-maven/
|-example/
`-plugin.xml
plugin.xml ansieht, sieht es so aus:plugin.xml
...
<plugin>
<name>hello-maven-plugin</name>
<description></description>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
<goalPrefix>hello</goalPrefix>
<isolatedRealm>false</isolatedRealm>
<inheritedByDefault>true</inheritedByDefault>
...
--<goalPrefix>ist jetzt hallo
Mojo
HelloMojo.java
package example;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
@Parameter
private String message;
public void execute() throws MojoExecutionException {
getLog().info("message = " + message);
}
}
pom.xml(Ein weiteres Projekt)
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<message>Hello World!!</message>
</configuration>
</plugin>
</plugins>
</build>
</project>
--<Konfiguration>deklariert dasselbe Element wie der Mojo-Feldname
Ausführungsergebnis
> mvn hello:hello
...
[INFO] message = Hello World!!
message kann jetzt als Parameter angegeben werden.HelloMojo.java
package example;
...
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
@Parameter(property="hello.message")
private String message;
public void execute() throws MojoExecutionException {
getLog().info("message = " + message);
}
}
pom.xml (separates Projekt)
...
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
...
Ausführungsergebnis
> mvn hello:hello -Dhello.message="HELLO WORLD!!"
...
[INFO] message = HELLO WORLD!!
HelloMojo.java
package example;
...
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
@Parameter(property="hello.message", defaultValue="Hello Custom Plugin!!")
private String message;
public void execute() throws MojoExecutionException {
getLog().info("message = " + message);
}
}
@ Parameter`` defaultValue deklarieren.pom.xml(Ein weiteres Projekt)
...
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
...
--<Konfiguration>ist nicht konfiguriert
Ausführungsergebnis
> mvn hello:hello
...
[INFO] message = Hello Custom Plugin!!
...
> mvn hello:hello -Dhello.message=OVERRIDE!!
...
[INFO] message = OVERRIDE!!
defaultValue festgelegte Wert übernommen wird.HelloMojo.java
package example;
...
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
@Parameter(defaultValue="${hello.mojo.message}")
private String message;
public void execute() throws MojoExecutionException {
getLog().info("message = " + message);
}
}
<Eigenschaften>).pom.xml(Ein weiteres Projekt)
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<properties>
<hello.mojo.message>Project Property</hello.mojo.message>
</properties>
<build>
<plugins>
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
</plugins>
</build>
</project>
<Eigenschaften> mit demselben Schlüssel, der im Ausdruck defaultValue deklariert wurdeAusführungsergebnis
> mvn hello:hello
...
[INFO] message = Project Property
...
> mvn hello:hello -Dhello.mojo.message="System Property"
...
[INFO] message = System Property
--Der in <Eigenschaften> deklarierte Wert wird im Parameter messge festgelegt
--Parametertypen können mit verschiedenen Typen deklariert werden, nicht nur mit "String"
HelloMojo.java
package example;
import java.io.File;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@Mojo(name="hello")
public class HelloMojo extends AbstractMojo {
@Parameter
private int intValue;
@Parameter
private long longValue;
@Parameter
private boolean booleanValue;
@Parameter
private double doubleValue;
@Parameter
private Date dateValue;
@Parameter
private File fileValue;
@Parameter
private URL urlValue;
@Parameter
private HelloEnum enumValue;
@Parameter
private List<String> listValues;
@Parameter
private Map<String, String> mapValue;
public void execute() throws MojoExecutionException {
Log log = getLog();
log.info("intValue=" + intValue);
log.info("longValue=" + longValue);
log.info("booleanValue=" + booleanValue);
log.info("doubleValue=" + doubleValue);
log.info("dateValue=" + dateValue);
log.info("fileValue=" + fileValue);
log.info("urlValue=" + urlValue);
log.info("enumValue=" + enumValue);
log.info("listValues=" + listValues);
log.info("mapValue=" + mapValue);
}
public enum HelloEnum {
HELLO,
WORLD;
}
}
pom.xml(Ein weiteres Projekt)
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<intValue>123</intValue>
<longValue>1234567890</longValue>
<booleanValue>true</booleanValue>
<doubleValue>1234.5678</doubleValue>
<dateValue>2019-10-20 12:13:14</dateValue>
<fileValue>foo/bar</fileValue>
<urlValue>https://www.google.co.jp/</urlValue>
<enumValue>HELLO</enumValue>
<listValues>
<aaa>fizz</aaa>
<bbb>buzz</bbb>
</listValues>
<mapValue>
<foo>FOO</foo>
<bar>BAR</bar>
</mapValue>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn hello:hello
...
[INFO] intValue=123
[INFO] longValue=1234567890
[INFO] booleanValue=true
[INFO] doubleValue=1234.5678
[INFO] dateValue=Sun Oct 20 12:13:14 JST 2019
[INFO] fileValue=F:\tmp\maven\hello\foo\bar
[INFO] urlValue=https://www.google.co.jp/
[INFO] enumValue=HELLO
[INFO] listValues=[fizz, buzz]
[INFO] mapValue={bar=BAR, foo=FOO}
...
java.util.Date wird in einem der folgenden Formate angegebenJJJJ-MM-TT HH: mm: ss.S a (Beispiel: 2005-10-06 2:22: 55.1 PM)
--yyyy-MM-dd HH: mm: ssa (Beispiel: 2005-10-06 2:22:55 PM)
――Jedoch können sie flexibel analysiert werden, auch wenn sie nicht genau übereinstimmen (AM und PM können weggelassen werden, aber die Zeit kann nicht weggelassen werden).
--java.io.File behandelt den Wert als Pfad
--java.net.URL behandelt den Wert als URLHelloMojo.java
package example;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
@Mojo(name="hello", defaultPhase=LifecyclePhase.VALIDATE)
public class HelloMojo extends AbstractMojo {
public void execute() throws MojoExecutionException {
getLog().info("Hello Mojo!!");
}
}
defaultPhase von @ Mojo angebenpom.xml(Ein weiteres Projekt)
...
<plugin>
<groupId>example</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>hello</goal>
</goals>
</execution>
</executions>
</plugin>
...
--hello Nur das Ziel wird deklariert und die Phasen sind nicht miteinander verbunden.
Ausführungsergebnis(Ein weiteres Projekt)
> mvn validate
...
[INFO] Hello Mojo!!
Ordnerstruktur
|-pom.xml
`-target/
pom.xml
<?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</groupId>
<artifactId>hello</artifactId>
<version>1.0.0</version>
</project>
Ausführungsergebnis
> mvn clean
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hello ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ordnerstruktur (nach Ausführung)
`-pom.xml
${project.build.directory}${project.build.outputDirectory}${project.build.testOutputDirectory}${project.reporting.outputDirectory}
-- $ {project.basedir} / target wird gelöscht, sofern Sie den Pfad des obigen Ordners nicht geändert haben.Ordnerstruktur
|-pom.xml
|-target/
`-foo/
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>${project.basedir}/foo</directory>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ausführungsergebnis
> mvn clean
...
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ hello ---
[INFO] Deleting ...\foo (includes = [], excludes = [])
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Ordnerstruktur (nach Ausführung)
`-pom.xml
<Datensätze>gibt die Sammlung von [Dateigruppe] an (https://maven.apache.org/plugins/maven-clean-plugin/apidocs/org/apache/maven/plugins/clean/Fileset.html) Machen Es ist zu schwierig zu verstehen, wo und welche Informationen sich befinden, daher werde ich sie klären </ del>