11
votes

java.lang.illegalargumentException: déjà ajouté: LORG / HAMCREST / BASEESPRÉDITION; La conversion au format DALVIK a échoué avec erreur 1

Tout d'abord, il y a au moins 2 messages avec le même problème, mais ces solutions ne fonctionnent plus, du moins pas dans mon installation.

J'utilise M2e avec Eclipse et Android et essayé de courir le application comme "application Android" en sélectionnant l'exécution AS-> application Android, mais je reçois toujours cette erreur: p>

INATTENDU TOP NIVEAU EXCEPTION: java.lang.IllegalArgumentException: déjà ajouté: LORG / hamcrest / BaseDescription;
. . . P>

[08/09/2012 19:50:41 - net.mydomain.project-COFFRE] Conversion à le format Dalvik échoué avec l'erreur 1 p> Blockquote>

Il est le problème décrit ici Outils section R14. Tout d'abord, cela ne peut pas être fixée parce que j'ai cette question dans ADT 20.0.3. Deuxièmement, je n'ai pas ces soi-disant dossiers « _src ». Je ne les ai jamais vu dans un projet Maven avant, donc je ne sais pas ce que je dois faire maintenant. Je n'ai même pas des bibliothèques liées deux fois. Au moins, je ne vois pas un peu dans mon projet. Toute idée comment obtenir ce travail p>

Voici mon pom.xml si cela aide: p>

<?xml version="1.0" encoding="UTF-8"?>
  <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/maven- v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.devgems.android</groupId>
    <artifactId>kurzparkzonewien</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>kurzparkzonewien</name>

    <properties>
        <platform.version>1.6_r2</platform.version>
        <android.sdk.path>/opt/android-sdk-linux</android.sdk.path>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>${platform.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!-- Make sure this is below the android dependencies -->
        <dependency>
            <groupId>com.pivotallabs</groupId>
            <artifactId>robolectric</artifactId>
            <version>1.0-RC1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <outputDirectory>target/classes</outputDirectory>
        <testOutputDirectory>target/test-classes</testOutputDirectory>

        <plugins>
            <plugin>
                 <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.1.1</version>
                <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>4</platform>
                        <path>${android.sdk.path}</path>
                    </sdk>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
   </project>


0 commentaires

3 Réponses :


12
votes

J'ai trouvé la solution. Cela dépend de la version Junit, car Junit 4.10 ajoute une bibliothèque Junit Bibliothèque et Jar Hamcrest, bien que Junit 4.10 contienne déjà toutes les classes de Hamcrest, alors Hamcrest existe deux fois alors. Si je revenais à Junit 4.8.1, cela n'ajoute pas à HamCrest en tant que bibliothèque et l'erreur est partie.

Cette solution est en réalité une solution de contournement. Habituellement, le plug-in Eclipse Maven devrait gérer cela, mais Hamcrest / Junit constitue un problème spécial, car Junit inclut Hamcrest, pas comme une dépendance, mais en code.


2 commentaires

Spot sur! Dans mon cas, j'essayais d'utiliser ActionbarHerlock 4.2.0 en tant que projet de bibliothèque, et cela apportait Junit 4.10 comme une dépendance à mon projet! Changer Junit de 4.10 à 4.8.1 dans la bibliothèque d'Actionbarsherlock Pom.xml corrigé. Merci beaucoup!


Si vous souhaitez continuer à utiliser 4.10, vous pouvez exclure explicitement le bocal du Hamcrest comme une dépendance transitive de Junit. C'est comment le faire en gradle: InstrumentTestCompile ('Junit: Junit: 4.10') {Exclure la groupe: 'Org.hamcrest'} Voir ici pour l'équivalent Maven: Maven.apache.org/Guides/Introduction /...



1
votes

Malheureusement, Eclipse ne comprend pas la portée du test Maven. Il tire les cours de Hamcrest dans la construction avec Junit 4.10. Utilisez Junit 4.8.1 ou, si vous devez vraiment utiliser la version 4.10+ de Junit, vous pouvez utiliser un profil Maven sans le Junit Dep dans Eclipse.

  1. Incluez le JUNIT DEP dans le profil par défaut et créez un profil «NON-JUNIT» vide (voir exemple POM ci-dessous)
  2. Propriétés du projet Eclipse> Maven> Profils actifs Maven: Non-Junit
  3. Ajoutez manuellement la bibliothèque junit au chemin de votre projet Eclipse de votre projet

    Voici la partie pertinente du pom.xml: xxx


1 commentaires

Le point 3 est une très mauvaise idée. Ceci est un projet maven, de sorte que Maven doit administrer le projet lui-même. Si vous commencez à ajouter manuellement des bibliothèques, personne ne peut éventuellement reproduire ce que vous avez fait.



13
votes

J'ai essayé les solutions ci-dessus et j'ai toujours eu l'erreur. Seulement après plus d'essais et une erreur, j'ai découvert que les classes du hardcrest sont également contenues dans un autre pot: Mockito (je n'étais pas encore au courant que Makito ne fonctionne pas avec mes tests d'instrumentation)

J'ai donc résolu mon problème en supprimant le moqueur -All.jar de mes dépendances et exclu du hamcrest des dépendances transitives de Junit comme ceci: xxx

Cette exclusion peut également être nécessaire pour la journalisation des communes (à compter de la date de la date de Écrire) Parce que sinon le constructeur APK protestera sur les anciennes classes.


2 commentaires

La seule solution qui correspond à mes besoins. J'ai visité chaque lien sur Google et rien. Merci.


Par code.google.com/p/mockito/wiki/... Je viens de changer la dépendance de Mockito-All to Mockito-Core, ce qui a effectivement fait la même chose d'éliminer le noyau du hamcrest d'être groupée avec moqueur, mais sans avoir à ajouter l'exclusion.