Gradle中的多模块项目在以下情况下无法编译

时间:2019-02-08 15:09:15

标签: java gradle multi-module

我正在使用gradle 5.1.1,并且在我的多模块项目中具有以下配置

settings.gradle

rootProject.name = 'multi-module-test'

include 'mock-api', 'mock-impl'

build.gradle

group 'com.acme'
version '1.0.0-SNAPSHOT'

subprojects {
  apply plugin: 'java'
  sourceCompatibility = 1.8

  repositories {
    mavenCentral()
  }
}

project(':mock-impl') {
  dependencies {
    // this fails
    // api project(':mock-api')

    // this succeeds
    implementation project(':mock-api')
  }
}

由于某些奇怪的原因,如果我使用api配置,则由于该原因构建失败

Could not find method api() for arguments [project ':mock-api'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

但是当我使用implementation配置时,它不会失败

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您遇到此问题是因为您没有使用java-library插件。看一下gradle文档;

  

标准Java插件和Java之间的主要区别   库插件是后者引入了API的概念   暴露给消费者。

所以尝试包括;

 plugins {
    id 'java-library'
}

参考: https://docs.gradle.org/5.1.1/userguide/java_library_plugin.html#header