如何为android库生成javadoc,当它具有也是aar库的依赖项时? [英] How to generate javadoc for android library when it has dependencies which are also aar libraries?

查看:594
本文介绍了如何为android库生成javadoc,当它具有也是aar库的依赖项时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有android库项目,它依赖于其他的android库项目。我需要为库生成javadoc,但是它失败了,因为gradle会将javadoc classpath路径放置到.aar位置,但javadoc需要.jar文件。

简化的gradle文件:

  android {
compileSdkVersion 23
buildToolsVersion23.0.2

configurations {
javadocDeps
}

defaultConfig {
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName0.1.0
}
}

依赖关系{
编译'com.android.support:support-v4:23.2.0'
编译'com.android.support:appcompat -v7:23.2.0'
compile'c​​om.nineoldandroids:library:2.4.0'
compile'c​​om.annimon:stream:1.0.7'
javadocDeps'com.android.support :support-annotations:23.2.0'
javadocDeps'com.nineoldandroids:library:2.4.0'
javadocDeps'com.android.support:support-v4:23.2.0'
}

任务sourcesJar(类型:Jar){
from android.sourceSets.main.java.srcDirs
classifier ='sources'
}

任务javadoc (类型:Javadoc,dependsOn:explodeAars){
source = android.sourceSets.main.java.srcDirs $ b $ classpath + = project.files(android.getBootClasspath()。join(File.pathSeparator))
classpath + = configurations.javadocDeps
}

javadocJar(类型:Jar,dependsOn:javadoc){
classifier ='javadoc'
from javadoc。 destinationDir
}

artifacts {
archives javadocJar
archives sourcesJar
}

3个可能的解决方案:

1)以某种方式添加到classpath路径中classes.jar,它依赖于每个aar库/intermidiates/exploded-aar/library/version/jars/classes.jar
我不知道如何在javadoc任务中包含这些路径。



2 )手动从aar文件中解压classes.jar并将它们添加到classp中javadoc的任务

<3>非常脏的破解 - 硬编码的路径 - 但我认为这是错误的。

如何使用gradle dsl实现1或2?

解决方案

/ Gradle 3.3作为 exploded-aar 不再存在(在build目录中没有其他选择)。



如果您所依赖的aar不是您项目中的模块,您需要首先在classpath中引用它之前先提取classes.jar(基本上重新创建 intermediates / exploded-aar intermediates / classes / release (如果你使javadoc依赖于assembleRelease)。该解决方法的一个示例: https://github.com/ Microsoft / mobile-center-sdk-android / pull / 345 / files



我真的希望有人提出更好的解决方案。


I have android library project which depends on other android library projects. I need to generate javadoc for library but it fails because gradle puts to javadoc classpath path to .aar locations but javadoc expects .jar files.

simplified gradle file:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    configurations {
        javadocDeps
    }

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 23
        versionCode 1
        versionName "0.1.0"
    }
}

dependencies {
    compile 'com.android.support:support-v4:23.2.0'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.annimon:stream:1.0.7'
    javadocDeps 'com.android.support:support-annotations:23.2.0'
    javadocDeps 'com.nineoldandroids:library:2.4.0'
    javadocDeps 'com.android.support:support-v4:23.2.0'
}

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

task javadoc(type: Javadoc, dependsOn: explodeAars) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += configurations.javadocDeps
}

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

artifacts {
    archives javadocJar
    archives sourcesJar
}

3 solutions possible:

1) somehow to add to the classpath path classes.jar from every aar library it depends build/intermidiates/exploded-aar/library/version/jars/classes.jar I don't know how to include these paths in javadoc task.

2) manually unpack classes.jar from aar file and add them to classpath of javadoc task

3) very dirty hack - hardcoded paths to library - but I think this is so WRONG.

How to achieve 1 or 2 with gradle dsl?

解决方案

The solution from @rve is now broken on Android Studio 2.3 / Gradle 3.3 as the exploded-aar no longer exists (with no alternative inside the build directory).

If the aar you depend on is not a module in your project, you will need first to extract the classes.jar before referencing it in the classpath (basically re-create intermediates/exploded-aar manually).

If the aar you depend on is just another module in your project you can also make your javadoc task depends on the compile task of that module and reference the intermediates/classes/release of that module (if you make javadoc depends on assembleRelease for example). An example of that workaround: https://github.com/Microsoft/mobile-center-sdk-android/pull/345/files

I really wish someone comes up with a better solution though.

这篇关于如何为android库生成javadoc,当它具有也是aar库的依赖项时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆