Java Gradle任务构建不包括android类的Jar

Java Gradle任务构建不包括android类的Jar,java,android,gradle,jar,Java,Android,Gradle,Jar,我正在编写一个简单的Gradle任务,它应该包含所有的中间类,并将它们打包到.jar文件中,该任务被插入到用于构建Android库的Gradle任务链中 请注意,Android库不是打包在*.aar存档中的,我有一些任务将构建jar,构建一些共享对象并将它们放在一个目录中 到目前为止,我写的任务如下: task createDevJarRelease(type: Jar) { from 'build/intermediates/classes/release' manifest

我正在编写一个简单的Gradle任务,它应该包含所有的中间类,并将它们打包到
.jar
文件中,该任务被插入到用于构建Android库的Gradle任务链中

请注意,Android库不是打包在
*.aar
存档中的,我有一些任务将构建jar,构建一些共享对象并将它们放在一个目录中

到目前为止,我写的任务如下:

task createDevJarRelease(type: Jar) {
    from 'build/intermediates/classes/release'

    manifest {
        attributes 'Implementation-Title': 'MYJar library',  
            'Implementation-Version': '1.0'
    }

    archiveName "my-jar.jar"
    doLast {
        // Copy the jar in the target directory.
        copy {
            include "my-jar.jar"
            from    "build/libs/"
            into    "targetDir"
        }
    }
}
所发生的事情是jar被正确地创建并放置在我的
targetDir
中,但我无法在android项目中实际使用它,因为
jar
文件与我的类一起还包含来自android依赖项的其他类,当包含在android应用程序中时会导致冲突

我进入了
build/intermediates/classes/release
,注意到以下目录层次结构:

build/intermediates/classes/release
    |_ android
    |  |_ arch
    |  |  |_ core
    |  |     |_ ...
    |  |  |_ lifecycle
    |  |     |_ ...
    |  |_ support 
    |    |_ ...
    |    |  |_ ...
    |    |_ ...
    |_ my
      |_ package
        |_ name
          |_ foo.class
          |_ bar.class
为了排除
android
目录下的类,我在网上尝试了不同的解决方案,但没有成功

我尝试在上面的Gradle任务中显式添加
exclude
命令,但根本不起作用(类仍然存在)


使用此
jar
构建应用程序时出现的错误是:

> Task :app:transformDexArchiveWithDexMergerForDebug
Dex: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;

com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
        at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
        at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
        at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)


FAILURE: Build failed with an exception.

项目依赖项包括:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
}

实际的解决方案不是
排除
jar
gradle任务中的类,而是在设置
com.android.support
依赖项时使用
compileOnly
而不是
implementation
,来更改项目的依赖项

解决办法是:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
     androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compileOnly 'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
     androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compileOnly 'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
}