google - gradle version android studio
La dependencia de la biblioteca Android Gradle con la dependencia de la biblioteca con Nexus (8)
Estoy cambiando mi proyecto a usar Gradle y un SonaType Nexus interno para alojar mis dependencias. Mi proyecto principal depende del proyecto de biblioteca A y el proyecto de biblioteca A tiene una dependencia en el proyecto de biblioteca B.
Mi problema es que, tan pronto como agregue LibA a mi proyecto principal, aparece este error: "Versión del módulo com.example: LibA: 1.1 depende de las bibliotecas, pero no es una biblioteca en sí"
No tengo problemas para agregar proyectos de biblioteca con dependencias jar con el mismo script de compilación. He visto gente haciendo esto con éxito con LOCAL (en el proyecto) bibliotecas de Android pero nadie lo hace con maven repos.
¿Es esto un error en Gradle o configuré incorrectamente las compilaciones de la biblioteca?
Construcción del proyecto principal
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 Build
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 Build
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 {
} ...
Editar: Agregar salida de información para el error.
* 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
Edición 2: Agregar mi script de carga maven local para LibA
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
}
}
}
En mi trabajo, he utilizado compile project('':google-play-services_lib'')
lugar de compile (''google-play-services_lib'')
cuando declaro proyectos dependientes en mi archivo build.gradle. Creo que es la forma correcta de hacerlo con Gradle: http://www.gradle.org/docs/current/userguide/dependency_management.html#sub:project_dependencies
Su línea en las dependencias para incluir LibA es incorrecta. Para incluir un proyecto de biblioteca, use esto:
compile project('':LibA'')
Si el directorio de la biblioteca no está en la raíz del directorio de su proyecto, deberá especificar una ruta delimitada por dos puntos. Por ejemplo, si su estructura de directorio es:
projectFolder | +--coreProject | +--libraries | +--LibA | +--LibB
tu dependencia será:
compile project('':libraries:LibA'')
Esto es lo mismo que la notación que usa en su archivo settings.gradle.
si no desea tenerlo como submódulo en el primer archivo build.gradle, puede agregar su repositorio maven local
mavenLocal ()
//repositories
repositories {
mavenCentral()
mavenLocal()
}
pero necesita ejecutar la instalación en libA primero.
Tal vez el problema es que usa mavenCentral como su repositorio para proyectos de biblioteca
repositories {
mavenCentral()
}
y no tuyo repositorio nexo donde existen dependencias reales
repositories {
maven {
url "http://localhost:8081/nexus/content/repositories/releases/"
}
maven {
url "http://localhost:8081/nexus/content/repositories/central/"
}
}
Tuve un mensaje de error similar después de introducir por error una dependencia cíclica entre bibliotecas:
build.gradle en commons-utils
dependencies {
...
instrumentTestCompile project('':test-utils'')
}
build.gradle en utilidades de prueba
dependencies {
...
compile project('':commons-utils'')
}
Reparar esto resolvió el problema. El mensaje de error no es muy explícito.
No estoy seguro, solo un par de pensamientos:
- ¿Has intentado ejecutar
gradle assemble
lugar degradle build
? Esto debería omitir las pruebas, ya que veo que el error está relacionado con la tarea de prueba. - Quizás sea estúpido, pero intente eliminar depency en 2nd lib del primero y póngalo en su lista de archivos de compilación principal antes de la primera. Tengo un recuerdo de algo relacionado. De esta forma, la segunda lib puede agregarse a classpath permitiendo que el primero compile.
- Intenta crear archivos
.aar
mano y.aar
también al repositorio a mano. - Es un truco, pero tal vez funcione: ¿ha considerado excluir esto
:GradleTest
módulo:GradleTest
? Ver la sección 50.4.7
Si cargó artefactos de biblioteca para jar y aar, intente esto.
compile ''com.example:LibA:1.1.1@aar''
Este problema se ha ido con las versiones posteriores de Gradle y el complemento Gradle de Android. Parece que acaba de ser un error de lanzamiento anticipado.