Мне было интересно, почему вашему основному 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 библиотеке.