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.timestamp
maven.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
groupId
pom.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.plugin
org.codehaus.mojo
maven-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-ID
maven-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.plugin
artifactId
: maven-jdeps-plugin
version
: 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
validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy
--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-site
site
post-site
site-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:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
jar:jar
install:install
deploy: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 / resources
Ziel / 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.java
Kompilierungsziel 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/classes
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 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 / webapp
Hello.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]
compile
provided
runtime
test
system
import
pom.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.10
org.apache.commons:commons-text:1.8
pom.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.9
org.apache.commons:commons-csv:1.8
effective-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-api
org.apache.maven.plugin-tools:maven-plugin-annotations
--Dies ist im "bereitgestellten" Bereich angegeben
--Einstellen von maven-plugin-plugin
HelloMojo.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>