Android + eclipse + maven + acciónbarsherlock

He leído muchas cosas sobre actionbarsherlock, maven, android, pero ninguna de las soluciones que he visto funcionó para mí 🙁

Estoy seguro de que estoy bastante cerca de la solución, pero no entiendo y necesito ayuda 🙂

Así que aquí está mi problema, trato de crear un proyecto de maven android con una dependencia de Actionbarsherlock …. Parece bastante fácil, pero siempre he thoses errores

[2013-01-16 18:10:28 - Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl; [2013-01-16 18:10:28 - greennfc-samples] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl; [2013-01-16 18:10:50 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description; [2013-01-16 18:10:50 - greennfc-samples] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description; 

Aquí está mi configuración:

Eclipse Juno M2e 1.2.0 ADT 21 Maven 3.0.4

Aquí está el padre pom:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.sonatype.oss</groupId> <artifactId>oss-parent</artifactId> <version>7</version> </parent> <groupId>com.greennfc.tools</groupId> <artifactId>greennfc</artifactId> <version>1.0.0-SNAPSHOT</version> <name>Green NFC - Parent</name> <description>Android Nfc library for an easer management of NFC features</description> <packaging>pom</packaging> <url>https://github.com/binomed/greennfc</url> <inceptionYear>2013</inceptionYear> <!-- <scm> <connection>scm:git:ssh://[email protected]/octo-online/robospice.git</connection> <url>git:ssh://[email protected]/octo-online/robospice.git</url> <developerConnection>scm:git:ssh://[email protected]/octo-online/robospice.git</developerConnection> <tag>HEAD</tag> </scm> --> <licenses> <license> <name>Apache 2</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> <issueManagement> <system>Github Issue Tracker</system> <url>https://github.com/octo-online/robospice/issues</url> </issueManagement> <developers> <developer> <id>JFG</id> <name>Jean-Francois Garreau</name> <email>[email protected]</email> </developer> </developers> <!-- <mailingLists> <mailingList> <name>RoboSpice Forum/Mailinglist</name> <post>http://groups.google.com/group/robospice</post> <subscribe>http://groups.google.com/group/robospice/subscribe</subscribe> <unsubscribe>https://groups.google.com/group/robospice/subscribe</unsubscribe> </mailingList> </mailingLists> <ciManagement> <system>jenkins</system> <url>https://robospice.ci.cloudbees.com/job/Build%20RoboSpice/</url> </ciManagement> --> <modules> <!-- core library --> <module>greennfc-core</module> <!-- Base librairies elements --> <module>greennfc-filters</module> <!-- extensions --> <!-- Demo --> <module>greennfc-samples</module> </modules> <properties> <android.version>4.1.1.4</android.version> <android-platform.version>14</android-platform.version> <android-annotations.version>4.1.1.4</android-annotations.version> <android-support.version>r7</android-support.version> <android-maven-plugin.version>3.5.0</android-maven-plugin.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <github.global.server>github</github.global.server> <maven.javadoc.skip>true</maven.javadoc.skip> </properties> <!-- TODO : remove this when android maven plugin 3.4.2 is out --> <pluginRepositories> <pluginRepository> <id>oss.sonatype.org-jayway-snapshots</id> <name>Jayway OpenSource SNAPSHOTs on Sonatype.org</name> <url>http://oss.sonatype.org/content/repositories/jayway-snapshots/</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <dependencyManagement> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>annotations</artifactId> <version>${android-annotations.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>${android.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <version>${android.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>provided</scope> </dependency> <!-- https://stackoverflow.com/questions/5591811/ignoring-innerclasses-attribute-warning-is-killing-eclipse --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <!-- https://stackoverflow.com/questions/13040788/how-to-elimate-the-maven-enforcer-plugin-goal-enforce-is-ignored-by-m2e-wa --> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>enforce</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>copy-dependencies</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>${android-maven-plugin.version}</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> <configuration> <links> <link>http://commons.apache.org/lang/api</link> <link>http://java.sun.com/j2se/1.5.0/docs/api</link> </links> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> </plugin> <!-- deploy artifacts to github for downloads --> <plugin> <groupId>com.github.github</groupId> <artifactId>downloads-maven-plugin</artifactId> <version>0.6</version> <configuration> <description>${project.version} release of ${project.name}</description> <override>true</override> <includeAttached>true</includeAttached> <includes> <include>${project.artifactId}-${project.version}.jar</include> </includes> </configuration> <executions> <execution> <goals> <goal>upload</goal> </goals> <phase>deploy</phase> </execution> </executions> </plugin> <!-- deploy javadoc and maven site to github --> <plugin> <groupId>com.github.github</groupId> <artifactId>site-maven-plugin</artifactId> <version>0.7</version> <configuration> <message>Creating site for ${project.version}</message> </configuration> <executions> <execution> <goals> <goal>site</goal> </goals> <phase>site</phase> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.0</version> <configuration> <reportPlugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.2</version> <configuration> <dependencyDetailsEnabled>true</dependencyDetailsEnabled> <dependencyLocationsEnabled>true</dependencyLocationsEnabled> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> </plugin> </reportPlugins> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.3.2</version> <configuration> <autoVersionSubmodules>true</autoVersionSubmodules> </configuration> </plugin> </plugins> </pluginManagement> </build> <profiles> <profile> <id>sign</id> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <properties> <maven.javadoc.skip>false</maven.javadoc.skip> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> </plugin> </plugins> </build> </profile> </profiles> 

Y aquí está el pom de mi proyecto

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.greennfc.tools</groupId> <artifactId>greennfc</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>greennfc-samples</artifactId> <packaging>apk</packaging> <name>Green Nfc - Samples</name> <properties> <notificationcompat2.version>1.1.2</notificationcompat2.version> <actionbarsherlock.version>4.2.0</actionbarsherlock.version> <roboguice.version>2.0</roboguice.version> <robosherlock.version>1.4</robosherlock.version> <google.http.client.version>1.12.0-beta</google.http.client.version> <simplexmlserializer.version>2.6.6</simplexmlserializer.version> <jackson.version>1.9.9</jackson.version> </properties> <dependencies> <!-- Green Nfc dependencies --> <dependency> <groupId>com.greennfc.tools</groupId> <artifactId>greennfc-core</artifactId> <version>${project.version}</version> </dependency> <!-- Other libs --> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> <version>${android-support.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.actionbarsherlock</groupId> <artifactId>actionbarsherlock</artifactId> <version>${actionbarsherlock.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.actionbarsherlock</groupId> <artifactId>actionbarsherlock</artifactId> <version>${actionbarsherlock.version}</version> <type>apklib</type> <scope>provided</scope> </dependency> </dependencies> <build> <sourceDirectory>src/</sourceDirectory> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> <assetsDirectory>${project.basedir}/assets</assetsDirectory> <resourceDirectory>${project.basedir}/res</resourceDirectory> <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory> <sdk> <platform>${android-platform.version}</platform> </sdk> <undeployBeforeDeploy>true</undeployBeforeDeploy> </configuration> <extensions>true</extensions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> 

Aquí lo que intento:

Maven Android Project con Test Suite http://v.zasadnyy.com/blog/abs-maven-eclipse-integration/

Como proyecto de actionbarsherlock, estoy usando el jefe del repositorio git, copié el directorio de la biblioteca, lo pegué en la misma carpeta que mi proyecto padre y lo cambio de nombre de acuerdo a {groupId} – {artifactId} – {version}

Estoy realmente abierto a reiniciar desde cero y encontrar una manera de hacerlo bien porque no entiendo por qué no funciona … 🙁

Gracias de antemano por tu ayuda

Así es como lo arreglé. Es debido a que Maven intenta exportar sus dependencias cuando Eclipse también está exportando sus dependencias de Android:

  1. Proyecto-> Propiedades-> Java Build Path
  2. Vaya a la pestaña de pedido y exportación.
  3. Desactive la opción "Dependencias de Maven" para que no se exporten dos veces.
  4. Limpiar y tratar de ejecutarlo.
  5. Si todavía no funciona, también desmarque "Android Dependencies".

Tuve un problema muy similar con Maven , Eclipse y ActionBarSherlock . El problema es que la biblioteca de soporte se pone en la ruta de construcción dos veces, haciendo que el dexopt confundido acerca de las declaraciones múltiples.

Yo era capaz de deshacerse de uno de los lugares donde dexopt estaba encontrando la biblioteca de soporte cambiando el pom.xml de ActionBarSherlock de

 <dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> </dependency> 

a

 <dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> <scope>provided</scope> </dependency> 

Asegúrese de limpiar el proyecto después de guardar este cambio.

Usted necesita identificar qué dependencias en su pom.xml están incluyendo las clases que el compilador de Dalvik se está quejando sobre.

  1. En eclipse, puede identificar a qué tipo de jar pertenece la clase problemática por Open Type (en mac Command-T).

  2. A continuación, determinar qué dependencias transitivas a los frascos que tiene buscando cada dependencia directa que tiene en maven central . Y mirando en los proyectos pom.xml.

  3. Una vez identificado, debe agregar cláusulas de exclusión a la configuración de dependencia correspondiente en su proyecto pom.xml.

Proyecto pom.xml:

 <dependencies> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <exclusions> <exclusion> <artifactId>org.hamcrest</artifactId> <groupId>hamcrest</groupId> </exclusion> </exclusions> </dependency> </dependencies> 

Hay una forma de fuerza bruta para hacerlo también. Simplemente abra el proyecto en eclipse, expanda las 'Dependencias de Maven' en el visor de proyectos y, a continuación, agregue la cláusula de exclusión a cada dependencia directa de su proyecto, una por una, cada vez que salte. El plugin de configuración de maven de android volverá a calcular las dependencias en "Dependencias de Maven" y verá desaparecer el tarro problemático. Una vez que usted consigue todos ellos sus errores de Dalvik desaparecerán también.

He intentado hacer que el proyecto de la librería ActionBarSherlock funcione con Maven pero fallé. Cuestiones similares. Así que eliminé las dependencias de maven en el proyecto lib y usé libs / android-support-v4.jar. Btw, la carpeta de prueba también se elimina. Luego ejecuto mi propio proyecto con se refiere al proyecto lib. Las cosas salieron bien.

Ok, gracias a todos por sus respuestas, las cosas que trabajaron para mí fue:

  1. Eliminar supportv4 libs de actionbarsherlock
  2. Comente la importación de junit en el proyecto actionbarsherlock para evitar esta generación
  • Plugin de maven de Android: renameManifestPackage resultados en Resources $ NotFoundException
  • Android-maven-plugin causa java.lang.OutOfMemoryError al intentar crear dex
  • Gradle publica en el repo específico de la Artifactory
  • Creación de Gradle no obtener dependencia del repositorio personalizado de maven
  • ClassNotFoundException pero puedo encontrar esta clase en classes.dex
  • Java.lang.UnsatisfiedLinkError después de actualizar a Android 5.0
  • Android maven plugin no obtiene ANDROID_HOME env variable en Eclipse
  • ¿Cómo subir el módulo a JCenter usando el plugin de binario de gradle?
  • Instalar todos los artefactos de módulos en el repositorio de maven personalizado usando Gradle y Android Studio
  • Bintray: No se pueden cargar archivos: el grupo Maven, el artefacto o la versión definidos en el archivo pom no coinciden
  • Adición de un proyecto Eclipse "Biblioteca Android" y construcción a través de Maven
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.