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