studio google configurar actualizar android maven gradle android-studio

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 } } }



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:

  1. ¿Has intentado ejecutar gradle assemble lugar de gradle build ? Esto debería omitir las pruebas, ya que veo que el error está relacionado con la tarea de prueba.
  2. 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.
  3. Intenta crear archivos .aar mano y .aar también al repositorio a mano.
  4. 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.