A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 报错

问题

Android Studio 编译应用报错:

 > Task :mergeDebugJavaResource FAILED
Execution failed for task ':mergeDebugJavaResource'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
   > 6 files found with path 'META-INF/LICENSE.md' from inputs:
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\f12fd2d7ff560cfcf83ef1d43af3e91c\transformed\jetified-junit-jupiter-params-5.8.1.jar
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\81c7e304aaee4eab0589cb0a53840877\transformed\jetified-junit-jupiter-engine-5.8.1.jar
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\f4eb14a47c2da4c0945aad87d11e62ba\transformed\jetified-junit-jupiter-api-5.8.1.jar
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\57ac0c987bd184cbecb22817eca3d669\transformed\jetified-junit-platform-engine-1.8.1.jar
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\4785fa22f7dee07c0a6512c652daff8a\transformed\jetified-junit-platform-commons-1.8.1.jar
      - E:\AndroidStudioCode\TestDemoU\.gradle\caches\transforms-4\1f289bcf3cca82d13dca9bf7098bf974\transformed\jetified-junit-jupiter-5.8.1.jar
     Adding a packaging block may help, please refer to
     https://developer.android.com/reference/tools/gradle-api/8.4/com/android/build/api/dsl/Packaging
     for more information

A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 报错_第1张图片

6 files found with path 'META-INF/LICENSE.md'.
Adding a packaging block may help, please refer to
https://developer.android.com/reference/tools/gradle-api/8.4/com/android/build/api/dsl/Packaging
for more information 

问题:出现奇奇怪怪的.gradle 报错,路径还是其他APP目录下的.gradle\caches\transforms-4\文件夹。打开对应功能发现居然高达五六G,只是一个新建的项目,但是没有任何开发的TestDemo Project。

分析

猜测:单元测试添加的依赖影响的吗?全都是junit的报错。

A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 报错_第2张图片

Note:依赖项之间的版本不一致也可能导致冲突,需要确保所有的JUnit库(如junit-jupiter-paramsjunit-jupiter-engine等)都是相同的版本。

是由于build.gradle的junit-jupiter,junit-jupiter-api 和 junit-jupiter-engine不一样版本?

//build.gradle
dependencies {
    implementation 'junit:junit:4.12'
    implementation 'org.mockito:mockito-core:2.7.22'
    implementation 'org.junit.jupiter:junit-jupiter:5.8.1'
    implementation 'androidx.test:core:1.6.1'
    implementation 'androidx.test.ext:junit:1.2.1'

    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
    testImplementation 'junit:junit:4.12'
    // required if you want to use Mockito for unit tests
    testImplementation "org.mockito:mockito-core:4.6.1"  // Mockito的核心
    testImplementation "org.mockito:mockito-inline:4.6.1"  // Mockito的扩展
    testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.1"  // JUnit 5
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.1"  // JUnit 5 引擎
    androidTestImplementation 'androidx.test.ext:junit:1.1.5' // 或者更新到最新版
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' // 或者更新到最新版
    testImplementation 'androidx.test.ext:junit:1.1.5' // 或者更新到最新版
    testImplementation 'androidx.test.espresso:espresso-core:3.5.1' // 或者更新到最新版
}

官方文档的依赖版本信息介绍:https://developer.android.com/jetpack/androidx/releases/test?hl=zh-cn。

疑问:如何适配如下依赖库版本??

  • androidx.test:core
  • androidx.test.ext:junit
  • androidx.test.espresso:espresso-core
  • androidx.test:runner
android junit 依赖版本
dependencies Version
androidx.test:core 1.6.1
androidx.test.ext:junit 1.2.1
androidx.test.espresso:espresso-core 3.5.1
androidx.test:runner 1.5.1

横向分析应用内部逻辑,应该是AndroidJUnit初始化报错的相关问题

@RunWith(AndroidJUnit4.class)
public class BaseTest {
    protected Context mMockApplicationContext;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mMockApplicationContext = getInstrumentation().getContext().createDeviceProtectedStorageContext();
    }

}

test目录文件Run报错:

A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 报错_第3张图片

> Task :compileDebugUnitTestJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :testDebugUnitTest

Failed to instantiate test runner class androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner


java.lang.RuntimeException: Failed to instantiate test runner class androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner


    at androidx.test.ext.junit.runners.AndroidJUnit4.throwInitializationError(AndroidJUnit4.java:129)
    at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:121)
    at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
    at androidx.test.ext.junit.runners.AndroidJUnit4.(AndroidJUnit4.java:56)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)

 Debug

./gradlew clean    #清理和重建项目

按照建议clean也失败。

A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 报错_第4张图片

解决方案

排除重复文件即可,在build.gradle 添加如下配置

android {
    ...
    packagingOptions {
        exclude 'META-INF/LICENSE-notice.md' //本案例是此问题,如下是相关配置
        exclude 'META-INF/LICENSE.md'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

参考:Android 单元测试环境配置问题 Execution failed for task ‘:mergeDebugJavaResource‘.-CSDN博客 

你可能感兴趣的:(#,Android,Studio,IDE,单元测试,android,studio,android,ide,编译报错,单元测试,JUnit,AndroidJUnit)