java - 使用 Gradle/Java8 构建时存储某些类的方法参数名称

标签 java methods parameters gradle java-8

跟进问题 this问题。

在使用 Gradle 构建时(build.gradle 文件)如何存储类的方法参数名称?

根据 Java tutorials :

To store formal parameter names in a particular .class file, and thus enable the Reflection API to retrieve formal parameter names, compile the source file with the -parameters option to the javac compiler.

那么如何使用 Gradle 将“-parameters”传递给 javac 编译器?

我尝试了建议的解决方案 here ,通过将以下内容添加到我的 build.gradle 文件中没有运气

apply plugin: 'java'

compileJava {
    options.compilerArgs << '-parameters'
    options.fork = true
    options.forkOptions.executable = 'javac'
}

我正在使用 eclipse,如果我启用它(在 Window -> Preferences -> Java -> Compiler 中),它工作正常。

Store information about method parameters (usable via reflection)

但我宁愿让这个设置由我的构建系统设置,这样我不依赖于 eclipse,这样其他人就可以使用我的 buildt .jar 文件。

我使用:

  • eclipse 4.4.2
  • Gradle IDE 3.6.4(eclipse 插件)

最佳答案

要让 gradle 本身使用 -parameters 进行编译,请将以下内容添加到您的 build.gradle:

compileJava.options.compilerArgs.add '-parameters'
compileTestJava.options.compilerArgs.add '-parameters'

为了使用 Gradle 生成为 javac 设置了 -parameters 的 Eclipse 项目文件:使用来自 this gradle forum post 的提示并将以下内容添加到您的 build.gradle:

eclipseProject {
  doLast {
    // https://discuss.gradle.org/t/how-to-write-properties-to-3rd-party-eclipse-settings-files/6499/2

    def props = new Properties()
    file(".settings/org.eclipse.jdt.core.prefs").withInputStream {
      stream -> props.load(stream)
    }
    props.setProperty("org.eclipse.jdt.core.compiler.codegen.methodParameters", "generate")
    file(".settings/org.eclipse.jdt.core.prefs").withOutputStream {
      stream -> props.store(stream, null)
    }
}

(显然 a)Gradle Eclipse 插件不知道如何将编译器选项 -parameters 转换为 .settings/org.eclipse.jdt.core.prefs 设置 org.eclipse.jdt.core.compiler.codegen.methodParameters=generate 和 b) 没有标准的 Gradle 任务可以操作 .settings 中的任何属性文件,所以你必须自己动手。)

这是针对 Gradle 2.8 的。

关于java - 使用 Gradle/Java8 构建时存储某些类的方法参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048258/

相关文章:

f# - 在 F# 函数中定义参数,使用元组更好吗?

delphi - 在 DWScript 中从 Delphi 向记录类型添加方法

c# - 为什么 TimeSpan.Duration() 是方法而不是属性?

C : double pointer passed as parameters comes back empty

用于 RedHat 的 JAVA_OPTS

.net - 与旧 CInt() VB 方法相对应的 VB.NET 方法是什么?

JAVA - 对象构造函数不接受参数?

java - 缩减规模/自定义 jOOQ 构建?

java - 类加载器子系统中的命名空间与可见性

java - Spring 集成: Poller acting weird