2015-10-28 8 views
0

У меня есть плагин Findbugs в моем основном файле build.gradle. Чтобы остановить жалобу, рассмотрим некоторые проблемы, которые я добавил annotation.jar и jsr305.jar в папку моих libs, и я использую @SuppressFBWarnings везде, где это необходимо.Gradle, как исключить класс/пакет из файла jar зависимости?

Я получаю следующее сообщение об ошибке, когда я пытаюсь построить мой project.:passenger-

app:dexTaxDebug 
UNEXPECTED TOP-LEVEL EXCEPTION: 
com.android.dex.DexException: Multiple dex files define Ljavax/annotation/CheckForNull; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334) 
    at com.android.dx.command.dexer.Main.run(Main.java:277) 
    at com.android.dx.command.dexer.Main.main(Main.java:245) 
    at com.android.dx.command.Main.main(Main.java:106) 
Error:Execution failed for task ':passenger-app:dexTaxDebug'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-oracle/bin/java'' finished with non-zero exit value 2 

Примечание: Я знаю, что решение активации multidex Building Apps with Over 65K Methods. Я также не верю Progard :(

Итак, я ищу способ, чтобы исключить класс из зависимого файла банку, если это возможно. У нас есть кое-что для модулей для кажется, не possile для фляги файла.

compile('com.google.android.gms:play-services-analytics:7.3.0') { 
     exclude group: 'com.google.android.gms', module: 'play-services-base' 
    } 

Что я имею в своем главном build.gradle файла

configure(allprojects) { 
    apply plugin: 'findbugs' 

    task findbugs(type: FindBugs) { 
     ignoreFailures = false 
     effort = "max" 

     classes = fileTree('build/intermediates/classes/') 
     source = fileTree('src/main/java') 
     classpath = files() 

     excludeFilter = file("$rootProject.rootDir/config/findbugs/exclude.xml") 

     reportLevel = "high" 
     reports { 
      xml.enabled = false 
      html.enabled = true 
     } 
    } 
} 

и эти зависимости в моем проекте зависимостей

dependencies { 
    .... 

    // Findbugs libs in order to surpass warnings 
    compile files('src/main/libs/annotations.jar') 
    compile files('src/main/libs/jsr305.jar') 

    .... 
} 

любое предложение будет оценено.

+0

Это должно позволить вам не включать отдельные пакеты из вашего jar.sourceSets { основных { Java { включает «ком/Ourcompany/somepackage/activityadapter/**» включают 'ком/Ourcompany/someotherpackage/**' исключить 'ком/Ourcompany/someotherpackage/опрос/**' }} } оригинальный SO пост здесь http://stackoverflow.com/questions/ 27965690/Gradle-исключить или добавьте ссылки -for-jar-file-hard-included-inside-library-class –

+0

@DougRay Спасибо, человек. Да, я видел это предложение, и мы используем его для некоторых других классов. Но это предотвращает включение нашего класса в файл jar. То, что я ищу, у меня есть jar, и я хочу сказать buid-систему, которая не включает класс. Я на самом деле не уверен, что моя идея работает :( – Hesam

+0

hmmm ok ну следующий лучший шаг, вероятно, будет заключаться в том, чтобы выбрать документацию по градиенту. Вероятно, вокруг закрытия java https://docs.gradle.org/current/userguide/java_plugin. HTML. –

ответ

0

Попробуйте модифицирование закрыть банку, как этот пример может быть

project(':api:core') { 

     dependencies { 
       compile project(':api:schema') 
       compile project(':api:util') 
     } 

     jar { 
       baseName = 'core' 
       dependsOn classes 
       from sourceSets.main.classes 
       exclude('net/intellidata/core/**/*Impl*') 
     } 

     task caaJar(type: Jar) { 
       baseName = 'caa' 
       dependsOn classes 
       from sourceSets.main.classes 
       include('net/intellidata/core/**/CAA*Impl*') 
     } 
} 
Смежные вопросы