gradlepom.xmlmaven-publish

Gradle maven-publish plugin: specify POM properties for all publications (including subprojects)


I have a gradle project containing multiple subprojects. The subprojects use the maven-publish plugin to publish one or multiple maven artifacts. I want to add license and company (and maybe other) information to the POMs of the artifacts.

I found how to do this, like this:

publishing {
    publications {
        mySubprojectsPublication(MavenPublication) {
            artifact subprojectsPackageTask
    
            pom {
                licenses {
                    license { 
                        name = '...'
                        url = '...'
                        distribution = 'repo' 
                        comments = '...' 
                    }
                }
                organization { 
                    name = 'My Organization' 
                    url = 'https://www.MyOrgUrl.com' 
                }
            }
        }
    }

With multiple subprojects (and potentially mutliple publications per subproject), it seems to be suboptimal and hard to maintain to copy&paste the pom { ... } section to each of the publications across multiple build.gradle files.

QUESTION: Is there a way to specify this for all publications in the project? (All publications share the same license type)


Solution

  • I found a solution myself...

    I add the following to the root build.gradle:

    allprojects {
        // add license to each (=.all) publications in all subprojects.
        // "model" block is required to access the publications AFTER they have been configured.
        model {
            publishing {
                publications.all { publication -> pom {
                        licenses {
                            license { 
                                name = '...'
                                url = '...'
                                distribution = 'repo' 
                                comments = '...' 
                            }
                        }
                        organization { 
                            name = 'My Organization' 
                            url = 'https://www.MyOrgUrl.com' 
                        }
                    }
                }
            }
        }
    }
    

    If the root build.gradle doesn't already use the maven-publish plugin itself, you need to add it as well:

    plugins {
        id 'maven-publish'
    }
    

    The model {} block is required, so that the pom info is added to all configured publications of the project after they have been configured.