Gradle java-платформа плагин и определение платформы - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь использовать плагин java-platform для совместного использования ограничений зависимостей в многомодульном проекте.Я хотел бы установить модуль с именем platform, который я могу импортировать, используя platform(project(":platform")) в других модулях.Кроме того, я хотел бы импортировать спецификацию в свой проект платформы, используя platform("group-id:of-the-bom:and-version").

Примером является следующая структура:

// settings.gradle
include("platform")
include("consumer")
// platform/build.gradle
apply plugin: 'java-platform'

repositories {
    mavenCentral()
}

dependencies {
    constraints {
        api platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final")
    }
}
// consumer/build.gradle
apply plugin: 'java-library'

repositories {
    mavenCentral()
}

dependencies {
    implementation platform(project(":platform"))
    implementation "org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec"
}

Когда я запускаю gradle consumer:dependencies Я получаю вывод, содержащий следующее:

compileClasspath - Compile classpath for source set 'main'.
+--- project :platform
\--- org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec FAILED

Кажется, что модуль platform не "реэкспортирует" ограничения, которые были введены с помощью platform().

Я нашел два «обходных пути», которые на самом деле не решают мою проблему, но, кажется, указывают, что проблема заключается в использовании platform() вместе с плагином java-platform:

  1. Replace implementation platform(project(":platform")) с implementation platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final") в consumer/build.gradle.
  2. Поместите явную запись в platform/build.gradle, такую ​​как api org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.1.Final.

Является ли плагин java-platform не предназначенным дляиспользуется таким образом, или мне не хватает какой-то опции конфигурации?

1 Ответ

0 голосов
/ 13 февраля 2019

Импорт спецификации в Gradle означает, что вы хотите зависеть от спецификации, чтобы применить предоставленные ограничения .

То, что вы добавляете по умолчанию к платформе ограничения .Но ограничения появляются в графе только в том случае, если существует соответствующее объявление зависимость .Также ограничения только информируют о целевом модуле.Они никогда не приносят никакой переходной информации.

Итак, вам нужно объявить, что ваш platform проект зависит от спецификации.Затем он будет экспортировать свои ограничения, как и ожидалось.

// platform/build.gradle
apply plugin: 'java-platform'

repositories {
    mavenCentral()
}

javaPlatform {
    // Declare that your platform contains dependencies
    allowDependencies()
}

dependencies {
    // This is a dependency on the BOM that will bring its constraints transitively
    api platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final")
    constraints {
        // Additional constraints not covered by the platform above go here
    }
}
...