Wie kann ein Plugin programmgesteuert das Publizieren von Maven-Publish konfigurieren und es build.gradle erlauben, es zu ändern?

Ich habe projektweite Einstellungen in einem Plugin namens parent, das versucht, das Maven-Publish-Plugin anzuwenden und dann die Publishing-Erweiterung programmgesteuert zu konfigurieren. Dies scheint zu funktionieren, aber wenn ich dieses Plugin in einem build.gradle-Skript anwende, kann ich die Veröffentlichungserweiterung nicht so konfigurieren, dass die projektspezifischen Veröffentlichungen festgelegt werden.

Ich erhalte den Fehler:

  Cannot configure the 'publishing' extension after it has been accessed.

Meine Absicht war es, das Veröffentlichungs-Repository im übergeordneten Plugin einzurichten und dann jedes build.gradle-Skript die entsprechenden Veröffentlichungen hinzufügen zu lassen.

Gibt es eine Möglichkeit, dies zu tun?

Derzeit sieht ParentPlugin.groovy folgendermaßen aus:

def void apply(Project project) {
    project.getProject().apply plugin: 'maven-publish'

     def publishingExtension = project.extensions.findByName('publishing')

    publishingExtension.with {
        repositories {
            maven {
                mavenLocal()

                credentials {
                    username getPropertyWithDefault(project.getProject(), 'publishUserName', 'dummy')
                    password getPropertyWithDefault(project.getProject(), 'publishPassword', 'dummy')
                }

            }
        }
    }
}

Mein Client build.gradle schlägt fehl, wenn er versucht, die Veröffentlichungserweiterung zu konfigurieren.

apply plugin: 'parent'

publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId 'agroup'
                artifactId 'anartifactid'
                version '1.0.0-SNAPSHOT'

                from components.java
            }
        }
}

Ist das möglich? Gibt es einen anderen Weg, wie ich das angehen sollte?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage