#java #gradle #groovy
#java #gradle #groovy
Вопрос:
При запуске нашей сборки gradle (с использованием gradle 6.8.3) мы получаем:
> Configure project :buildSrc
The Project.libsDir property has been deprecated. This is scheduled to be removed in Gradle 7.0. Please use the libsDirectory property instead. See https://docs.gradle.org/6.8.3/dsl/org.gradle.api.Project.html#org.gradle.api.Project:libsDir for more details.
at org.gradle.api.plugins.internal.DefaultBasePluginConvention.getLibsDir(DefaultBasePluginConvention.java:76)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at groovy.lang.MetaBeanProperty.getProperty(MetaBeanProperty.java:59)
at org.gradle.internal.extensibility.DefaultConvention$ExtensionsDynamicObject.getProperties(DefaultConvention.java:248)
at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.getProperties(BasicScript.java:116)
at org.gradle.groovy.scripts.BasicScript.getProperties(BasicScript.java:75)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at groovy.lang.MetaBeanProperty.getProperty(MetaBeanProperty.java:59)
at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.tryGetProperty(BasicScript.java:143)
at org.gradle.groovy.scripts.BasicScript.getProperty(BasicScript.java:66)
at ArtifactoryExtensions_76dew9e82ctadr6jidn6q1of1.getGradleProperty(ourstuff/buildSrc/src/main/groovy/ArtifactoryExtensions.groovy:50)
Это соответствующий метод в этом файле groovy.
String getGradleProperty(String key) {
if (properties[key]) { // this is line 50
return properties[key]
}
throw new GradleException("key '$key' is NOT defined in any gradle.properties file!")
}
Как вы можете видеть: строка 50 использует (проект) properties
, но нет libsDir
. Я сделал git grep libsDir
, и это показывает нулевое использование libsDir
во всем нашем репозитории.
Итак: как мне избавиться от предупреждений при сборке для предупреждений, которые не относятся к моему коду, по крайней мере, не таким образом, чтобы дать какие-либо подсказки, как решить проблему?
Примечание: я пытался создать mcve, но, к сожалению, при простом определении с использованием этого метода в отдельном файле build.gradle никаких предупреждений.
Комментарии:
1. Я не эксперт по Gradle, так что это выстрел в темноте. Из stacktrace похоже, что какой-то плагин, который вы используете, получает доступ
libsDir
за кулисами. Может ли это быть так? Если да, обновлены ли ваши плагины?2. Этот базовый плагин является частью доставки gradle: docs.gradle.org/current/dsl /…
3. попробуйте
project.getProperties()
вместоproperties
Ответ №1:
попробуйте project.getProperties()
вместо properties
причина проблемы, которая properties
пытается получить / собрать свойства для текущего объекта, который может быть задачей или чем-то еще.
project.getProperties()
— явно принимает свойства в проекте
object.getProperties()
— если объект не содержит properties
или getProperties()
groovy пытается просканировать все внутренние свойства объекта и попадает в устаревшее свойство