プロジェクトを、依存関係をホストするためにGradleと内部SonaTypeNexusを使用するように切り替えています。私のコアプロジェクトはライブラリプロジェクトAに依存しており、ライブラリプロジェクトAはライブラリプロジェクトBに依存しています。
私の問題は、メインプロジェクトにLibAを追加するとすぐに、「モジュールバージョンcom.example:LibA:1.1はライブラリに依存しますが、ライブラリ自体ではありません」というエラーが発生することです。
同じビルドスクリプトでjar依存関係を持つライブラリプロジェクトを追加することに問題はありません。 LOCAL(プロジェクト内)Androidライブラリでこれを成功させている人を見たことがありますが、Mavenリポジトリでこれを行っている人は誰もいません。
これはgradleのバグですか、それともライブラリビルドを誤って構成しましたか?
コアプロジェクトビルド
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'Android'
repositories {
maven {
url "http://localhost:8081/nexus/content/repositories/releases/"
}
maven {
url "http://localhost:8081/nexus/content/repositories/central/"
}
}
Android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
}
}
dependencies {
compile 'com.Android.support:support-v4:+'
compile('com.example:LibA:1.+')
}
LibAビルド
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'Android-library'
Android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 17
versionCode = "3"
versionName = "1.2"
}
Android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
aild.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
repositories {
mavenCentral()
}
dependencies {
compile ('com.example:LibB:1.+')
} ...
LibBビルド
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'Android-library'
Android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 17
versionCode = "1"
versionName = "1.0"
}
Android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
aild.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
repositories {
mavenCentral()
}
dependencies {
} ...
編集:エラーの-info出力を追加します。
* What went wrong:
A problem occurred configuring project ':GradleTest'.
> Failed to notify project evaluation listener.
> Module version com.example:LibA:1.+ depends on libraries but is not a library itself
編集2:LibA用のローカルMavenアップロードスクリプトを追加する
apply plugin: 'maven'
apply plugin: 'signing'
group = "com.example"
version = defaultConfig.versionName
configurations {
archives {
extendsFrom configurations.default
}
}
signing {
required { has("release") && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
uploadArchives {
configuration = configurations.archives
repositories.mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: sonatypeRepo) {
authentication(userName: sonatypeUsername,
password: sonatypePassword)
}
pom.project {
name 'com-example'
packaging 'aar'
description 'none'
url 'https://internal github link'
scm {
url 'scm:git@https://internal github link'
connection 'git@https://internal github link'
developerConnection 'git@https://internal github link'
}
licenses {
license {
name 'example'
url 'example'
distribution 'example'
}
}
developers {
developer {
id 'example'
name 'example'
email 'example'
}
}
groupId "com.example"
artifactId rootProject.name //LibA
version defaultConfig.versionName
}
}
}
この問題は、Gradleの新しいバージョンとAndroid Gradleプラグインで解消されました。初期リリースのバグのようです。
おそらく問題は、ライブラリプロジェクトのリポジトリとしてmavenCentralを使用していることです
repositories {
mavenCentral()
}
実際の依存関係が存在するネクサスリポジトリではありません
repositories {
maven {
url "http://localhost:8081/nexus/content/repositories/releases/"
}
maven {
url "http://localhost:8081/nexus/content/repositories/central/"
}
}
LibAを含めるための依存関係の行が間違っています。ライブラリプロジェクトを含めるには、次を使用します。
compile project(':LibA')
ライブラリのディレクトリがプロジェクトディレクトリのルートにない場合は、コロンで区切られたパスを指定する必要があります。たとえば、ディレクトリ構造が次の場合です。
projectFolder | +-coreProject | +-ライブラリ | +- LibA | +-LibB
依存関係は次のようになります。
compile project(':libraries:LibA')
これは、settings.gradleファイルで使用する表記法と同じです。
Jarとaarの両方のライブラリアーティファクトをアップロードした場合は、これを試してください。
compile 'com.example:LibA:1.1.1@aar'
ライブラリ間に循環依存を誤って導入した後、同様のエラーメッセージが表示されました。
庶民院のbuild.gradle-utils
dependencies {
...
instrumentTestCompile project(':test-utils')
}
test-utilsのbuild.gradle
dependencies {
...
compile project(':commons-utils')
}
これを修正すると問題が解決しました。エラーメッセージはあまり明確ではありません。
確かにわからない、ほんの2、3の考え:
gradle assemble
の代わりにgradle build
を実行してみましたか?エラーはテストタスクに関連しているので、これはテストをスキップするはずです。.aar
ファイルを作成し、それを手作業でリポジトリにアップロードしてみてください。:GradleTest
モジュールを除外することを検討しましたか? セクション50.4.7 を参照してください最初のbuild.gradleファイルのサブモジュールとして使用したくない場合は、ローカルのMavenリポジトリを追加できます。
mavenLocal()
//repositories
repositories {
mavenCentral()
mavenLocal()
}
ただし、最初にlibAでinstallを実行する必要があります。
私の仕事では、build.gradleファイルで依存プロジェクトを宣言するときに、compile project(':google-play-services_lib')
の代わりにcompile ('google-play-services_lib')
を使用しました。これがGradleでこれを行う正しい方法だと思います: http://www.gradle.org/docs/current/userguide/dependency_management.html#sub:project_dependencies