Android Gradle javadoc注释不存在

时间:2015-04-16 01:40:48

标签: android android-gradle javadoc

我正在尝试建立一个在jcenter上发布的aar。

assembleRelease任务正常,javadoc任务也可正常工作,但javadocJar任务输出此错误:

  

/Users/martinmoreno/Projects/android-dev-utils/dev-utils/src/main/java/com/tinchoapps/devutils/BitmapUtils.java:11:错误:包android.support.annotation不存在<登记/>       import android.support.annotation.NonNull;

这是(简化的)gradle文件:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'


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

...

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-annotations:20.0.0'
    compile 'com.android.support:support-v4:22.0.0'
}

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

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

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

artifacts {
    archives sourcesJar
    archives javadocJar
}

它似乎与依赖关系有关,因为它在导入的类中也提供了一些“类未找到”异常,但无法弄清楚出错了。

有什么想法吗?

5 个答案:

答案 0 :(得分:18)

这为我修复了各种类似的错误:

将以下内容添加到build.gradle:

configurations {
    javadocDeps
}

dependencies {
    compile 'com.android.support:support-annotations:22.2.0'
    javadocDeps 'com.android.support:support-annotations:22.2.0'
    androidTestCompile 'junit:junit:4.+'
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:+'
}

在JavaDoc任务中添加以下行:

classpath += configurations.javadocDeps

答案 1 :(得分:8)

只需在javadoc任务中添加此行(注意最后一部分:+ configurations.compile):

classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.compile

该行的最后一部分确保javadoc使用编译依赖项来解析它用于javadoc的类。在这一点上,它不应该再失败。

答案 2 :(得分:3)

由于在Android Gradle 3.0.0中引入了apiimplementation依赖关系配置,因此不推荐使用compile。要在javadoc类路径中包含implementation依赖项,我更新了Loius CADs answer

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

我认为这不是最干净的解决方案。可能有一个原因导致configuration.implementation默认无法解析。

答案 3 :(得分:2)

我在运行./gradlew install时遇到过这种情况。它是在编译JavaDocs时发生的(据我所知)。

我刚刚将failOnError false添加到task javadoc

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

我的理解是,我们避免因无法找到注释库的警告而失败。

答案 4 :(得分:1)

根据马库斯的回答,这就是我必须这样做才能让它发挥作用:

SetMyStruct