Gradle 打包过程中的重复文件 - messages.properties JodaTime
Gradle duplicate files during packing - messages.properties of JodaTime
我最近在 Android 中用 Joda
的 DateTime
类 替换了 Java
的 Date
类应用程序。我使用 Jackson
来解析 json
。我将以下行添加到我的 build.gradle 文件
compile com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.3
compile net.danlew:android.joda:2.7.1
它破坏了我的构建。错误消息是 duplicate files during packaging of APK
。它还建议以下选项
android {
packagingOptions {
exclude 'org/joda/time/format/messages_da.properties'
}
}
JodaTime 中有很多这样的文件,如 "messages_da.properties"、"messages_fr.properties"。我相信那些用于提供基于语言环境的格式。
我的直觉是这些文件不应该被排除在外。如果有高手能给出解决方案就好了
我的肮脏解决方案:
android {
packagingOptions {
exclude 'META-INF/maven/joda-time/joda-time/pom.properties'
exclude 'META-INF/maven/joda-time/joda-time/pom.xml'
pickFirst 'org/joda/time/format/messages.properties'
pickFirst 'org/joda/time/format/messages_cs.properties'
pickFirst 'org/joda/time/format/messages_da.properties'
pickFirst 'org/joda/time/format/messages_de.properties'
pickFirst 'org/joda/time/format/messages_en.properties'
pickFirst 'org/joda/time/format/messages_es.properties'
pickFirst 'org/joda/time/format/messages_fr.properties'
pickFirst 'org/joda/time/format/messages_it.properties'
pickFirst 'org/joda/time/format/messages_ja.properties'
pickFirst 'org/joda/time/format/messages_no.properties'
pickFirst 'org/joda/time/format/messages_nl.properties'
pickFirst 'org/joda/time/format/messages_pl.properties'
pickFirst 'org/joda/time/format/messages_pt.properties'
pickFirst 'org/joda/time/format/messages_ru.properties'
pickFirst 'org/joda/time/format/messages_tr.properties'
}
}
我解决了这个问题
android {
packagingOptions {
exclude 'org/joda/time/format/*.properties'
}
}
这实际上是由于依赖项目中的多个 joda-time
模块而导致的问题。
要解决此问题,您应该从项目中包含重复 joda-time
模块的任何依赖项中排除任何重复的 joda-time
模块。
要找出包含重复项 joda-time
的依赖项,请使用命令 ./gradlew app:dependencies
列出完整的依赖项图。然后查看依赖项列表并找到包含重复 joda-time
模块的依赖项。然后从包含它的副本的任何依赖项中排除 joda-time
。完成此操作后,您的应用程序将正常构建。
如何从依赖项中排除 joda-time
的示例:
// An offending dependency that contains a duplicate joda-time.
compile('com.some.project:some-module:0.1') {
// Exclude joda-time from this dependency to remove the errors.
exclude module: 'joda-time'
}
这是处理依赖冲突的正确方法。
我最近在 Android 中用 Joda
的 DateTime
类 替换了 Java
的 Date
类应用程序。我使用 Jackson
来解析 json
。我将以下行添加到我的 build.gradle 文件
compile com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.3
compile net.danlew:android.joda:2.7.1
它破坏了我的构建。错误消息是 duplicate files during packaging of APK
。它还建议以下选项
android {
packagingOptions {
exclude 'org/joda/time/format/messages_da.properties'
}
}
JodaTime 中有很多这样的文件,如 "messages_da.properties"、"messages_fr.properties"。我相信那些用于提供基于语言环境的格式。
我的直觉是这些文件不应该被排除在外。如果有高手能给出解决方案就好了
我的肮脏解决方案:
android {
packagingOptions {
exclude 'META-INF/maven/joda-time/joda-time/pom.properties'
exclude 'META-INF/maven/joda-time/joda-time/pom.xml'
pickFirst 'org/joda/time/format/messages.properties'
pickFirst 'org/joda/time/format/messages_cs.properties'
pickFirst 'org/joda/time/format/messages_da.properties'
pickFirst 'org/joda/time/format/messages_de.properties'
pickFirst 'org/joda/time/format/messages_en.properties'
pickFirst 'org/joda/time/format/messages_es.properties'
pickFirst 'org/joda/time/format/messages_fr.properties'
pickFirst 'org/joda/time/format/messages_it.properties'
pickFirst 'org/joda/time/format/messages_ja.properties'
pickFirst 'org/joda/time/format/messages_no.properties'
pickFirst 'org/joda/time/format/messages_nl.properties'
pickFirst 'org/joda/time/format/messages_pl.properties'
pickFirst 'org/joda/time/format/messages_pt.properties'
pickFirst 'org/joda/time/format/messages_ru.properties'
pickFirst 'org/joda/time/format/messages_tr.properties'
}
}
我解决了这个问题
android {
packagingOptions {
exclude 'org/joda/time/format/*.properties'
}
}
这实际上是由于依赖项目中的多个 joda-time
模块而导致的问题。
要解决此问题,您应该从项目中包含重复 joda-time
模块的任何依赖项中排除任何重复的 joda-time
模块。
要找出包含重复项 joda-time
的依赖项,请使用命令 ./gradlew app:dependencies
列出完整的依赖项图。然后查看依赖项列表并找到包含重复 joda-time
模块的依赖项。然后从包含它的副本的任何依赖项中排除 joda-time
。完成此操作后,您的应用程序将正常构建。
如何从依赖项中排除 joda-time
的示例:
// An offending dependency that contains a duplicate joda-time.
compile('com.some.project:some-module:0.1') {
// Exclude joda-time from this dependency to remove the errors.
exclude module: 'joda-time'
}
这是处理依赖冲突的正确方法。