2014/05/13

Aar をリリースしようとして artifact bundleRelease を使うとエラーになってしまう問題の回避方法

Gradle でビルドした成果物を Maven Repository に公開する方法が新しくなっていました。

まだ「試験的」な段階なので、即導入すべきものではないですが、aar と jar を同時に公開したい場合などに対応できそうなので試してみました。

build.gradle
apply plugin: 'android-library'
apply plugin: 'maven-publish'

android {
    // 省略
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'com.kokufu.android.lib'
            artifactId 'sample-aar'
            version '1.0'

            artifact bundleRelease
        }
        jar(MavenPublication) {
            groupId 'com.kokufu.android.lib'
            artifactId 'sample-jar'
            version '1.0'

            artifact releaseJar
        }
    }
    repositories {
        maven {
            url "file:${projectDir}/maven-repo"
        }
    }
}

実行してみます。
$ ./gradlew publish

ところが、以下のようなエラーが。
* What went wrong:
A problem occurred configuring project ':SampleProject'.
> Cannot create a Publication named 'bundleRelease' because this container does not support creating elements by name alone. Please specify which subtype of Publication to create. Known subtypes are: MavenPublication

調べてみると、gradle android plugin 0.5.5 以降、"bundleRelease" という task は動的追加に変わったようです。

というわけで、artifact の実行を評価後にしてみました。

build.gradle
apply plugin: 'android-library'
apply plugin: 'maven-publish'

android {
    // 省略
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'com.kokufu.android.lib'
            artifactId 'sample-aar'
            version '1.0'

            // artifact bundleRelease
        }
        jar(MavenPublication) {
            groupId 'com.kokufu.android.lib'
            artifactId 'sample-jar'
            version '1.0'

            // artifact releaseJar
        }
    }
    repositories {
        maven {
            url "file:${projectDir}/maven-repo"
        }
    }
}

afterEvaluate {
    publishing.publications.aar.artifact(bundleRelease)
    publishing.publications.jar.artifact(packageReleaseJar)
}

これで問題なく公開されるようになりました。
少々強引な気がします。他に良い方法をご存知の方は是非教えてください。

このへんは、android-library も Gradle も流動的な仕様のようですので、あまり深追いしな方が良いかもしれません。
また、すぐ使えなくなっちゃいそうですから。

ちなみに、しれっと書いていますが、releaseJar で jar ファイルも一緒に公開しています。


環境
Gradle 1.10
gradle android plugin 0.9.0

0 件のコメント: