I have a project which has a SharedCode
(Java) module and secondly an Android
(Android library) module which depends on the SharedCode
module. I want to publish a jar
artifact from the SharedCode
module and an aar
artifact from the Android
module. I can't figure out how to compose my build.gradle
files so that both modules publish to Artifactory when the artifactoryPublish
task is run. At the moment only the SharedCode
module publishes its artifact to Artifactory.
My build.gradle
files are as below. Note that the maven-publish
aspect of my build.gradle
files appears to be correct because when I run the publishToMavenLocal
task I see the artifacts from both modules in my local Maven folder (i.e. '~/.m2/repository'
).
Firstly, the build.gradle
file in my SharedCode
module is as follows:
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'
group = "${projectGroupId}"
version = "${projectVersionName}"
dependencies {
compile 'com.google.guava:guava:18.0'
}
publishing {
publications {
SharedCode(MavenPublication) {
groupId "${projectGroupId}"
artifactId 'SharedCode'
version "${projectVersionName}"
from components.java
}
}
}
artifactory {
contextUrl = "${artifactory_url}"
publish {
repository {
repoKey = 'libs-release-local'
username = "${artifactory_username}"
password = "${artifactory_password}"
}
defaults {
publications('SharedCode')
publishArtifacts = true
properties = ['qa.level': 'basic', 'dev.team': 'core']
publishPom = true
}
}
}
Secondly, the build.gradle
file in my Android
module is as follows:
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'
group = "${projectGroupId}"
version = "${projectVersionName}"
android {
// android stuff here...
}
dependencies {
compile project(':SharedCode')
}
publishing {
publications {
Android(MavenPublication) {
groupId "${projectGroupId}"
artifactId 'Android'
version "${projectVersionName}"
artifact "$buildDir/outputs/aar/Android-release.aar"
}
}
}
artifactory {
contextUrl = "${artifactory_url}"
publish {
repository {
repoKey = 'libs-release-local'
username = "${artifactory_username}"
password = "${artifactory_password}"
}
defaults {
publications('Android')
publishArtifacts = true
properties = ['qa.level': 'basic', 'dev.team': 'core']
publishPom = true
}
}
}
If I run the artifactoryPublish
task at the root, project level or at the SharedCode
module level then I see output as follows:
18:23:38: Executing external task 'artifactoryPublish'...
Publication named 'SharedCode' does not exist for project ':Android' in task ':Android:artifactoryPublish'.
:SharedCode:generatePomFileForSharedCodePublication
:SharedCode:artifactoryPublish
Deploying artifact: http://localhost:8081/artifactory/libs-release-local/com/mycompany/sdk/SharedCode/0.0.2/SharedCode-0.0.2.jar
Deploying artifact: http://localhost:8081/artifactory/libs-release-local/com/mycompany/sdk/SharedCode/0.0.2/SharedCode-0.0.2.pom
Deploying build descriptor to: http://localhost:8081/artifactory/api/build Build successfully deployed.
Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/client-sdk/1457375019604
BUILD SUCCESSFUL
Note that only the SharedCode
artifact is published in this case.
If I run the artifactoryPublish
task at the Android
module level, then I see output as follows:
18:25:25: Executing external task 'artifactoryPublish'...
Publication named 'SharedCode' does not exist for project ':Android' in task ':Android:artifactoryPublish'.
:Android:artifactoryPublish
Deploying build descriptor to: http://localhost:8081/artifactory/api/build
Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/client-sdk/1457375127269
BUILD SUCCESSFUL
Note that no artifacts are published in this case.
build.gradle
file which has nothing substantial in it right now other than classpath declarations. And under that folder I have anAndroid
and aSharedCode
folder which represent an Android library and a Java module respectively. Thebuild.gradle
files for these two modules are as in my question above. (Thanks for your help btw @RaGe. Really appreciate it.) – Alpertsettings.gradle
file has these three lines: (1)rootProject.name = 'client-sdk'
; (2)include ':Android'
; (3)include ':SharedCode'
. – Alpertcom.jfrog.artifactory
plugin in favour of the standardmaven-publish
plugin for Java library modules and thedigital.wup.android-maven-publish
plugin for Android library modules. See my comments in the answer that I've linked to. For an example of thedigital.wup.android-maven-publish
plugin, see thebuild.gradle
files in this repository. – Alpertmaven-publish
plugin in the rootbuild.gradle
to get it work. – Alternation