2015-04-21 39 views
1

我正在开始使用maven。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 

错误,所以我意识到了一些包丢失了,并接着添加基于直觉的东西,并从其他项目中查找和查找。

我的问题是:

我该如何处理这个问题,并得到正确的依赖关系,而不是 直觉做的东西,并随机?

如何弄清楚:

  1. 什么相关性缺失?
  2. 什么是传递和重复 依赖关系?

回答

0

好希望你不希望人们张贴一本书在这里;-)

所以一些提示,可以帮助:

1:因为这是你的公司的依赖项失踪我无法告诉你。但是,你的错误是一个编译错误 - 我认为Application.class是在错误的包:my/company/Application.java:[3,24] package my.company.somepkg “somepkg”部分丢失。

2:传递依赖是依赖的依赖。通常模块依赖于hibernate或spring或其他jar。 Maven将使用与maven存储库中jar一起部署的pom.xml中的信息为您解析所需的库。 重复的依赖关系测量你在依赖关系树中有两次依赖关系。 Maven使用所谓的GAV坐标标识它们(groupId,artifactId和版本,也可能是分类器)。如果这些匹配maven需要解决这些依赖关系的胜利。 通常的方法是使用距离最短的版本。在你自己的pom中的距离为0(或1?)。依赖关系的依赖关系具有更高的距离。这可能是错误的,但你总是可以用你自己的方式来覆盖它们。尝试“mvn dependency:tree”你的pom是。它会显示maven所看到的。我希望这有助于:)