Duplicate files copied in APK META-INF/解决方式

本文介绍了解决因多个Jar包包含相同文件而导致的构建错误的方法。通过在build.gradle文件中排除重复文件,可以有效避免打包时的冲突。

这是因为引用的jar包包含了相同的文件,打包时因为避免相互覆盖,提示报错,build.gradle文件添加如下即可

packagingOptions{
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
}


--- ## ✅ 问题分析 你遇到的报错信息如下: ``` Entry META-INF/gradle-plugins/XmlPlugin.properties is a duplicate but no duplicate handling strategy has been set. ``` 这说明 Gradle 在打包插件时,检测到多个地方都尝试生成或添加: ``` META-INF/gradle-plugins/XmlPlugin.properties ``` 文件,但没有设置如何处理重复项,导致构建失败。 --- ## ✅ 原因总结 Gradle 的 `java-gradle-plugin` 插件在打包插件时,会自动为你生成 `META-INF/gradle-plugins/XmlPlugin.properties` 文件。 但你手动添加了这个文件,导致冲突。 --- ## ✅ 解决方案 ### ✅ 方法一:**删除手动添加的 `META-INF/gradle-plugins/XmlPlugin.properties` 文件** Gradle 的 `java-gradle-plugin` 会自动为你生成这个文件,**不需要手动添加**! 1. 删除你手动创建的文件: ``` src/main/resources/META-INF/gradle-plugins/XmlPlugin.properties ``` 2. 然后再次运行: ```bash ./gradlew publishToMavenLocal ``` --- ### ✅ 方法二:保留手动添加的文件,但设置 `duplicatesStrategy` 如果你确实需要手动控制该文件的内容(例如添加自定义元数据),可以显式设置资源处理任务的 `duplicatesStrategy`。 #### 修改 `build.gradle` 文件如下: ```groovy tasks.withType(ProcessResources) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } ``` 或者更具体地设置: ```groovy tasks.processResources { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } ``` 这样即使有重复的资源文件,Gradle 也不会报错,而是自动跳过。 --- ## ✅ 推荐做法 如果你使用了 `java-gradle-plugin` 插件,并且在 `gradlePlugin` 块中正确配置了插件 ID 和实现类,**不需要手动添加 `META-INF` 文件**。Gradle 会自动为你生成。 ### ✅ 正确配置如下: ```groovy gradlePlugin { plugins { xmlPlugin { id = 'XmlPlugin' implementationClass = 'plugin.XmlPlugin' } } } ``` Gradle 会自动生成: ``` META-INF/gradle-plugins/XmlPlugin.properties ``` 内容为: ``` implementation-class=plugin.XmlPlugin ``` --- ## ✅ 总结修复步骤 | 问题 | 原因 | 解决方法 | |------|------|-----------| | `META-INF/gradle-plugins/XmlPlugin.properties` 重复 | 手动添加 + `java-gradle-plugin` 自动生成 | 删除手动文件 或 设置 `duplicatesStrategy` | | 构建失败 | Gradle 无法处理重复资源 | 显式设置资源处理策略 | --- ## ✅ 最终建议 - ✅ 如果你使用了 `java-gradle-plugin`,**不要手动添加 `META-INF` 插件配置文件** - ✅ 如果你一定要手动控制,**设置 `duplicatesStrategy = DuplicatesStrategy.EXCLUDE`** - ✅ 确保你的插件类 `plugin.XmlPlugin` 正确存在并实现了 `Plugin<Project>` 接口 --- ## ✅ 示例:最终 `build.gradle` 片段 ```groovy tasks.processResources { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } ``` 或者: ```groovy tasks.withType(ProcessResources) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } ``` --- ## ✅ 成功发布后验证 运行: ```bash ./gradlew publishToMavenLocal ``` 然后查看: ``` C:\Users\chent\.m2\repository\com\example\xml-plugin\1.0.0\ ``` 并在 JAR 文件中检查是否包含: ``` META-INF/gradle-plugins/XmlPlugin.properties ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值