Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件) [英] Gradle duplicate entry error: META-INF/MANIFEST.MF (Or how to delete a file from jar)

查看:73
本文介绍了Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我克隆了一个github存储库,因为我想研究代码,但是当我尝试在Android Studio中构建它时,我遇到了一些麻烦.添加 google maven 存储库(按照 Android Studio 的提示)并更新 Gradle 插件版本和成绩版本(分别为 3.5.2 和 5.4.1)后,由于以下错误,构建失败:

I've cloned a github repository because I wanted to study the code, but when I tried to build it in Android Studio, I ran into some trouble. After adding the google maven repository (as prompted by Android Studio) and updating both the Gradle Plugin Version and the Grade Version (to 3.5.2 and to 5.4.1, respectively), the build fails because of the following error:

原因:重复条目:META-INF/MANIFEST.MF

Cause: duplicate entry: META-INF/MANIFEST.MF

更具体地说:

引起:java.util.zip.ZipException:重复条目:META-INF/MANIFEST.MF

Caused by: java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF

这是我的项目级 build.gradle 文件:

Here is my project level build.gradle file:


    buildscript {
        repositories {
            jcenter()
            google()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.2'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            jcenter()
    
            maven {
                url 'https://maven.google.com'
            }
    
        }
    }

这是我的模块 build.gradle 文件(在尝试之前):

Here's my module build.gradle file (before trying anything):


    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 22
        buildToolsVersion '28.0.3'
    
        defaultConfig {
            applicationId "com.thelittlenaruto.supportdesignexample"
            minSdkVersion 11
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1')
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

这是我迄今为止尝试过的:

Here's what I've tried so far:

  • 将以下内容添加到我的模块 build.gradle 文件的 android 部分:

    sourceSets {
            main{
                java{
                    exclude '**/META-INF/MANIFEST'
                    exclude '**/META-INF/MANIFEST.MF'
                    exclude 'META-INF/MANIFEST'
                    exclude 'META-INF/MANIFEST.MF'
                    exclude '!META-INF/MANIFEST.MF'
                }
            }
        }

  • 添加:
  • 
        sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
            sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
    
    

    • 还有这个:
    • 
          packagingOptions {
                  apply plugin: 'project-report'
                  exclude '**/META-INF/MANIFEST'
                  exclude '**/META-INF/MANIFEST.MF'
                  exclude 'META-INF/MANIFEST'
                  exclude 'META-INF/MANIFEST.MF'
                  exclude '!META-INF/MANIFEST.MF'
              }
      
      

      • 还有这个:
      • 
            packagingOptions {
                    pickFirst '**/META-INF/MANIFEST'
                    pickFirst '**/META-INF/MANIFEST.MF'
                    pickFirst 'META-INF/MANIFEST'
                    pickFirst 'META-INF/MANIFEST.MF'
                    pickFirst '!META-INF/MANIFEST.MF'
                }
        
        

        • 这个:
        • 
              aaptOptions {
                      ignoreAssetsPattern "!META-INF/MANIFEST.MF"
                      ignoreAssetsPattern "META-INF/MANIFEST.MF"
                  }
          
          

          我想我已经尝试了这个问题中的大部分内容:如何从 Android Studio gradle 构建中排除某些文件?

          I think I've tried mostly everything in this question: How to exclude certain files from Android Studio gradle builds?

          没有任何效果.

          在寻找解决方案后,我认为问题是我有重复的依赖项.所以我尝试了以下方法:

          After searching for a solution, I think the problem is that I have duplicated dependencies. So I've tried the following:

          
              dependencies {
                  implementation fileTree(dir: 'libs', include: ['*.jar'])
                  implementation ('com.android.support:appcompat-v7:22.2.1'){
                      exclude module: 'support-v4'
                  }
                  implementation ('com.android.support:design:22.2.1')
                  implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
              }
          
          

          还有这个:

          
              dependencies {
                  implementation fileTree(dir: 'libs', include: ['*.jar'])
                  implementation ('com.android.support:design:22.2.1'){
                      exclude module: 'support-v7'
                  }
                  implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
              }
          
          

          我仍然遇到同样的错误.

          I still get the same error.

          我做错了什么?

          推荐答案

          正如 Rajen Raiyarela 所说,转到File->Project Structure->Project->Android Gradle Plugin Version 并将其从 3.5.2 降级到 3.5.1.

          As Rajen Raiyarela said, go to File->Project Structure->Project->Android Gradle Plugin Version and downgrade it from 3.5.2 to 3.5.1.

          这篇关于Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆