`spring-boot-maven-plugin` 和 `maven-compiler-plugin` 有啥区别?

Posted

技术标签:

【中文标题】`spring-boot-maven-plugin` 和 `maven-compiler-plugin` 有啥区别?【英文标题】:What's the difference between `spring-boot-maven-plugin` and `maven-compiler-plugin`?`spring-boot-maven-plugin` 和 `maven-compiler-plugin` 有什么区别? 【发布时间】:2020-01-01 09:23:01 【问题描述】:

我不知道spring-boot-maven-pluginmaven-compiler-plugin 之间的区别。

   <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>$java.version</source>
                    <target>$java.version</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

这是否意味着Spring Boot Maven Plugin 的功能包括maven-compiler-plugin

我用Spring Boot Maven Plugin就可以了,不需要加2个插件吗??

【问题讨论】:

【参考方案1】:

“Spring Boot Maven Plugin 在 Maven 中提供 Spring Boot 支持,让您可以打包可执行 jar 或 war 档案并“就地”运行应用程序。”

"Maven Compiler Plugin 用于编译您的项目的源代码。"

【讨论】:

所以我只用一个Spring Boot Maven Plugin 可以吗?【参考方案2】:

maven-compiler-plugin 有两个目标。两者都已绑定到 Maven 生命周期中的适当阶段,因此会在各自的阶段自动执行。

compiler:compile 绑定到编译阶段,用于编译主要的源文件。 compiler:testCompile 绑定到 test-compile 阶段,用于编译测试源文件。

要了解有关 maven 构建生命周期的更多信息 - http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

maven-compiler-plugin 用法 -

使用 -source 和 -target javac 选项编译源代码 使用不同的 JDK 编译源代码 使用内存分配增强编译源代码 传递编译器参数

最常用于定义源和目标版本。 有时您可能希望将某个项目编译为与当前使用的版本不同的版本。 javac 可以使用-source 和-target 接受这样的命令。 maven-compiler-plugin 也可以配置为在编译期间提供这些选项。

例如,如果您想使用 Java 8 语言特性(-source 1.8)并且还希望编译的类与 JVM 1.8(-target 1.8)兼容,您可以添加以下两个属性,它们是插件参数的默认属性名称:

<project>
  [...]
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  [...]
</project>

或者直接配置插件:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

从技术上讲,如果需要创建可执行 jar 并确保源代码和目标代码具有特定版本(通过包括 maven-compiler-plugin)。

在我的情况下,我没有组合使用,但是当我的 java 项目是一个需要作为微服务等运行的 spring boot 应用程序时,我们需要一个可执行 jar 作为构建输出,所以使用 spring boot maven 插件(仅)但我的其他 java 项目由 spring bean 或组件组成,将在其他外部应用程序中用作启用 spring 的库,但不需要单独运行,但必须确保指定源和目标版本然后正常“mvn package”生成的 jar 应该可以工作。对于那个 Maven 编译器插件(仅)应该可以完成这项工作。

【讨论】:

以上是关于`spring-boot-maven-plugin` 和 `maven-compiler-plugin` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-maven-plugin:build-image 失败并出现 400 Bad Request

spring-boot-maven-plugin:[unknown-version]

spring-boot-maven-plugin未指定版本导致的编译错误

spring-boot-maven-plugin未指定版本导致的编译错误

spring-boot-maven-plugin 安装本地jar 包

使用spring-boot-maven-plugin打包