2013-05-03 4 views
6

У меня есть проект Android Maven и вы хотите использовать в нем Google Guice 3.0.Как настроить зависимость Maven для Guice 3.0 для использования без AOP?

Существует версия «Нет-AOP» Guice, которая совместима с Android.

Как я могу сообщить , чтобы использовать версию «No-AOP» от ?

Update 1 (03.05.2013 10:46 MSK):

Когда я добавить зависимость от Google Guice, я получаю следующее исключение во время сборки (mvn clean install):

[INFO] UNEXPECTED TOP-LEVEL EXCEPTION: 
[INFO] java.lang.IllegalArgumentException: already added: Lcom/google/inject/Abs 
tractModule; 
[INFO] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:12 
3) 
[INFO] at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
[INFO] at com.android.dx.command.dexer.Main.processClass(Main.java:490) 
[INFO] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) 
[INFO] at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
[INFO] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) 
[INFO] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpen 
er.java:245) 
[INFO] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.j 
ava:131) 
[INFO] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java 
:109) 
[INFO] at com.android.dx.command.dexer.Main.processOne(Main.java:422) 
[INFO] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) 
[INFO] at com.android.dx.command.dexer.Main.run(Main.java:209) 
[INFO] at com.android.dx.command.dexer.Main.main(Main.java:174) 
[INFO] at com.android.dx.command.Main.main(Main.java:91) 
[INFO] 1 error; aborting 

Здесь моя зависимость:

<dependencies> 
    <dependency> 
     <groupId>com.google.android</groupId> 
     <artifactId>android</artifactId> 
     <version>4.1.1.4</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.2</version> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.google.inject</groupId> 
     <artifactId>guice</artifactId> 
     <version>3.0</version> 
     <classifier>no_aop</classifier> 
    </dependency> 

    <!-- Make sure this (robolectric dependency) is below the android dependencies --> 
    <dependency> 
     <groupId>com.pivotallabs</groupId> 
     <artifactId>robolectric</artifactId> 
     <version>1.0-RC4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.achartengine</groupId> 
     <artifactId>achartengine</artifactId> 
     <version>1.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.easytesting</groupId> 
     <artifactId>fest-assert-core</artifactId> 
     <version>2.0M8</version> 
    </dependency> 
    <dependency> 
     <groupId>ru.altruix</groupId> 
     <artifactId>ccp-commons</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>ru.altruix</groupId> 
     <artifactId>commons</artifactId> 
     <version>1.11</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.1.4</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.1.4</version> 
    </dependency> 
</dependencies> 

ответ

8

Вы должны указать no_aop в классификаторе, как это:

<dependency> 
    <groupId>com.google.inject</groupId> 
    <artifactId>guice</artifactId> 
    <version>3.0</version> 
    <classifier>no_aop</classifier> 
</dependency> 
+0

Спасибо. Я попробовал это - см. Обновление 1. –

+1

Возможно, [этот ответ] (http://stackoverflow.com/a/9173321/1343161) может помочь вам устранить новую ошибку? – Keppil

+1

Скорее всего, что-то другое тянет не зависимо от Guice. Используйте 'mvn dependency: tree', чтобы узнать. –

2

Если вы хотите, чтобы избавиться от зависимости aopalliance, используйте:

<dependency> 
    <groupId>com.google.inject</groupId> 
    <artifactId>guice</artifactId> 
    <version>3.0</version> 
    <classifier>no_aop</classifier> 
    <exclusions> 
     <exclusion> 
      <artifactId>aopalliance</artifactId> 
      <groupId>aopalliance</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 
0

Google отпугивает Guice использование на Android из-за производительности отражения. Последняя версия no_aop вы можете использовать есть:

compile 'com.google.inject:guice:2.0-no_aop' 

'com.google.inject:guice:3.0-no_aop' больше не находится в хранилище Maven, а также 'com.google.inject:guice:4.1.0-no_aop'.


'com.google.inject:guice:4.1.0 падает на Android с: com.google.common.util.concurrent.ExecutionError: java.lang.ExceptionInInitializerError

и

compile ('com.google.inject:guice:4.1.0') { 
    exclude group: 'aopalliance', module: 'aopalliance' 
} 

аварий с NoClassDefFoundError: org.aopalliance.intercept.MethodInterceptor