javagradlebuild

How to script Gradle in order to publish shadowjar into Artifactory


I am using shadowJar in my java project. I would like to push the outcome into artifactory.

My gradle script look like this, I am not sure how to connect the dots:

shadowJar {
    baseName = 'com.mycompany.myapp'
    manifest {
        attributes 'Main-Class': 'myapp.starter'
    }
}


  ]
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'maven'
    apply plugin: 'com.github.johnrengelman.shadow'


    // rep for the project
    repositories {
        mavenCentral()
        maven {
            url 'http://repo.company:8081/artifactory/libs-release'
            credentials {
                username = "${repo_user}"
                password = "${repo_password}"
            }
        }
        maven {
            url 'http://repo.company:8081/artifactory/libs-snapshot'
            credentials {
                username = "${repo_user}"
                password = "${repo_password}"
            }
        }

}


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

            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

How do I code gradle to take the shadowjar file?

thanks, ray.


Solution

  • The publication section determines what you're publishing using the maven-publish plugin.

    In your current config, from components.java is going to publish the default jar artifact of your project and artifact sourceJar publishes the sourceJar. In order to publish a different jar, you need to modify (or add a new) publication.

    shadowJar {
      baseName = 'myproject-shadow'
      classifier = ''
    }
    
    publishing {
      publications {
        shadow(MavenPublication) {
          from components.shadow
          artifactId = 'myproject-shadow'
        }
      }
    }
    

    The version used in the name of the jar comes from project.version.