Publish JAR artifact using Gradle to Artifactory
So I have wasted (invested) a day or two just to find out how to publish a JAR using Gradle to a locally running Artifactory server. I used Gradle Artifactory plugin to do the publishing. I was lost in endless loop of including various versions of various plugins and executing all sorts of tasks. Yes, I’ve read documentation before. It’s just wrong. Perhaps it got better in the meantime.
Executing following has uploaded build info only. No artifact (JAR) has been published.
$ gradle artifactoryPublish :artifactoryPublish Deploying build info to: http://localhost:8081/artifactory/api/build Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/scala-gradle-artifactory/1408198981123/2014-08-16T16:23:00.927+0200/ BUILD SUCCESSFUL Total time: 4.681 secs
This guy has saved me, I wanted to kiss him: StackOverflow – upload artifact to artifactory using gradle
I assume that you already have Gradle and Artifactory installed. I had a Scala project, but that doesn’t matter. Java should be just fine. I ran Artifactory locally on port 8081. I have also created a new user named devuser
who has permissions to deploy artifacts.
Long story short, this is my final build.gradle
script file:
buildscript { repositories { maven { url 'http://localhost:8081/artifactory/plugins-release' credentials { username = "${artifactory_user}" password = "${artifactory_password}" } name = "maven-main-cache" } } dependencies { classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1" } } apply plugin: 'scala' apply plugin: 'maven-publish' apply plugin: "com.jfrog.artifactory" version = '1.0.0-SNAPSHOT' group = 'com.buransky' repositories { add buildscript.repositories.getByName("maven-main-cache") } dependencies { compile 'org.scala-lang:scala-library:2.11.2' } tasks.withType(ScalaCompile) { scalaCompileOptions.useAnt = false } artifactory { contextUrl = "${artifactory_contextUrl}" publish { repository { repoKey = 'libs-snapshot-local' username = "${artifactory_user}" password = "${artifactory_password}" maven = true } defaults { publications ('mavenJava') } } } publishing { publications { mavenJava(MavenPublication) { from components.java } } }
I have stored Artifactory context URL and credentials in ~/.gradle/gradle.properties
file and it looks like this:
artifactory_user=devuser artifactory_password=devuser artifactory_contextUrl=http://localhost:8081/artifactory
Now when I run the same task again, it’s what I wanted. Both Maven POM file and JAR archive are deployed to Artifactory:
$ gradle artifactoryPublish :generatePomFileForMavenJavaPublication :compileJava UP-TO-DATE :compileScala UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar UP-TO-DATE :artifactoryPublish Deploying artifact: http://localhost:8081/artifactory/libs-snapshot-local/com/buransky/scala-gradle-artifactory/1.0.0-SNAPSHOT/scala-gradle-artifactory-1.0.0-SNAPSHOT.pom Deploying artifact: http://localhost:8081/artifactory/libs-snapshot-local/com/buransky/scala-gradle-artifactory/1.0.0-SNAPSHOT/scala-gradle-artifactory-1.0.0-SNAPSHOT.jar Deploying build info to: http://localhost:8081/artifactory/api/build Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/scala-gradle-artifactory/1408199196550/2014-08-16T16:26:36.232+0200/ BUILD SUCCESSFUL Total time: 5.807 secs
Reference: | Publish JAR artifact using Gradle to Artifactory from our JCG partner Rado Buransky at the Rado Buransky’s Blog blog. |
Great one, Rado!
I loved how you reused the repository declaration from buildScript in the project itself. Neat trick!
The only thing is – you don’t need it :) once you use artifactory plugin, you can add resolve closure with repository name and it will be used to resolve the artifacts.
Thanks for sharing this!
I use this successfully for uploading a war to artifactory.
apply plugin: ‘maven-publish’
publishing {
publications {
mavenJava(MavenPublication) {
from components.web
}
}
repositories {
maven {
credentials {
username ‘xx’
password ‘xx’
}
if (project.version.endsWith(‘-SNAPSHOT’))
url “http://yy.xx.com/artifactory/libs-snapshots-local”
else
url “http://yy.xx.com/artifactory/libs-releases-local/”
}
}
}
How to add build number in final .jar files?
Sir,
You truly are a godsend. After having worked on a library for over 2 weeks I’ve been sleeplessly trying to figure out how to publish it for the past 8 hours. I have a demo in 15 minutes and your website was the last thing I decided to try and I cannot believe how nobody has been able to explain such a simple thing with a clean example in any of the other “popular” sites and why it took me the whole night to finally land here.
Thank you this helped me a lot.