Как исправить “Метод libsDir устарел”. когда он не используется?

#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 пытается просканировать все внутренние свойства объекта и попадает в устаревшее свойство