【问题标题】:Gradle, how to exclude a class/package from dependency jar file?Gradle,如何从依赖项 jar 文件中排除类/包?
【发布时间】:2016-01-28 19:12:35
【问题描述】:

我的主要 build.gradle 文件中有 Findbugs 插件。为了停止它对一些问题的抱怨,我已将annotation.jar 和jsr305.jar 添加到我的libs 文件夹中,并在需要时使用@SuppressFBWarnings。

当我尝试构建我的项目时遇到以下错误。: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 :(

所以,如果可能的话,我正在寻找一种从依赖 jar 文件中排除类的方法。我们有一些模块的东西,因为 jar 文件似乎是不可能的。

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')

    ....
}

任何建议将不胜感激。

【问题讨论】:

  • 这应该允许你不包括来自你的 jar.sourceSets { main { java { include 'com/ourcompany/somepackage/activityadapter/**' include 'com/ourcompany/someotherpackage/** ' exclude 'com/ourcompany/someotherpackage/polling/**' } } } 原帖在这里stackoverflow.com/questions/27965690/…
  • @DougRay 谢谢老兄。是的,我看到了这个建议,我们正在将它用于其他一些课程。但这会阻止我们的类被包含到 jar 文件中。我正在寻找的东西是我有 jar 并且我想告诉 buid 系统不包含一个类。我实际上不确定我的想法是否有效:(
  • hmmm 好吧,下一个最好的步骤可能是浏览 gradle 文档。可能围绕 java 闭包 docs.gradle.org/current/userguide/java_plugin.html.

标签: android jar android-gradle-plugin


【解决方案1】:

尝试像这个例子一样修改 jar 闭包

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*')
        }
}

【讨论】:

  • 不清楚上述内容有何帮助。 OP 询问如何排除由例如 jsr305.jar 引入的依赖项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2016-07-06
  • 2019-09-25
  • 1970-01-01
相关资源
最近更新 更多