Создание единой исходной банки для многомодульного проекта Gradle

У меня есть многомодульный проект Gradle, подобный этому:

Module A (Parent)
-build.gradle
-settings.gradle
+Module B
--src
---main
----java
----kotlin
--build.gradle
+Module C
--src
---main
----java
----kotlin
--build.gradle

В этом случае модуль B имеет зависимость времени компиляции от модуля C.

Я хочу создать банку с источниками, включая источники из всех подпроектов, для публикации в моем репозитории.

В сборках с одним модулем я добавил в свой проект следующее, но добавление его во все подпроекты не приводит к сбору исходных наборов в создаваемой банке исходных кодов:

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/java'
}

task sourcesJar(type: Jar) {
    from sourceSets.main.kotlin
    from sourceSets.main.java
    archiveClassifier = 'sources'
}

Как я могу это сделать? Насколько я знаю, ShadowJar работает, но, к сожалению, не дает возможности создать банку с исходным кодом.


person user3302429    schedule 29.07.2020    source источник
comment
Из любопытства, почему вы хотите иметь банку с одним исходным кодом?   -  person dnault    schedule 30.07.2020
comment
В нашем случае многомодульный проект функционирует как библиотека, от которой зависит приложение, которое находится в другом месте. На практике существует больше подмодулей, зависящих от модуля C, чем в моем примере, и на данный момент мы хотим иметь возможность зависеть от них всех из другого приложения. Сами подмодули довольно легковесны, поэтому мы хотим избежать создания набора репозиториев для их размещения, если это возможно.   -  person user3302429    schedule 30.07.2020


Ответы (1)


Мы нашли решение — развернуть подмодули как независимые jar-источники и включать их по отдельности.

Например, в каждом подмодуле:

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/java'
}

task sourcesJar(type: Jar) {
    from sourceSets.main.kotlin
    from sourceSets.main.java
    archiveClassifier = 'sources'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = rootProject.group
            artifactId = "$rootProject.name-$project.name"
            version = rootProject.project.version
            from components.java
            artifact sourcesJar
        }
    }
person user3302429    schedule 03.08.2020