Скомпилируйте проект библиотеки с javadocs, чтобы jar с gradle

В настоящее время я пытаюсь с небольшим успехом скомпилировать мой библиотечный проект в файл.jar, который также содержит javadocs.

Когда я включаю compile 'com.squareup:otto:1.3.8' в моем файле build.gradle я получаю именно то, что хочу для своей библиотеки. Когда я нахожу функции мыши из библиотеки, я вижу включенные в них javadocs, и это файл.jar.

Мой текущий код компилируется нормально, но я получаю файл.aar (несмотря на отсутствие ресурсов в моем проекте библиотеки), и у меня также нет включенных javadoc (хотя они написаны в проекте).

Мой текущий код build.gradle:

apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "0.3.5"
    }

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

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

def groupId = 'com.moonbloom'
def artifactId = 'boast'
def version = '0.3.5'

def localReleaseDest = "${buildDir}/release/${version}"

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

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

uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = groupId
        pom.artifactId = artifactId
        pom.version = version
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}

task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}

task generateRelease << {
    println "Release ${version} can be found at ${localReleaseDest}/"
    println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}

generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

А затем я просто запускаю 'gradlew clean build generateRelease', и в итоге получаю файл.zip, который я могу загрузить в JCenter (который отлично работает).

Я нашел этот код здесь в Stackru некоторое время назад, и я не могу отредактировать его, чтобы он работал так, как я хочу, и я не могу найти другие примеры этой работы должным образом.

Мне не нужна автоматическая загрузка в Bintray (как я уже видел несколько руководств).

Это моя текущая загруженная библиотека:
https://bintray.com/moonbloom/android/Boast/v0.3.5#files

Это Отто, как я хочу
https://bintray.com/bintray/jcenter/com.squareup%3Aotto/1.3.8/view

Я надеюсь, что кто-то здесь может мне помочь.

2 ответа

Решение

Мне удалось решить мою проблему, каким-то хакерским способом я должен признать.

У меня есть свой оригинальный код (который создал файл библиотеки.aar и файлы sources/javadocs .jar)
Я нашел дополнительный код, который может создать мой библиотечный файл.jar.
Затем я сам написал код, который переместил файл библиотеки.jar в правильную папку и удалил некоторые ненужные файлы.
И я также нашел некоторый код, который мог бы легко превратить все функции gradle в одну простую функцию (что оказалось сложнее, чем я предполагал).

В итоге получается отличный файл.zip, который можно легко загрузить в jcenter, и когда я скачиваю его gradle, javadocs работает отлично.

Просто запустите 'gradlew all', и он сделает все.

Мой код показан ниже, если у кого-то есть такая же проблема, как у меня:

apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "0.4.1"
    }

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

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
}

def identifier = "com"
def name = "testname"

def groupId = "${identifier}.${name}"
def artifactId = "libraryname"
def version = "0.4.1"

def localReleaseDest = "${buildDir}/release/${version}"
def nearFullPath = "${localReleaseDest}/${identifier}/${name}/${artifactId}"
def fullPath = "${nearFullPath}/${version}"

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

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

task makeJar(type: Copy) {
    from("build/intermediates/bundles/release/")
    into("${fullPath}/")
    include("classes.jar")
    rename ("classes.jar", "${artifactId}-${version}.jar")

    doLast {
        println "- '${artifactId}-${version}.jar' has been built"
    }
}

uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = groupId
        pom.artifactId = artifactId
        pom.version = version

        repository(url: "file://${localReleaseDest}")
    }
}

task removeUnwantedFiles(type: Delete) {
    delete fileTree(dir: "${nearFullPath}/", include: ["*.md5", "*.sha1", "*.aar"])
    delete fileTree(dir: "${fullPath}/", include: ["*.md5", "*.sha1", "*.aar"])

    doLast {
        println "- Unwanted files have been removed in these folders:"
        println "--- ${nearFullPath}"
        println "--- ${fullPath}"
    }
}

task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "${artifactId}-${version}.zip"

    doLast {
        println "- Release ${version} can be found at ${localReleaseDest}/"
        println "- Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
    }
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

def buildAliases = [
        'all' : ['clean', 'build', 'makeJar', 'uploadArchives', 'removeUnwantedFiles', 'zipRelease']
]

def expandedTaskList = []

gradle.startParameter.taskNames.each {
    expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
}

gradle.startParameter.taskNames = expandedTaskList.flatten()

println "Following tasks have been run: ${gradle.startParameter.taskNames}"

Измените эту строку, если вы не хотите компилировать свой проект как библиотеку:

apply plugin: 'com.android.library' в apply plugin: 'com.android.application'

Другие вопросы по тегам