Maven无法解决依赖关系,无法解决工件


132

这应该是我朋友的一个工作项目。他在我面前演示了该项目,然后我复制了该项目,并将其导入为现有的Maven项目(我正在使用m2eclipse插件)。

然后,发生此错误。每当我尝试使用Maven构建东西时,都可以重现此错误。

进行mvndependency:tree,dependency:list或通常的构建包将导致相同的错误。

从Eclipse运行'package'构建的错误是:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Jackpot Portal Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for javax.servlet:com.springsource.javax.servlet:jar:2.5.0 is missing, no dependency information available
[WARNING] The POM for javax.servlet:com.springsource.javax.servlet.jsp.jstl:jar:1.2.0 is missing, no dependency information available
[WARNING] The POM for javax.transaction:com.springsource.javax.transaction:jar:1.1.0 is missing, no dependency information available
[WARNING] The POM for org.slf4j:com.springsource.slf4j.log4j:jar:1.5.6 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.963s
[INFO] Finished at: Tue Jan 11 01:55:41 WIT 2011
[INFO] Final Memory: 2M/56M
[INFO] ------------------------------------------------------------------------

[ERROR] Failed to execute goal on project jackpot: Could not resolve dependencies 
for project com.jeteo:jackpot:war:1.0-SNAPSHOT: The following artifacts could 
not be resolved: javax.servlet:com.springsource.javax.servlet:jar:2.5.0,
javax.servlet:com.springsource.javax.servlet.jsp.jstl:jar:1.2.0, 
javax.transaction:com.springsource.javax.transaction:jar:1.1.0, 
org.slf4j:com.springsource.slf4j.log4j:jar:1.5.6: Failure to find 
javax.servlet:com.springsource.javax.servlet:jar:2.5.0 in 
http://repository.springsource.com/maven/bundles/release was cached in the 
local repository, resolution will not be reattempted until the update 
interval of com.springsource.repository.bundles.release has elapsed or 
updates are forced -> [Help 1]

[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

这是内容pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jeteo</groupId>
    <artifactId>jackpot</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Jackpot Portal Webapp</name>
    <url>http://www.jeteo.com</url>
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.0.3.RELEASE</org.springframework-version>
        <org.hibernate-version>3.6.0.Final</org.hibernate-version>
        <org.aspectj-version>1.6.9</org.aspectj-version>
        <org.slf4j-version>1.5.10</org.slf4j-version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.sf.jt400</groupId>
            <artifactId>jt400</artifactId>
            <version>6.6</version>
            <scope>compile</scope>
        </dependency>

        <!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${org.hibernate-version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${org.hibernate-version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>com.springsource.javax.servlet</artifactId>
            <version>2.5.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>com.springsource.javax.servlet.jsp.jstl</artifactId>
            <version>1.2.0</version>
            <scope>provided</scope>
        </dependency>
        <!--
        <dependency>
         <groupId>javax.persistence</groupId>
         <artifactId>com.springsource.javax.persistence</artifactId>
         <version>1.0.0</version>
         <scope>compile</scope>
        </dependency>
        -->
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>com.springsource.javax.transaction</artifactId>
            <version>1.1.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>com.springsource.slf4j.log4j</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.11</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

    </dependencies>
    <repositories>
        <!-- Spring releases -->
        <repository>
            <id>com.springsource.repository.bundles.release</id>
            <name>Spring Maven Repository Repository</name>
            <url>http://repository.springsource.com/maven/bundles/release</url>
        </repository>
        <!-- For hibernate 3.6 support -->
        <repository>
            <id>jboss</id>
            <url>https://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <build>
        <finalName>jackpot</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <url>http://localhost:8080/manager</url>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我尝试下载最新版本的maven,并将其包含在日食日光灯中,但仍然存在相同的问题。即使我在shell命令行(Eclipse外)中运行它,也会发生相同的错误消息。

我想念什么?


在系统变量中看到您的路径。在我的情况下,用户变量中maven 3的路径是正确的,但是在系统变量中将maven 2的路径更改后,它仍然可以正常工作。不知道为什么
aastha '18

Answers:


91

看起来您缺少一些Maven仓库。询问您朋友的.m2/settings.xml,您可能要更新POM以在其中包含存储库。

--edit:快速浏览后,尝试将其添加到您的POM中:

<repository>
    <id>com.springsource.repository.bundles.release</id>
    <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
    <id>com.springsource.repository.bundles.external</id>
    <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/external</url>
</repository>

5
谢谢 !我的朋友提到它可以在他的笔记本电脑上工作,因为他已经将依赖项缓存在.m2 /中,并且maven不再尝试下载它们。并且他共享了存储库条目,有些类似于您的发现,现在它可以正常工作..谢谢您的宝贵时间!如果我可能知道,您使用什么关键字来找出要使用的存储库?昨天我也尝试过谷歌搜索,但结果很痛苦。哈哈
伯蒂2011年

6
我知道这是一个存储库问题,因为“ xxx缺少POM”警告消息。因此,我只搜索了“ springsource maven”,并提出了springsource项目的FAQ,以及用于与Maven一起设置的条目。
wmorrell 2011年

他的第一个工件错误是提供的jar com.springsource.javax.servlet。如果提供了它,为什么它与setting.xml有关系?
菲利普·雷戈

@PhilipRego .m2/settings.xml可以在以外的标准库中指定存储库列表repo.maven.apache.org。在这种情况下,JAR来自SpringSource存储库,不在Maven Central上。我以为朋友在local中列出了SpringSource仓库.m2/settings.xml,因此不会造成查找错误,因为在替代的Maven仓库中会找到工件。取而代之的是,对JAR进行了缓存,根本没有任何查找。
wmorrell

1
@PhilipRego这些依赖项未标记为提供。即使提供了依赖性,编译代码也需要接口定义。这意味着您必须具有定义所使用接口的JAR文件。对于提供的依赖关系而言,这意味着JAR未与您的代码打包在一起。
wmorrell

15

Maven将文件保存在缓存中,请勿重试下载它们。您只需删除.m2目录即可手动“帮助”他,然后我们的朋友将下载所有旧版本的文件。


7

作为同一问题的替代来源,此答案引用了使用Maven 3与Maven 2作为此问题的潜在原因。据我所知,这是由于Maven 3 中本地存储库分辨率的更改而引起的。将其放在此处以防其他人用它搜索并获得此答案(就像我所做的那样)。


7

artifactId为所有下载失败的依赖关系是不正确的-因为某些原因,他们的前缀为com.springsource。剪切/粘贴问题?

您可以尝试按以下方式替换它们。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

如果这些工件在指定的存储库中不可用,您可能还想为其添加Maven中央存储库。

<repository>
    <id>maven2</id>
    <url>http://repo1.maven.org/maven2</url>
</repository>

我试过了,还是出错了?这是完成打包任务后eclipse的部分输出:无法在项目累积奖金上执行目标:无法解析项目com.jeteo:jackpot:war:1.0-SNAPSHOT的依赖项:无法解决以下工件:javax.servlet: servlet-api:jar:2.5.0,javax.servlet:jstl:jar:1.2.0,javax.transaction:jta:jar:1.1.0:找不到javax.servlet:servlet-api:jar:2.5.0在本地存储中缓存了repository.springsource.com/maven/bundles/release中的文件,直到<
cutted

@金Kam 更新了答案,以包括对Maven中央存储库中缺少的工件的引用
Raghuram,

com.springsource前缀意味着工件来自spring企业存储库
eis 2013年

5

手动下载jar,然后从保存jar的文件夹中执行命令:

mvn install:install-file -Dfile=*jar_file_name*.jar-DgroupId=*group_id* -DartifactId=*artifact_id* -Dversion=*version_no* -Dpackaging=jar

jar filejar_file_namegroup_idartifact_idversion_no可从Maven仓库页面。


4

我遇到了类似的问题,并通过在pom.xml中添加以下存储库来解决此问题:

<repository>
    <id>org.springframework.maven.release</id>
    <name>Spring Maven Release Repository</name>
    <url>http://repo.springsource.org/libs-release-local</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>false</enabled></snapshots>
</repository>
<!-- For testing against latest Spring snapshots -->
<repository>
    <id>org.springframework.maven.snapshot</id>
    <name>Spring Maven Snapshot Repository</name>
    <url>http://repo.springsource.org/libs-snapshot-local</url>
    <releases><enabled>false</enabled></releases>
    <snapshots><enabled>true</enabled></snapshots>
</repository>
<!-- For developing against latest Spring milestones -->
<repository>
    <id>org.springframework.maven.milestone</id>
    <name>Spring Maven Milestone Repository</name>
    <url>http://repo.springsource.org/libs-milestone-local</url>
    <snapshots><enabled>false</enabled></snapshots>
</repository>

4
mvn clean install -U

解决了我的问题。由于回购已被缓存,因此我需要强制其获取最新版本。


1

我也收到类似的消息,而我的问题是settings.xml中有一些代理首选项。所以我禁用了它们,一切正常。


1

这种问题是由两个原因引起的:

  1. 依赖的咒语是错误的
  2. mvn设置(即〜/ .m2 / settings.xml)的配置错误

如果可以下载大多数依赖项,则原因1可能是最可能的错误。相反,如果大多数依赖项都有问题,那么您应该看一下settings.xml

好吧,我整个下午都在尝试解决问题,最后我明白了。在settings.xml中出现我的问题,没有的丢失或错误拼写的settings.xml,但失去的activeProfiles


0

我有这个问题。就我而言,这是由IntelliJ Idea弄乱了一些pom.xml文件(似乎很喜欢这样做!)引起的。我只是恢复了原始副本,一切又恢复了!


0

我也遇到了这个问题,原来是因为NetBeans向我的pom.xml文件中添加了一些东西。自从先前成功部署以来,没有仔细检查是否添加了任何内容。


0

我的EAR项目有2个模块* .ear和* .war,*.war尝试时遇到此项目依赖错误mvn eclipse:eclipse。通过修复项目中的utf-8编码问题来解决此问题*.warmvn -X-e这里的选项无济于事。


0

原来,这是由于我计算机上的防火墙导致的。关闭它对我有用。


1
虽然关闭计算机上的防火墙可能会起作用,但根据您的网络设置,我建议您搜索更安全的解决方案,例如通过为maven进程或maven Central添加例外...听起来像是配置错误/非常严格的防火墙设置我虽然
摩羯座

@摩ri座,这不是最好的,但是对我来说,我尝试了所有推荐的解决方案,并且在此方面效果很好。如果您有更好的解决方案,请告诉我,谢谢!!!编辑:您提到“为maven进程或maven中央添加一个例外”,我不是很明白,您能指定这些吗?
Duc Thanh

0

遇到过这样的问题。根本原因是.m2文件夹。您必须确保.m2文件夹(这是您的本地存储库)中存在您要访问的任何内容。如果那里有东西,那你就很好。这通常出现在系统上的users文件夹内(无论是mac / linux还是Windows)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.