如何使用Java 8 --parameter标志编译Spring Boot应用程序

7

Spring文档指出,如果我们使用Java 8 --parameters标志编译项目,我们可以跳过在注释中给出参数名称,例如@PathVariable。这意味着,我们只需使用@PathVariable id而不是@PathVariable(“id”)id

在Spring Boot Maven应用程序中,我想知道如何告诉编译器使用parameters标志。它是否默认开启?我们需要在pom.xml中提供什么吗?

2个回答

14
在Spring Boot 2.0中,默认应启用--parameters标志。请参见yuranos87的答案
对于旧版本,在pom.xml文件中,您可以将Java编译器选项指定为Maven编译器插件的参数
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <compilerArgs>
            <arg>-parameters</arg>
        </compilerArgs>
    </configuration>
</plugin>

14

我不记得在我的任何项目中需要显式执行此操作。也许您只需要添加spring-boot-starter-parent(我知道,有时可能不是一个选择)。否则,Spring 已经为您处理好了一切。

Spring Boot 文档中多次提到它。例如,在 这里

为了使输入能够映射到操作方法的参数上,实现端点的代码应使用 -parameters 进行编译。如果您正在使用 Spring Boot 的 Gradle 插件或者使用 Maven 和 spring-boot-starter-parent,则会自动进行编译。

更新

Spring Boot 实现它的方式非常简单(在 spring-boot-parent 和 spring-boot-starter-parent 的 poms 中):这里

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <parameters>true</parameters>
            </configuration>
        </plugin>

1
哦,不错。你知道这是在Boot 2.0中添加的还是之前就有了吗?在一个Boot 1.4 Gradle项目中,它对我来说不起作用。 - Sanjay
我会检查Maven Spring BOM,因为我确定它已经存在一段时间了,我们依赖它已久。但似乎对于Gradle来说,它是最近才添加的:https://github.com/spring-projects/spring-boot/blob/29c3be3590c448476f8b1e8168cf3a1bfb98e67e/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java#L49。这一行来自于提交记录:"Use -parameters compiler arg by default in Gradle builds",日期为2017年9月20日。 - yuranos
@Sanjay,想象一下我的惊讶。对于Maven而言,情况类似。它是最近才添加的:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-parent/pom.xml#L599 于2017年7月31日,“默认启用Maven的“-parameters”编译器标志”。现在我需要弄清楚我们过去是如何配置它的 :) - yuranos
不错的发现!供参考,这里是Maven/Kotlin构建Gradle构建的拉取请求。 - approxiblue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接