Повторите сборку Gradle с различными версиями зависимостей - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь сделать что-то по общему признанию.Я определил один проект Gradle для веб-приложения и хотел бы создать несколько выпусков этого проекта, в которых каждый выпуск использует разные версии определенных зависимостей.Кроме того, я хотел бы спроектировать это таким образом, чтобы эти версии могли исходить из некоторого динамического источника (например, пользовательского ввода) вместо чего-то, жестко закодированного в файле.

Например, я хочу написать приложение Spring MVC и собрать его для нескольких версий org.springframework: spring-webmvc: 4.3. *.Цель системы состоит в том, чтобы создавать тестовые приложения для популярных веб-фреймворков, с помощью которых я могу тестировать совместимость с инструментом.

Я хочу эффективно достичь с Gradle того, что делает следующий bash

for version in 4.3.12 4.3.13 4.3.14; do
    ./gradlew war -PspringVersion=$version
done

И build.gradle использует springVersion при определении зависимостей

dependencies {
compile "org.springframework:spring-aop:${springVersion}",
        "org.springframework:spring-context:${springVersion}",
        "org.springframework:spring-beans:${springVersion}",
        "org.springframework:spring-context-support:${springVersion}",
        "org.springframework:spring-core:${springVersion}",
        "org.springframework:spring-expression:${springVersion}",
        "org.springframework:spring-web:${springVersion}",
        "org.springframework:spring-webmvc:${springVersion}",
        "javax.servlet:jstl:1.2",
        "javax.servlet:javax.servlet-api:3.1.0"
}

1 Ответ

0 голосов
/ 05 июня 2018

Я пришел к решению, которое заключается в динамическом построении подпроектов в settings.gradle - пример проекта https://github.com/gilday/how-to-gradle-project-variations

Использование settings.gradle для динамического создания подпроектов для каждого из вариантов веб-приложения, которое мы хотимдля сборки.

| how-to-gradle-project-variations
├── app
├── build.gradle
├── settings.gradle
└── variations

В каталоге "app" содержится проект веб-приложения

app/
└── src
    └── main
        └── java
            └── com
                └── johnathangilday
                    └── HelloWorldServlet.java

settings.gradle создает подпроект для каждого из вариантов зависимости servlet-api, с которыммы хотим построить этот проект

// define versions of javax.servlet:servlet-api for which to generate 
variations of the app
def variations = ['2.3', '2.4', '2.5']

def projects = variations.collect { "${rootProject.name}-${it}" }

// include the app subproject with the servlet definitions include('app')
// include a subproject for each variation of the servlet-api
include(*projects)

/.gradlew projects показывает нам динамические подпроекты, сгенерированные в каталоге "Вариантов"

$ ./gradlew projects

> Task :projects

------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'how-to-gradle-project-variations'
+--- Project ':app'
+--- Project ':how-to-gradle-project-variations-2.3'
+--- Project ':how-to-gradle-project-variations-2.4'
\--- Project ':how-to-gradle-project-variations-2.5'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...