Я пытаюсь сделать что-то явно маргинальное. Я определил один проект 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
jdgilday 2 Июн 2018 в 00:28

1 ответ

Лучший ответ

Я пришел к решению, которое заключается в динамическом создании подпроектов в settings.gradle - example project 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'
0
jdgilday 5 Июн 2018 в 12:47