Maven搞清楚依赖关系

时间:2015-04-21 14:03:22

标签: maven dependency-management

我开始使用maven了。

所以我正在开始一个spring-boot项目,我正试图包含我公司的专有依赖项。

所以pom看起来像

    <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.mycompany</groupId>
    <artifactId>test-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>test-project</name>
    <description>Test Project</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.7</java.version>
    </properties>

    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
           <version>1.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>my.company</groupId>
            <artifactId>some-java-api</artifactId>
            <version>1.0.0</version>
        </dependency>
    <dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

所以当我尝试

mvn spring-boot:run

我遇到了像

这样的错误
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/myhome/git/myproject/src/main/java/my/company/somepkg/Application.java:[3,24] package my.company.somedependency.somepkg does not exist

所以我意识到有些软件包缺失了,继续根据直觉添加内容,并从其他项目中查看和pom。

我的问题是:

  

如何解决此问题并获得正确的依赖关系   而不是做直觉和随机的东西?

     

我如何弄明白:

     
      
  1. 缺少哪些依赖项?
  2.   
  3. 什么是传递和重复   依赖?
  4.   

1 个答案:

答案 0 :(得分:0)

希望你不希望别人在这里发书; - )

所以一些提示可能会有所帮助:

1:因为缺少了你公司的依赖,我无法告诉你。但是您遇到的错误是编译错误 - 我认为Application.class位于错误的包中:my/company/Application.java:[3,24] package my.company.somepkg &#34; somepkg&#34;部分遗失。

2:传递依赖是依赖关系的依赖关系。模块通常依赖于休眠或弹簧或其他jar。 Maven将使用与maven存储库中的jar一起部署的pom.xml中的信息为您解析所需的库。 重复的依赖关系测量你在依赖树中有两次依赖关系。 Maven用所谓的GAV坐标(groupId,artifactId和version,也许是分类器)来识别它们。如果这些匹配maven需要解决依赖关系获胜。 通常的方法是使用距离最短的版本。你自己的pom中的距离为0(或1?)。依赖关系的依赖关系有更高的距离。这可能是错的,但你总是可以用你自己的pom来覆盖它们。试试&#34; mvn dependency:tree&#34;你的pom在哪里。它将显示maven看到的内容。

我希望这有点帮助:)