Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';Maven编译阶段和插件目标之间的区别是什么?_Java_Maven_Maven Plugin - Fatal编程技术网

Java 什么';Maven编译阶段和插件目标之间的区别是什么?

Java 什么';Maven编译阶段和插件目标之间的区别是什么?,java,maven,maven-plugin,Java,Maven,Maven Plugin,我正在学习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(St

我正在学习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>

4.0.0
斯普林格大师
你好,世界
1.0-快照
UTF-8
UTF-8
11
${java.version}
${java.version}
org.apache.commons
commons-lang3
3.8.1
maven清洁插件
3.1.0
自动清洗
初始化
清洁的
如果我使用以下命令:
mvn compiler:compile
,它将创建目标文件夹,并在HelloWorld.class中看到:
Decompiled.class文件,字节码版本:55.0(Java 11)
。所以它使用的是Java11

现在,如果我将pom.xml中的Java版本更改为1.8并再次使用命令
mvn compiler:compile
,我会看到消息:
无需编译-所有类都是最新的
。在目标文件夹中,HelloWorld.class有:
Decompiled.class文件,字节码版本:55.0(Java 11)
。在pom.xml中将Java11更改为1.8后,它显示了Java11

在那之后,如果我使用命令
mvncile
,首先它使用
maven clean插件(自动清理)
,然后
maven resources插件(默认资源)
,然后
maven编译器插件(默认编译器)
并显示消息:
检测到更改-重新编译模块。在目标文件夹中,HelloWorld.class有:
Decompiled.class文件,字节码版本:52.0(Java 8)
。所以现在它使用Java8

因此,我不明白为什么如果我使用命令
mvn compiler:compile
,它不会使用我在pom.xml中添加的
auto clean
。但是如果我使用的是
mvncile
,它使用的是
auto-clean
。有人能帮我理解吗


而且我也不明白为什么如果我使用命令
mvnclean
,它会使用
默认的clean
。但是,如果我使用命令
mvncile
,它将使用
自动清理
。任何反馈都将不胜感激。谢谢大家!

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

请注意,当前执行之前生命周期中的所有阶段,即执行
编译
阶段也会导致
验证
初始化
生成源
处理源
生成资源
处理资源
运行


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