web-dev-qa-db-ja.com

Android Gradlejavadocアノテーションが存在しません

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
}

インポート内のクラスにも「クラスが見つかりません」という例外が発生するため、依存関係に関連しているようですが、何が問題なのか理解できません。

何かご意見は?

23
Cheborra

これにより、同様のさまざまなエラーが修正されました。

以下を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
18
Markus Kreth

この行をjavadocタスクに追加するだけです(最後の部分に注意してください:+ configurations.compile):

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

行の最後の部分では、javadocがコンパイルの依存関係を使用して、javadocに使用しているクラスを解決していることを確認します。この時点で、もう失敗することはありません。

8
Louis CAD

Android Gradle 3.0.apiおよびimplementation依存関係構成が導入されたため、compileは非推奨になりました。 javadocクラスパスにimplementation依存関係を含めるために、更新しました Loius CADの回答

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はデフォルトでは解決できません。

5

./gradlew installの実行中にこれに直面しました。これは、JavaDocsがコンパイルされているときに発生していました(私が理解できる限り)。

failOnError falsetask javadocに追加しました。

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

私が理解しているのは、アノテーションライブラリが見つからないという警告の失敗を回避したということです。

2
Sufian

Markusの答えに続いて、これは私がそれを機能させるためにそれをしなければならなかった方法です:

configurations {
    javadocDeps
}

dependencies {
    compile 'com.Android.support:support-annotations:25.3.1'
    javadocDeps 'com.Android.support:support-annotations:25.3.1'
}

tasks.whenTaskAdded { task ->
    if (task.name == 'androidJavadocs') {
        task.configure {
            classpath += configurations.javadocDeps
        }
    }
}
1
Squeazer