我正在尝试建立一个在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
}
它似乎与依赖关系有关,因为它在导入的类中也提供了一些“类未找到”异常,但无法弄清楚出错了。
有什么想法吗?
答案 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中引入了api
和implementation
依赖关系配置,因此不推荐使用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