Gradle - изменение "compile" на "реализацию" приводит к ошибке - PullRequest
0 голосов
/ 07 сентября 2018

build.gradle - частично:

    dependencies {
        compile 'org.codehaus.groovy:groovy-all:2.4.15'
    }

Если изменить compile на implementation, при сборке появится следующая ошибка:

Не удалось выполнить задачу ': greeter: compileJava

Если изменить его, то сборка будет успешной.

Советы:

  • В проекте используется Gradle 4.10, который поддерживает implementation.
  • Существуют и другие зависимости, в подпроектах переход на использование implementation не вызовет проблем, будет только эта строка.

Любая помощь?

1 Ответ

0 голосов
/ 07 сентября 2018

Мне было интересно, почему вашему основному java-проекту понадобится groovy-all, так как он используется для компиляции библиотеки groovy. implementation конфигурации должно быть достаточно.

Я воспроизвел вашу проблему и сосредоточился на ошибке благодаря вашей ссылке:

:greeter:compileJava FAILED
/mnt/star/git_repository/workspace/groovy_workplace/gradle/hello/hello_multi_project/greeter/src/main/java/greeter/Greeter.java:5: error: cannot access GroovyObject
        final String output = GreetingFormatter.greeting(args[0]);
                                               ^
  class file for groovy.lang.GroovyObject not found

Почему GroovyObject необходим для компиляции вашего кода Java? Я посмотрел на GroovyObject исходный код, и он ударил меня:

package groovy.lang;

/**
 * The interface implemented by all Groovy objects.
 * <p>
 * Especially handy for using Groovy objects when in the Java world.
 *
 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
 */
public interface GroovyObject {
[...]

Интерфейс, реализованный всеми объектами Groovy. Особенно удобно для использование объектов Groovy в мире Java .

GreetingFormatter является объектом Groovy и неявно реализует GroovyObject. Вот почему groovy-all необходим в classpath компиляции, то есть он должен быть объявлен как compile зависимость в groovy библиотеке.

...