Исключая один или два подпроекта из публикации в Gradle - PullRequest
0 голосов
/ 08 апреля 2019

У меня многопроектная сборка Gradle, и я применил плагин maven-publish ко всем subprojects в моем файле основной сборки.

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

Все нормально, и теперь, когда я запускаю ./gradlew artifactoryPublish, я развертываю артефакты из всех подпроектов.

Однако я бы хотел исключить два моих подпроекта из публикации этой публикации mavenJava.

Я пробовал несколько вещей, таких как определение логического значения (skipDefaultPublish) в блоке ext в блоке subprojects в моем файле основной сборки и включение определения публикации в условный блок if и перезапись эта переменная в блоке ext подпроектов я не хочу публиковать. Это не работает, и Gradle жалуется, что это Cannot configure the 'publishing' extension after it has been accessed..

Я пробовал другие вещи, но, похоже, ничего не работает.

Единственное, что я знаю, сработает, это определение блока публикации по умолчанию во всех подпроектах, кроме тех, из которых я не хочу публиковать, но у меня есть ~ 20 подпроектов, но только два, которые не должны публиковать этот тип артефакта так что это не лучшая вещь.

Так есть ли способ настроить все подпроекты на публикацию артефакта, но переопределить его только в двух подпроектах, чтобы они этого не делали?

UPDATE

Чтобы попытаться уточнить, как выглядит мой проект.

root build.gradle

subprojects {
    apply plugin: 'maven-publish'

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java

                artifactId = getCustomProjectId()
                groupId = 'com.our.group.id'
            }
        }
    }

    apply plugin: "com.jfrog.artifactory"

    artifactory {
        contextUrl = ourContextUrl
        publish {
            repository {
                repoKey = "ourRepoKey"
                username = "ourArtifactoryUser"
                password = "ourArtifactoryPass"
            }
            defaults {
                publications('mavenJava')
                publishArtifacts = true
                publishPom = true
            }
        }
    }
}

и в подпроекте, который должен опубликовать артефакт, только не по умолчанию:

project(':exsub'){
    publishing {
        publications {
            mavenSrc(MavenPublication) {
                groupId "com.our.group.id"
                artifactId "stuff-src"
                artifact srcStuff
            }
        }
    }

    artifactoryPublish {
        // publications.removeAll() //<- putting this here doesn't work
        // publications.remove('mavenJava') //<- neither does this

        publications ('mavenSrc') //<- this adds mavenSrc to the publication list but does not remove the mavenJava publication from it
    }
}

1 Ответ

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

Фуф ... Думаю, я наконец-то нашел способ сделать это (эстетика решения весьма спорная).

Для меня было достаточно поместить строку publishing.publications.remove(publishing.publications.mavenJava) в подпроект.

Однако мне пришлось позаботиться о том, чтобы поместить эту строку ниже блока publishing{...} в этом подпроекте.

Итак, подпроекты, которые не должны публиковать «публикацию по умолчанию», выглядят примерно так:

project(':exsub'){
    publishing {
        publications {
            mavenSrc(MavenPublication) {
                groupId "com.our.group.id"
                artifactId "stuff-src"
                artifact srcStuff
            }
        }
    }
    // Remove the default publication (note: this must be located after the publishing block above)
    publishing.publications.remove(publishing.publications.mavenJava)

    artifactoryPublish {
        publications ('mavenSrc') //<- this adds mavenSrc to the publication list but does not remove the mavenJava publication from it
    }
}
...