web-dev-qa-db-ja.com

Gradle Mavenプラグインの「インストール」タスクがAndroidライブラリプロジェクトで機能しない

AndroidライブラリプロジェクトをローカルのMavenリポジトリにインストールします。これがbuild.gradleです。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'Android-library'
apply plugin: 'maven'

version = "1.0.0-SNAPSHOT"
group = "com.example"

repositories {
    mavenCentral()
}

Android {
    compileSdkVersion 18
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 18
    }
}

私が走ると:

gradle install -i

ここで立ち往生しています:

Executing task ':project:installTest' due to:
  Task has not declared any outputs.
Starting process 'command 'd:\Android-sdk-windows\platform-tools\adb.exe''. Working directory: D:\Projects\Java\....... Command: d:\Android-sdk-windows\platform-tools\adb.exe install -r D:\Projects\Java\.......\build\apk\project.apk
An attempt to initialize for well behaving parent process finished.
Successfully started process 'command 'd:\Android-sdk-windows\platform-tools\adb.exe''
> Building > :project:installTest

だから私が最初に気づいたのは、それをAPKとしてデバイスに展開しようとする奇妙な理由で試みているということです。

私は何か間違ったことをしていますか、それともAndroidライブラリのプラグインがmavenプラグインと互換性がないのですか?

32
Nimrod Dayan

編集:githubページを参照してください( https://github.com/dcendents/Android-maven-gradle-plugin =)最新の手順については、使用する正しいバージョンを見つけてください。オリジナルの手順は、最新のGradleリリースではもう適していません。

元の投稿:

MavenプラグインをAndroidライブラリプロジェクトと互換性があるように変更しました。githubのプロジェクトを参照してください: https://github.com/dcendents/Android-maven-gradle-プラグイン

Androidライブラリプロジェクトを使用するように構成します。

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.github.dcendents:Android-maven-plugin:1.0'
    }
}

apply plugin: 'Android-library'
apply plugin: 'Android-maven'

次に、インストールタスクを使用してローカルのmavenリポジトリにaarをインストールできるはずです。

これがお役に立てば幸いです。プラグインに問題が見つかった場合は、githubでお知らせください。修正します。

32
dcendents

CyclingSirの答えについて詳しく説明するために、個別の「installArchives」タスクを追加することを提案します。これにより、カスタムアーティファクト(ソースなど)の取得も処理されます。

apply plugin: 'maven'

task installArchives(type: Upload) {
  description "Installs the artifacts to the local Maven repository."
  configuration = configurations['archives']
  repositories {
    mavenDeployer {
      repository url: repositories.mavenLocal().url
    }
  }
}

Gradle Android plugin v0.5.5、gradle installはまだデバイスに何かをインストールしようとします。

18
viphe

カスタムプラグインを使用したくない場合は、より簡単な解決策があります。代わりに、別の名前でインストールタスクを再作成してください。 installArchivesと呼びました。次のコードをbuild.gradleに追加します。

task installArchives(type: Upload) {
    description "Installs the artifacts to the local Maven repository."
    repositories.mavenInstaller {
        configuration = configurations.default
        pom.groupId = 'my.group'
        pom.artifactId = 'my-artifact'
        pom.version = '1.0.0'
    }
}

これで、gradle installArchivesを実行してaarをローカルにインストールできます。

11
Greg

UPDATE 2014-11-26

Androidビルドツールのバージョンが0.5.5の場合、この記事の執筆時点では、以下の答えが理にかなっています。ほとんどの場合、古くなっており、動作しなくなっています。

上記の回答で説明したように、Android-maven-pluginを使用するようにプロジェクトを個人的に切り替えました。プラグインは、Androidビルドツールの最新バージョンでも正常に動作します。

2014年2月の元の回答

AARとして公開しています

古いバージョンのcom.Android.tools.build:gradle(つまり、0.5.4)を使用してもかまわない場合は、 このブログ投稿 で説明されているアプローチを使用できます。 adt-dev mailing-listでの議論 によると、これは0.5.5では機能しません。

次の行をbuild.gradleに追加します。

apply plugin: 'maven-publish'

// load bundleRelease task
// this will not load the task in 0.5.5
Android.libraryVariants

publishing {
    publications {
        maven(MavenPublication) {
            artifact bundleRelease
        }
    }
}

ローカルのMavenリポジトリに公開するには、次のコマンドを呼び出します。

gradle publishToMavenLocal

JARとして公開

Androidライブラリにカスタムリソースがなく、JARとして公開できる場合、0.5.5でも機能する次のbuild.gradleを使用できます。

// build JAR file
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) {
    from "$buildDir/classes/release/"
}

apply plugin: 'maven-publish'

publishing {
    publications {
        maven(MavenPublication) {
            artifact androidReleaseJar
        }
    }
}

ローカルのMavenリポジトリに公開するには、次のコマンドを呼び出します。

gradle publishToMavenLocal
6

ここで説明するようにアップロードアーカイブを定義することで問題を解決しました: Gradleドキュメント52.6.2。Mavenリポジトリへのデプロイ

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: "file://${System.env.HOME}/.m2/repository/")
    }
  }
}

呼び出す

gradle uploadArchives

アーティファクトを(私の場合はローカル)Mavenリポジトリーにデプロイします。私は、ローカルリポジトリのURLを指定するための単純でより柔軟な方法を見つけられませんでした。 mavenLocal()はまだですが、上記は私のニーズに適しています。

0
CyclingSir