Search code examples
androidbintrayjcenter

Linking bintray repo to Jcenter "Package should include sources as part of the package"


I have a bintray repo what I uploaded my android aar library to and I am trying to link my repo to Jcenter so that other people can import it into their project.

When I click the Add to Jcenter button in bintray I am taken to A Compose message page, I dont do anything on this page except click the Send button. When I click the button I get n error message in bintray saying

Failed to send a message: Package should include sources as part of the package

this is my build.gradle for the library

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'maven-publish'

task androidJavadocs(type: Javadoc) {
    failOnError = false
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
    exclude '**/R.html', '**/R.*.html', '**/index.html'
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

publishing {
    publications {
        Production(MavenPublication) {

            artifact("$buildDir/outputs/aar/mlcamera-release.aar")
            groupId 'com.tycz'
            artifactId 'mlcamera'
            version '0.1.0'

            artifact androidJavadocsJar
            artifact androidSourcesJar

            //The publication doesn't know about our dependencies, so we have to manually add them to the pom
            pom.withXml {
                //def dependenciesNode = asNode().appendNode('dependencies')
                //Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
                configurations.compile.allDependencies.each {
                    if (it.name != 'unspecified') {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
        }
    }
}

bintray {
    // Get Bintray credential from environment variable
    user = System.getenv('BINTRAY_USER')
    key = System.getenv('BINTRAY_API_KEY')
    dryRun = false
    override = true
    publish = true
    pkg {
        repo = 'MLCamera'
        name = project.name
        userOrg = 'tyczj359'
        licenses = ['Apache-2.0']
        desc = 'A wrapper library for the new CameraX API and Firebase MLKit to create easier setup for MLKit usage'
        vcsUrl = 'https://github.com/tyczj/MLCamera.git'

        version {
            name = '0.1.0'
            released = new Date()
        }
    }
    publications = ['Production']
}

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"


    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "0.1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'com.google.firebase:firebase-ml-vision:24.0.1'
    implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.2'
    implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation "androidx.camera:camera-core:1.0.0-beta01"
    implementation "androidx.camera:camera-camera2:1.0.0-beta01"
    implementation "androidx.camera:camera-view:1.0.0-alpha08"
    implementation "androidx.camera:camera-lifecycle:1.0.0-beta01"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

Can anyone tell me what the problem is?


Solution

  • Bintray has some preconditions to link to Jcenter.
    Some are that you need a public maven repository, sources file/s, a pom file, etc' (more can be found at JFrog's wiki). You will need to upload those files if you want to Link to Jcenter.

    In your build.gradle you explicitly upload the .aar and also upload the androidSourcesJar.

    From going over the build.gradle file it looks like you are adding the sources, you should see error message if there are any issues with collecting the files.

    My suggestion is changing the order of the from:

    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
        from androidJavadocs.destinationDir
        classifier = 'javadoc'
    }
    
    task androidSourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier = 'sources'
    }
    
    publishing {
        publications {
            Production(MavenPublication) {
                artifact androidJavadocsJar
                artifact androidSourcesJar
                groupId 'com.tycz'
                artifactId 'mlcamera'
                version '0.1.0'
                .
                .
                .
    

    You can follow gradle-bintray-plugin README with examples.

    See the section on the workaround for Android pom file dependencies.

    You can also use these guides: