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
}
インポート内のクラスにも「クラスが見つかりません」という例外が発生するため、依存関係に関連しているようですが、何が問題なのか理解できません。
何かご意見は?
これにより、同様のさまざまなエラーが修正されました。
以下を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
この行をjavadocタスクに追加するだけです(最後の部分に注意してください:+ configurations.compile
):
classpath += project.files(Android.getBootClasspath().join(File.pathSeparator)) + configurations.compile
行の最後の部分では、javadocがコンパイルの依存関係を使用して、javadocに使用しているクラスを解決していることを確認します。この時点で、もう失敗することはありません。
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
はデフォルトでは解決できません。
./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
}
私が理解しているのは、アノテーションライブラリが見つからないという警告の失敗を回避したということです。
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
}
}
}