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
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的报错。
Note:依赖项之间的版本不一致也可能导致冲突,需要确保所有的JUnit库(如junit-jupiter-params
、junit-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。
疑问:如何适配如下依赖库版本??
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报错:
> Task :compileDebugUnitTestJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
> Task :testDebugUnitTestFailed 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)
./gradlew clean #清理和重建项目
按照建议clean也失败。
排除重复文件即可,在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博客