Maven工程的依赖、继承、聚合

269 阅读1分钟

1)依赖管理

如上图,HelloFriend项目依赖hello项目,MakeFriend项目依赖HelloFriend项目。

1.1)依赖的范围

  1. compile

[1]main目录下的Java代码可以访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时放在WEB-INF的lib目录下

例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。

  1. test

[1]main目录下的Java代码不能访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

例如:对junit的依赖。仅仅是测试程序部分需要。

================

如下图,HelloFriend引用hello项目,当hello项目的pom文件中,junit包的scope设为test后,HelloFriend项目不能访问hello的junit包,可见HelloFriend项目的Dependencies下没有显示junit包

1.2)依赖的原则

  1. 路径最短者优先

如上图,从MakeFriend项目 到 HelloFriend项目 的路径最短,故优先用 HelloFriend项目的junit包。

  1. 路径相同时先声明者优先

如上图 先声明HelloFriend 则优先使用HelloFriend模块的junit4.9

2)依赖的排除

太简单,略

3)统一管理目标jar包的版本

4)继承

大意如上2图,细节待补充。

5)聚合

如上图,部分 工程打成的jar包缺失,需要手动重新install。

如上两图,通过聚合 可一次性install所有项目,并处理好依赖关系。

6)打包插件

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!-- 指定主类 -->
<!--                            <mainClass>xxx.xxx.XXX</mainClass>-->
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>

                </executions>
            </plugin>
        </plugins>
    </build>