在Eclipse中打开Maven POM文件依赖关系层次结构时出错 - “项目读取错误”

时间:2011-06-21 14:44:33

标签: java eclipse maven pom.xml

当我打开POM文件并单击底部的“Dependency Hierarchy”选项卡时,它会给出错误“Project read error”。它适用于同一工作区中的其他项目,而不是这个项目。有什么想法吗?

enter image description here

修改

回应@Yhn的回答。

  1. 从命令行运行Eclipse之外的编译和包阶段按预期工作。它编译应用程序并构建最终的WAR文件。
  2. Eclipse确实指向Maven settings.xml文件的默认位置,因此应该知道其中定义的自定义存储库(我的公司有自己的Maven存储库)。
  3. 我可以从Eclipse打开并编辑POM文件,因此它必须具有该文件的读/写权限。
  4. 项目未在Eclipse中配置为Maven项目,因此我无法从Eclipse运行包阶段(我只能从命令行运行它)。
  5. 我想知道它是否与我在使用Maven 3构建项目时遇到问题有关,因为显然有一些传递依赖项是为Maven 1配置的,Maven 3 does not support(这是我的理论无论如何,基于一些错误消息)。我可以使用Maven 2构建项目,但我仍然收到如下消息:

    Downloading: http://dist.codehaus.org/mule/dependencies/maven2/org/codehaus/xfie/bcprov-jdk14/133/bcprov-jdk14-133.pom
    [INFO] Unable to find resource 'org.codehaus.xfire:bcprov-jdk14:pom:133' in repsitory mule (http://dist.codehaus.org/mule/dependencies/maven2)
    

    但它必须能够找到这些依赖关系,因为它可以很好地下载JAR并构建应用程序。似乎问题是依赖关系没有与它们相关联的POM文件,这也许是为什么它们不能与Maven 3一起使用的原因。这也可能是我无法在Eclipse中查看依赖关系层次结构的原因。

    编辑2

    我通过转到“配置>转换为Maven项目”将项目转换为Maven项目。当我打开POM文件时,我看到错误:

    ArtifactDescriptorException: Failed to read artifact descriptor for woodstox:wst (Click for 140 more)

    (woodstox:wst是该项目的另一个传递依赖)。 “标记”视图中出现错误,表明我的项目中似乎存在每个依赖性和传递依赖性。但是,我可以通过执行“Run As> Maven构建”来成功构建项目。 (编辑:这可能是因为此项目没有Java源代码,但依赖项的JAR正确地出现在最终的WAR中。)依赖性层次结构仍然提供相同的错误 - “项目读取错误”

    关于“无法找到资源”消息 - 但这只出现在少数传递依赖项中。该项目具有更多的传递依赖项,但这些消息不会出现。看起来,因为依赖项没有POM文件,Maven每次构建项目时都会尝试搜索它们。这是正常的没有POM ??

    我如何获得回购经理?这是否必须安装在公司的Maven存储库中,还是可以在自己的工作站上安装?

10 个答案:

答案 0 :(得分:8)

我遇到了一些我需要在我的maven项目中包含的非maven jar的问题。我使用这个maven命令将jar放在我的本地存储库中:

mvn install:install-file -Dfile=/test/gov.nist.xccdf-1.2.jar -DgroupId=gov.nist -DartifactId=xccdf -Dpackaging=jar -Dversion=1.2

然后我将它们称为pom.xml中的依赖项:

    <dependency>
        <groupId>gov.nist</groupId>
        <artifactId>xccdf</artifactId>
        <version>1.2</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

这个工作正常一段时间,但我必须在eclipse中升级一些东西,然后我开始收到你描述的错误。

修复方法是将它们从本地存储库中取出,并重做安装文件,要求maven为您生成一个pom:

mvn -DgeneratePom=true install:install-file -Dfile=/test/gov.nist.xccdf-1.2.jar -DgroupId=gov.nist -DartifactId=xccdf -Dpackaging=jar -Dversion=1.2

该命令将导致在放置jar的同一目录(在本地仓库中)生成一个pom。

在最近版本的eclipse maven支持中,maven构建仍然使用maven 2完成(如果右键单击pom.xml,请选择以mvn包运行)。现在使用嵌入式maven 3插件完成依赖性分析,该插件不喜欢没有pom.xml的依赖项。

答案 1 :(得分:6)

我遇到了同样的问题。如果您将项目设为maven项目,则应运行:

  • 鼠标右键单击项目| Maven |更新依赖关系或
  • 鼠标右键单击项目| Maven |更新项目配置

这对我有用。

答案 2 :(得分:2)

通过评论提供信息:

mvn编译/ mvn包通过控制台工作(我假设在eclipse之外)。基于此,POM文件应该是正确的,并且可以解决依赖关系。

然而;可能是日食的设置不正确。例如,如果eclipse有一些自己的maven属性(而不是默认的〜/ .m2 / settings.xml文件);我可以想象它无法解决maven本身使用的settings.xml中配置的依赖关系。这个设置应该在Eclipse Preferences @ Maven&gt;中。用户设置。

还要确保Eclipse可以实际读取文件(未锁定,正确的权限等)。

这应该是正确的吗?你能尝试从eclipse运行mvn目标吗?您可以通过右键单击项目并选择run as > maven package来执行此操作。这样它应该使用与eclipse使用相同的设置运行maven,并且可能在其配置中显示任何其他错误。

- 回应其他信息:

基本上它告诉你 - 在使用Maven 2时 - 在给定的存储库(codehaus / mule)中找不到依赖项资源(在本例中为bcprov-jdk14)。当我搜索maven模块(bcprov-jdk14)时,我在Maven中央仓库(通过我们的本地关系)@ repo1.maven.org/maven2找到它。也许这会导致您使用Maven2时遇到的错误?

正如Maven 3医生所说;对于Maven 1.x repo的;你应该通过一个repo管理器来代理它们,它可以作为maven 2存储库提供给你(我相信我们也可以通过Sonatype Nexus OSS在这里做一些回购)

ps。:在eclipse中启用maven依赖关系管理应该足以能够使用maven运行目标;如果你想测试它。

-

听起来它可能是多个问题...鉴于普通的maven构建工作正常,人们会认为maven至少可以获得它所依赖的工件及其依赖性......然而,eclipse似乎没有能够。

仔细检查您的Eclipse互联网连接设置是否正确?既然你在谈论公司回购,我假设可能还会有一个代理(我必须设置我的Eclipse才能使用它;但是对于插件(参见下一点))。

根据经验,另一种可能性是* .pom url请求的基于规则的代理块(我们的代理在这里阻止强制使用本地repo管理器,这是多么邪恶和烦人:()。你可能想尝试打开它试图在浏览器中手动下载的.pom文件,看看是否是这种情况(我不能,例如......)。

要设置repo,您​​可能需要让负责存储库的人将其添加为maven2代理。

至少,似乎Eclipse在从互联网获取依赖poms(构建依赖关系树所需)方面存在问题。您总是可以尝试向您的公司询问一些ICT工作人员(如果他们有足够的能力......),也许他们有一些有用的提示。

答案 3 :(得分:1)

当我在没有网络连接的情况下向pom.xml添加新依赖项时,我遇到了同样的问题。在此之后,我遇到了很多问题,例如“Missing artifacts”,“Missing Descriptor”或“Project Read error”。我解决了这个问题

  1. 删除刚刚从本地存储库添加的错误依赖项。
  2. 重建本地索引。
  3. 重新添加依赖项

答案 4 :(得分:1)

<properties>
    <!-- ********************** -->

    <!-- Plugin's properties -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.7</java.version>
</properties>

这个pom设置对我有用

答案 5 :(得分:0)

通常,如果maven无法理解pom中的拼写错误,则会发生这种情况,然后抛出Project read error。就像在我的情况下,我复制了一个maven依赖片段,我通过了版本。它没有输入实际的版本#而是动态地${asciidoctorj.version},而我的pom在属性部分没有这个。所以我收到了这个错误。一旦我删除它并放入版本号,它就开始工作了。

答案 6 :(得分:0)

从其他计算机复​​制本地存储库文件夹后,我有了这个。修复是进入我复制和删除的存储库文件夹 _remote.repositories和'LastUpdated'文件然后刷新Eclipse中的Maven依赖项(Alt + F5)

答案 7 :(得分:0)

我今天也面临同样的情况。就我而言,这是由错误情况下的依赖项名称引起的。例如。

项目A->项目B->项目C 在项目B的pm文件中,我错误地用“ c”而不是“ C”指定了依赖工件名称。

与mac os中一样,文件系统不区分大小写。因此我可以在命令行中构建它而不会检测到此错误。

在Eclipse中它会中断,但是它提供了非常糟糕的错误消息。在错误列表中,它显示“依赖关系问题”,但是依赖关系的名称为空。它也无法确定POM中的哪一行导致了问题。

当尝试在POM查看器中打开“有效POM”时,它将显示项目读取错误。在弹出的错误对话框中,将显示:

Could not read maven project
java.nio.channels.OverlappingFileLockException 

所有消息都是无用的且具有误导性。

我终于在浪费了数小时之后才提交给Jenkins CI,发现了这个问题。

答案 8 :(得分:0)

我做了maven全新安装,错误消失了

答案 9 :(得分:0)

在单击“依赖关系层次结构”选项卡时,我遇到了“项目读取错误”相同的问题。在我的项目中,我有一个父母pom和一个孩子pom。 父pom具有用于孩子pom的属性<appVersion>4.5<appVersion> <version>${appVersion}<version>。 我选择了主项目,右键单击并选择“以maven clean运行”。控制台显示屏显示警告,表明版本正在使用表达式,但应为常量。用恒定值 4.5 代替${appVersion}可以解决此问题。