Создайте многомодульный проект с двумя или более корнями в Gradle - PullRequest
0 голосов
/ 29 сентября 2019

Я только что поменялся с maven на gradle, потому что думал, что это хорошая идея, так как я не мог решить свою проблему с maven. Ну, Gradle тоже не решил мою проблему (вот почему ты здесь, смеется), но это быстрее, и я буду продолжать его использовать.

Вот что я получил:

project/
├── components/
│   ├── Software Component A
│   └── Software Component B
└── modules/
    ├── Module A
    ├── Module B
    ├── Module C
    └── Module D

Программные компоненты включают в себя модули, которые являются универсальными для всего проекта. Я хочу иметь возможность запускать программное обеспечение с IntelliJ по причинам, связанным с тестированием, и хочу создать два отдельных фляги для компонентов программного обеспечения.

И вот как далеко я продвинулся с меньшим набором проектов для тестирования, переименованным вих роль:

это конфигурация gradle для корневого проекта:

// build.gradle
plugins {
    id 'java'
    id 'io.freefair.lombok' version '4.1.1'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'io.freefair.lombok'

    sourceCompatibility = '1.8'
    group = 'io.cloudsystem'
    version = '2.0.0'
    compileJava.options.encoding = 'UTF-8'
    compileTestJava.options.encoding = 'UTF-8'
    javadoc.options.encoding = 'UTF-8'

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
    }
}

test {
    useJUnitPlatform()
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

// settings.gradle
rootProject.name = 'gradle_root_project'
include 'module_a', 'module_b', 'module_c', 'software_component_a'

и это для компонента программного обеспечения (настройки всегда только: rootProject.name = 'projectname')

// build.gradle
plugins {
    id 'application'
}

application {
    mainClassName = 'io.cloudsystem.Controller'
}

dependencies {
    implementation project(':ModuleLoader')
    implementation project(':TerminalModule')
    implementation project(':NetworkModule')
}

Теперь все это строится с gradle build, но все, что я получаю, это набор бесполезных jar-файлов ... компонент не запускается, корневой файл - это только пустой манифест, и когда я запускаю проект в IntelliJ (работает только тогда, когдаЯ открыл корневой проект, в противном случае отсутствуют импортные данные) выходные данные странные / отображаются неправильно или даже не отображаются.

1 Ответ

0 голосов
/ 30 сентября 2019

Спасибо @Slaw! Структура, которую я использовал, возможна при использовании составной сборки . В любом случае gradle shadow также требовалось для создания рабочего фляги с зависимостями. Чтобы построить его, мне пришлось настроить его так, как описано на их веб-странице, и запустить gradle clean shadowJar.

...