Мультимодульный проект в Gradle не компилируется, когда - PullRequest
0 голосов
/ 08 февраля 2019

Я использую 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 голосов
/ 08 февраля 2019

Вы столкнулись с этой проблемой, потому что вы не используете плагин java-library.Посмотрите на готовые документы, там написано:

Ключевое различие между стандартным плагином Java и плагином библиотеки Java заключается в том, что последний представляет концепцию API, предоставляемого потребителям.

Поэтому попробуйте включить;

 plugins {
    id 'java-library'
}

Ссылка: https://docs.gradle.org/5.1.1/userguide/java_library_plugin.html#header

...