gpt4 book ai didi

java - Maven 编译阶段和插件目标有什么区别?

转载 作者:行者123 更新时间:2023-11-30 05:24:02 25 4
gpt4 key购买 nike

我正在学习 Maven,并尝试理解生命周期和插件之间的区别。例如,我有一个非常简单的 Maven 项目,如下所示:

import org.apache.commons.lang3.StringUtils;

public class HelloWorld {

public static void main(String[] args) {
System.out.println("Hello World!!!! ");
System.out.println(StringUtils.capitalize("hello world"));
}
}

这是 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>guru.springframework</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

如果我使用此命令:mvn compiler:compile,它会创建目标文件夹,并在 HelloWorld.class 中看到:反编译的 .class 文件,字节码版本:55.0 (Java 11)。所以它使用的是 Java 11。

现在,如果我将 pom.xml 中的 Java 版本更改为 1.8 并再次使用命令 mvn compiler:compile 我会看到消息: Nothing to compile - all classes are up to日期。在目标文件夹中,HelloWorld.class 有:反编译的.class 文件,字节码版本:55.0 (Java 11)。因此,在我在 pom.xml 中将其更改为 1.8 后,它显示 Java 11。

之后,如果我使用命令mvncompile,它首先使用maven-clean-plugin (auto-clean),然后maven- resources-plugin (default-resources)maven-compiler-plugin (default-compiler) 并显示消息:检测到更改 - 重新编译模块!。在目标文件夹中,HelloWorld.class 有:反编译的.class 文件,字节码版本:52.0 (Java 8)。所以现在它使用 Java 8。

所以我不明白为什么如果我使用命令mvn compiler:compile它不使用我在pom中添加的auto-clean .xml。但如果我使用mvncompile,它就会使用auto-clean。有人可以帮我理解吗?

而且我也不明白为什么如果我使用命令mvn clean,它会使用default-clean。但如果我使用命令mvncompile,它会使用auto-clean。任何反馈将不胜感激。谢谢!

最佳答案

阶段和插件目标之间的区别在于阶段是不同插件目标执行的组。

请注意,当前执行之前生命周期中的所有阶段也都会执行,即执行 compile 阶段也会导致 validateinitialize、要运行的 generate-sourcesprocess-sourcesgenerate-resourcesprocess-resources

<小时/>

当您在命令行上直接指定插件目标时,您会忽略整个生命周期来运行它。

关于java - Maven 编译阶段和插件目标有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59019915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com