Сохранять имена параметров метода для некоторых классов при создании с помощью Gradle/Java8

Последующий вопрос к этому вопросу.

Как сохранить имена параметров метода для классов при создании с помощью Gradle (файл build.gradle)?

В соответствии с Java учебники:

Для хранения формальных имен параметров в определенном файле .class и, следовательно, включить API Reflection для получения формальных имен параметров, компиляции исходный файл с параметром -parameters компилятору javac.

Итак, как передать "-параметры" компилятору javac с помощью Gradle?

Я попробовал предлагаемое решение здесь, добавив ниже в мой файл 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 и поэтому другие могут использовать мои файлы .jar.txt.

Я использую:

  • Eclipse 4.4.2
  • Gradle IDE 3.6.4 (плагин eclipse)

Ответ 1

sourceCompatibility=1.8
[compileJava, compileTestJava]*.options*.compilerArgs = ['-parameters']

Ответ 2

Чтобы сам gradle был скомпилирован с -parameters, добавьте следующее к вашему build.gradle:

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

Чтобы использовать gradle для создания файлов проекта Eclipse, где -parameters установлен для javac: используйте подсказку 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.

Ответ 3

После некоторых исследований по одной и той же проблеме одним из решений должно быть что-то вроде этого: https://github.com/codeborne/mobileid/blob/master/build.gradle

Добавьте это в свой build.gradle:

[compileJava, compileTestJava]*.options.collect {options ->
    options.compilerArgs.add '-parameters'
}

Он работает для меня с gradle 2.4