Android Gradle APK 中复制的重复文件 META-INF/license.txt
Android Gradle Duplicate files copied in APK META-INF/license.txt
我将使用 Spring 添加 RESTful Web 服务支持到我的 Android 应用程序,如此处所述 https://spring.io/guides/gs/consuming-rest-android/。
这是顶级 build.gradle 配置:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
这是我的 app/build.gradle
配置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example"
minSdkVersion 8
targetSdkVersion 17
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'
}
packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
}
}
现在它失败并出现以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
File1: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-rest-template.0.1.RELEASE\e132d929bd181941f79b0d63edafb8a86ae6fd33\spring-android-rest-template-1.0.1.RELEASE.jar
File2: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-core.0.1.RELEASE\e68f0e8e4b636ee30c4de58953be38d9b72a5e3b\spring-android-core-1.0.1.RELEASE.jar
我做错了什么以及如何解决?
在您的应用级别 gradle 文件中写下行
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
它对我有帮助。试试这个代码:)
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
如果所选答案中的解决方案无法解决您的问题,请尝试添加
exclude 'META-INF/ASL2.0'
还有。或者基本上,识别重复文件的名称并将其排除。上面的添加为我解决了这个问题。
添加这些行对我有帮助。
shadowJar {
// Filtering shadow jar contents by file pattern.
exclude 'schemaorg_apache_xmlbeans/attribute/**'
exclude 'schemaorg_apache_xmlbeans/attributegroup/**'
exclude 'schemaorg_apache_xmlbeans/element/**'
exclude 'schemaorg_apache_xmlbeans/identityconstraint/**'
exclude 'schemaorg_apache_xmlbeans/javaname/**'
exclude 'schemaorg_apache_xmlbeans/modelgroup/**'
exclude 'schemaorg_apache_xmlbeans/namespace/**'
exclude 'schemaorg_apache_xmlbeans/src/**'
exclude 'schemaorg_apache_xmlbeans/system/sXML*/**'
exclude 'schemaorg_apache_xmlbeans/system/s8C3F193EE11A2F798ACF65489B9E6078/**'
exclude 'schemaorg_apache_xmlbeans/type/**'
exclude 'repackage/**'
exclude 'LICENSE.txt'
exclude 'NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/maven/**'
// these are only needed when handling Visio files, remove it if you would like to use Visio support
dependencies {
exclude(dependency('com.github.virtuald:curvesapi'))
exclude(dependency('commons-codec:commons-codec'))
}
// Relocate javax dependencies so Android does not choke
relocate 'javax.xml.namespace', 'org.apache.poi.javax.xml.namespace'
relocate 'javax.xml.stream', 'org.apache.poi.javax.xml.stream'
relocate 'javax.xml.XMLConstants', 'org.apache.poi.javax.xml.XMLConstants'
}
这个对我有用:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/spring.schemas'
exclude 'META-INF/spring.tooling'
exclude 'META-INF/INDEX.LIST'
exclude 'META-INF/spring.handlers'
}
configurations {
all*.exclude module: 'classworlds'
all*.exclude module: 'commons-logging'
all*.exclude module: 'httpclient'
all*.exclude module: 'maven-artifact'
all*.exclude module: 'maven-artifact-manager'
all*.exclude module: 'maven-error-diagnostics'
all*.exclude module: 'maven-model'
all*.exclude module: 'maven-project'
all*.exclude module: 'maven-settings'
all*.exclude module: 'plexus-container-default'
all*.exclude module: 'plexus-interpolation'
all*.exclude module: 'plexus-utils'
all*.exclude module: 'wagon-file'
all*.exclude module: 'wagon-http-lightweight'
all*.exclude module: 'wagon-provider-api'
}
使用
packagingOptions {
merge'META-INF/license.txt'
}
或者如果它们相同
packagingOptions {
pickFirst 'META-INF/license.txt'
}
我将使用 Spring 添加 RESTful Web 服务支持到我的 Android 应用程序,如此处所述 https://spring.io/guides/gs/consuming-rest-android/。
这是顶级 build.gradle 配置:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
这是我的 app/build.gradle
配置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example"
minSdkVersion 8
targetSdkVersion 17
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'
}
packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
}
}
现在它失败并出现以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
File1: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-rest-template.0.1.RELEASE\e132d929bd181941f79b0d63edafb8a86ae6fd33\spring-android-rest-template-1.0.1.RELEASE.jar
File2: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-core.0.1.RELEASE\e68f0e8e4b636ee30c4de58953be38d9b72a5e3b\spring-android-core-1.0.1.RELEASE.jar
我做错了什么以及如何解决?
在您的应用级别 gradle 文件中写下行
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
它对我有帮助。试试这个代码:)
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
如果所选答案中的解决方案无法解决您的问题,请尝试添加
exclude 'META-INF/ASL2.0'
还有。或者基本上,识别重复文件的名称并将其排除。上面的添加为我解决了这个问题。
添加这些行对我有帮助。
shadowJar {
// Filtering shadow jar contents by file pattern.
exclude 'schemaorg_apache_xmlbeans/attribute/**'
exclude 'schemaorg_apache_xmlbeans/attributegroup/**'
exclude 'schemaorg_apache_xmlbeans/element/**'
exclude 'schemaorg_apache_xmlbeans/identityconstraint/**'
exclude 'schemaorg_apache_xmlbeans/javaname/**'
exclude 'schemaorg_apache_xmlbeans/modelgroup/**'
exclude 'schemaorg_apache_xmlbeans/namespace/**'
exclude 'schemaorg_apache_xmlbeans/src/**'
exclude 'schemaorg_apache_xmlbeans/system/sXML*/**'
exclude 'schemaorg_apache_xmlbeans/system/s8C3F193EE11A2F798ACF65489B9E6078/**'
exclude 'schemaorg_apache_xmlbeans/type/**'
exclude 'repackage/**'
exclude 'LICENSE.txt'
exclude 'NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/maven/**'
// these are only needed when handling Visio files, remove it if you would like to use Visio support
dependencies {
exclude(dependency('com.github.virtuald:curvesapi'))
exclude(dependency('commons-codec:commons-codec'))
}
// Relocate javax dependencies so Android does not choke
relocate 'javax.xml.namespace', 'org.apache.poi.javax.xml.namespace'
relocate 'javax.xml.stream', 'org.apache.poi.javax.xml.stream'
relocate 'javax.xml.XMLConstants', 'org.apache.poi.javax.xml.XMLConstants'
}
这个对我有用:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/spring.schemas'
exclude 'META-INF/spring.tooling'
exclude 'META-INF/INDEX.LIST'
exclude 'META-INF/spring.handlers'
}
configurations {
all*.exclude module: 'classworlds'
all*.exclude module: 'commons-logging'
all*.exclude module: 'httpclient'
all*.exclude module: 'maven-artifact'
all*.exclude module: 'maven-artifact-manager'
all*.exclude module: 'maven-error-diagnostics'
all*.exclude module: 'maven-model'
all*.exclude module: 'maven-project'
all*.exclude module: 'maven-settings'
all*.exclude module: 'plexus-container-default'
all*.exclude module: 'plexus-interpolation'
all*.exclude module: 'plexus-utils'
all*.exclude module: 'wagon-file'
all*.exclude module: 'wagon-http-lightweight'
all*.exclude module: 'wagon-provider-api'
}
使用
packagingOptions {
merge'META-INF/license.txt'
}
或者如果它们相同
packagingOptions {
pickFirst 'META-INF/license.txt'
}