Создайте EAR с зависимостями общего доступа Gradle между WAR - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть java -ее проект, подобный этому

/project/war1/build.gradle
/project/war2/build.gradle
/project/jar1/build.gradle
/project/jar2/build.gradle
/project/ear/build.gradle

И war1, и war2 зависят от jar1 и jar2. Модули jar1 и jar2 зависят от сторонних библиотек (размещенных на mavenCentral), назовем их third-party1.jar и third-party2.jar. war1 и war2 также зависят от библиотеки third-party3.jar, которой я бы хотел поделиться с ними.

Я бы ожидал, что ear будет выглядеть так:

META-INF/MANIFEST.MF
META-INF/application.xml
war1.war
war2.war
lib/jar1.jar
lib/jar2.jar
lib/third-party1.jar
lib/third-party2.jar
lib/third-party3.jar

это правильно? Как я могу добиться этого с Gradle? Документация по плагину для наушников Gradle не объясняет это вообще, что мне кажется наиболее распространенным паттерном.

1 Ответ

0 голосов
/ 08 апреля 2020

так что я думаю, я наконец понял:

ear/build.gradle должно быть так:

plugins {
    id 'java'
    id 'ear'
}

dependencies {
    /* jars */
    earlib project(path: ':jar1')
    earlib project(path: ':jar1', configuration: 'compile')

    earlib project(path: ':jar2')
    earlib project(path: ':jar2', configuration: 'compile')

    /* wars */
    deploy project(path: ':war1', configuration: 'archives')
    earlib project(path: ':war1', configuration: 'earshared')

    deploy project(path: ':war2', configuration: 'archives')
    earlib project(path: ':war2', configuration: 'earshared')
}

таким образом мы получим war s в root в архиве .ear зависимости earshared помещаются в каталог /lib.

Артефакты jar1 и jar2 и их зависимости также помещаются в /lib

earshared - это пользовательская конфигурация, в которой build.gradle войн выглядит следующим образом:

configurations {
    earshared
}

apply plugin: 'war'

jar.enabled = true

description = 'war1'
dependencies {
    providedCompile project(':jar1')
    providedCompile project(':jar2')
    earshared group: 'org.example', name: 'third-party3', version:'1.0.0'
}

sourceSets { 
    main {  compileClasspath += configurations.earshared }
}

, а build.gradle jars выглядит так:

description = 'jar1'

dependencies {
    compile group: 'org.example', name: 'third-party1', version:'2.6.0'
    compile group: 'org.example', name: 'third-party2', version:'2.6.0'
}
...