Gradle: многопроектная сборка с зависимым от проекта свойством

#java #gradle #gradle-multi-project-build

#java #gradle #gradle-сборка для нескольких проектов

Вопрос:

В настоящее время я пытаюсь создать многопроектную сборку с помощью gradle, которая должна создавать несколько файлов ear. Все файлы ear используют общий проект ejb, который объединяет ejb-jar.xml дескриптор развертывания. Этот дескриптор развертывания должен содержать env-запись, которая зависит от ear-проекта.

Вот как выглядит структура проекта:

 ├───ear-project1
│       build.gradle
├───ear-project2
│       build.gradle
├───ejb-project
│   │   build.gradle
│   └───src
│       └───main
│           └───resources
│               └───META-INF
│                       ejb-jar.xml
├───build.gradle
 

build.gradle (root)

 plugins {
    id 'java'
}

subprojects {
    apply plugin: 'java'
}
 

build.gradle (ear)

 apply plugin: 'ear'

dependencies {
    deploy project(':ejb-project')
}
 

build.gradle (ejb)

 import org.apache.tools.ant.filters.ReplaceTokens

ext {
    placeholder = 'thisShouldBeSetByTheEar'
}

processResources {
    with copySpec {
        from 'src/main/resources'
        filter(ReplaceTokens, tokens: [replaceMe: placeholder])
    }
}
 

Весь проект должен быть создан одной командой, например gradle ear .

До сих пор я пытался внедрить свойство через замыкание, но, похоже, это не работает:

 deploy project(':ejb-project', { placeholder = 'ear-project1' })
 

Как я могу настроить проекты ear для установки placeholder переменной проекта ejb?

Вы можете получить доступ к полному примеру через GitHub: https://github.com/monsieurvader/multiproject-ear

Комментарии:

1. В чем именно заключается вопрос? Пожалуйста, четко сформулируйте проблему.

2. В конце добавлен вопрос, который, как мы надеемся, должен прояснить проблему.