Репликация тега Maven "dependencyManagement" внутри сборки Gradle - PullRequest
2 голосов
/ 17 июня 2019

Я пытаюсь следовать этому руководству Spring Boot / Vaadin однако Я использую Gradle, не Maven.

В самом начале этого руководства говорится, что используется следующий Maven XML:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>10.0.11</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Однако я не вижу задачи dependencyManagement, доступной через Gradle. Поэтому я спрашиваю: как мне воспроизвести то же поведение, что и элемент XML <dependencyManagement/>, описанный выше в «Gradle land»?

Обновление: текущая попытка

dependencyManagement {
     imports {
          mavenBom 'com.vaadin:vaadin-bom:10.0.11'
     }
}

Единственная проблема с этим заключается в том, что когда я добавляю его в свой build.gradle и затем запускаю ./gradlew clean, я получаю следующую ошибку Gradle:

" Не удалось найти метод dependencyManagement () для аргументов ... "

1 Ответ

1 голос
/ 20 июня 2019

Это должно дать вам рабочую сборку:

plugins {
    // the Gradle plugin which provides the “dependencyManagement” block
    id 'io.spring.dependency-management' version '1.0.6.RELEASE'
    // add Java build functionality to be able to follow the Vaadin guide
    id 'java'
}

dependencyManagement {
    imports {
        // the Maven BOM which contains a coherent set of module versions
        // for Vaadin dependencies
        mavenBom 'com.vaadin:vaadin-bom:10.0.11'
    }
}

repositories {
    // find dependency modules on Maven Central
    mavenCentral()
}

dependencies {
    // the dependency module you need according to the Vaadin with
    // Spring Boot guide; the version of the module is taken from the
    // imported BOM; transitive dependencies are automatically taken
    // care of by Gradle (just as with Maven)
    compile 'com.vaadin:vaadin-spring-boot-starter'
}

Запустите ./gradlew dependencies --configuration compileClasspath, чтобы убедиться, что все зависимости доступны на вашем пути к классам компиляции Java.


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

  1. ./gradlew dependencies --configuration compileClasspath > with-BOM.txt
  2. Удалите блок dependencyManagement и добавьте версию к одиночной зависимости: compile 'com.vaadin:vaadin-spring-boot-starter:10.0.11'
  3. ./gradlew dependencies --configuration compileClasspath > without-BOM.txt
  4. diff -u with-BOM.txt without-BOM.txt

Вы можете увидеть небольшие отличия, такие как org.webjars.bowergithub.webcomponents:webcomponentsjs:1.2.6 при использовании спецификации и версии 1.2.2 без нее. Причину этого можно найти в спецификации , где определена версия 1.2.6, и где авторы также упоминают причину этого: «транзитивные зависимости webjar, определенные здесь для повторяемых сборок»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...