传递依赖关系
假设 A 依赖 B , B 依赖 C ,我们称 A 对 B 是第一直接依赖, B 对 C 是第二直接依赖, A 对 C 是传递依赖。
现在使用Eclipse做实验证明这个结论~
1.首先创建三个Maven项目。
2.让【maventest-a】依赖【maventest-b】。那么首先需要将【maventest-b】打包安装到本地仓库,这样【maventest-a】才可以在本地仓库找到它,完成依赖。
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png这样,【maventest-b】的包就存在于本地仓库了~然后在pom.xml文件中添加依赖如下:
Paste_Image.png
编译【maventest-a】。
Paste_Image.png Paste_Image.png成功!同样照这个步骤,完成【maventest-b】依赖【maventest-c】。
完成【maventest-c】的jar包安装到本地仓库后,【maventest-b】的pom.xml文件添加【maventest-c】的依赖,然后编译【maventest-b】。
Paste_Image.png
3.这时【maventest-a】对【maventest-c】就是传递依赖。虽然【maventest-a】没有直接依赖于【maventest-c】,但由于【maventest-a】直接依赖【maventest-b】,【maventest-b】又直接依赖于【maventest-c】,所以【maventest-a】是间接依赖了【maventest-c】。
实践出真理,如图可知,我们的结论是正确的:
4.但是呢,假如我们不想要这个传递依赖呢。就是【maventest-a】只想依赖【maventest-b】,不想跟【maventest-c】有关系,该怎么办呢?这里,我们就需要用到排除依赖。很简单,在pom.xml里添加<exclusions>标签,具体如图:
Paste_Image.png如图所述,在依赖【maventest-b】的时候,我们排除了【maventest-c】。
Paste_Image.png果然只剩下【maventest-b】了!
增加一点题外内容,在Eclipse里。有个小问题。
Paste_Image.png在【JRE System Library】默认是【J2SE-1.5】,但我实际用的是1.8哎,该怎么解决这个问题呢?
Paste_Image.png找到maven的settings.xml文件,增加如下内容:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
这回再新建项目就是正确的了!
Paste_Image.png
网友评论