【问题标题】:Eclipse Gradle Plugin: <some pom file> cannot be read or is not a valid ZIP fileEclipse Gradle 插件:<some pom file> 无法读取或不是有效的 ZIP 文件
【发布时间】:2015-04-18 02:57:14
【问题描述】:

我使用gradle init 将一个Maven 项目转换为Gradle,之后gradle install 在控制台上成功运行。然而,在 Eclipse gradle 导入之后,我得到了错误:

Archive for required library: '[...].gradle/caches/modules-2/files-2.1/org.apache.jena/apache-jena-libs/2.12.0/[some hash value]/apache-jena-libs-2.12.0.pom' in project 'myproject' cannot be read or is not a valid ZIP file.

现在让我感到困惑的是,这个文件不是 ZIP(或 JAR)文件,而是一个 .pom 文件。为什么它会尝试将 POM 作为 ZIP 打开,我该如何解决这个问题?

我在 Arch Linux 上的 Eclipse 4.4 Luna 上使用 Gradle IDE 3.6.3 和 Gradle 2.3。

【问题讨论】:

  • “Eclipse gradle 导入”是什么意思?您是否尝试过gradle cleanEclipse,然后它又可以工作了吗?您可以使用-s 运行并包含堆栈跟踪吗?
  • 我的意思是我使用 Eclipse IDE 中的导入功能。不幸的是,我无法提供堆栈跟踪,因为问题不会出现在命令行上。
  • 您是否尝试过使用gradle cleanEclipse eclipse 并将其作为现有项目导入到Eclipse 中?
  • 是的,我也试过了。
  • 那行得通吗,还是你得到同样的错误?

标签: java eclipse maven gradle


【解决方案1】:

我最近遇到了 jboss-ejb3-1.1.5.pom 的类似问题。它看起来像 Gradle Eclipse 插件中的一个错误,因为 pom 类型的 maven 依赖项包含在 .classpath 文件中。我认为它应该包含该 .pom 文件中提到的依赖项。我通过在我的 build.gradle 文件中添加一个 hack 来解决这个问题,以便在 eclipse 插件生成 .classpath 文件时不包含“.pom”文件。

eclipse {
            classpath {
                downloadSources = false;            
                // Following block of code is to remove .pom classpath entries in .classpath files 
                file {
                    whenMerged { classpath ->
                        Iterator i = classpath.entries.iterator()
                        while (i.hasNext()) {
                            org.gradle.plugins.ide.eclipse.model.ClasspathEntry classpathEntry = i.next()
                            if(classpathEntry.kind.equals('lib') && classpathEntry.path.endsWith(".pom")) {
                                println('Removing ' + classpathEntry + ' from classpath entry')
                                i.remove()
                            }
                        }
                    }
                }
            }
        }

【讨论】:

  • 我遇到了类似的问题,即依赖关系 jboss-ejb3-1.1.5jbossas-as-tomcat-5.1.0.GA 的传递性。我设法通过将其从传递依赖中排除来解决,因为我的项目不需要它。
  • 谢谢!不过有评论 - 在我的 gradle (v2.4) 中,pom 的类型是 'var' 而不是 'lib'
【解决方案2】:

pom 文件中的依赖项是否正确

<dependency>
    <type>pom</type>
</dependency>

否则它将在 repo 中查找 jar 文件。

【讨论】:

    【解决方案3】:

    我通过在项目属性->Java 构建路径中删除有问题的 POM 依赖项来解决此问题

    它编译了我的项目,我至少可以调试我的单元测试!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 2019-01-24
      • 2011-07-26
      相关资源
      最近更新 更多