Gradle-将“编译”更改为“实现”会出错

时间:2018-09-07 08:45:11

标签: gradle groovy build.gradle

build.gradle-部分:

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

如果将compile更改为implementation,则在构建时将出现以下错误:

  

任务':greeter:compileJava的执行失败

将其还原然后构建将成功。

提示:

  • 该项目正在使用Gradle 4.10,它确实支持implementation
  • 还有其他依赖项,在子项目中,更改为使用implementation不会引起问题,只有这一行会导致问题。

有帮助吗?

1 个答案:

答案 0 :(得分:1)

我想知道为什么您的主要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对象实现的接口。特别方便   在Java世界中使用Groovy对象

GreetingFormatter是一个Groovy对象,它隐式实现GroovyObject。这就是为什么在编译类路径中需要groovy-all的原因,即应该在groovy库中将其声明为compile依赖项。