Maven进阶使用(Jar包冲突解决,拆分和聚合思想,配置从私服下载jar包)

Maven进阶使用

1.Maven基础知识简介

  1. 仓库分类
    1. 本地仓库
    2. 远程仓库(私服)
    3. 中央仓库
  2. Maven的优点:统一管理jar包,集成tomcat插件,一键构建。
  3. Maven的生命周期
    1. 清理生命周期
    2. 默认生命周期
    3. 站点生命周期
  4. 项目的启动流程,第一步永远是先去本地仓库找jar包。

2. Jar包冲突的解决方式

  1. 第一声明原则:声明靠上的优先进入项目
  2. 路径近者优选原则:
    1. 直接依赖:直接导入的jar包
    2. 传递依赖:没有直接导入的jar包,可通过项目依赖jar包传递到项目中
  3. 排除jar包依赖包:使用exclusion标签排除依赖项目里面的jar包,不用加版本号(直接排除法)

3.pom文件标签

  1. dependencyManagement:锁定jar包版本,在被依赖的项目中写
  2. properties:统一管理jar包版本
  3. exclusion:从依赖构件列表里,列出被排除的依赖构件

4.Maven工程拆分和聚合的思想

​ 普通项目分三层:DAO、SERVICE、Controller

​ maven解决代码可重用和便于维护问题上是这么解决的:

​ maven把一个完整的项目,分成不同的独立模块,这些模块都有各自独立的坐标。哪些地方需要其中的模块,就直接引入该模块的坐标即可。

​ 我们开发一个新项目,先考虑的问题不是dao,service,utils,domain如何编写,我们要考虑的是,上述模块是否已存在,如果存在直接引用。这就是maven拆分的思想。

​ 我们可以把拆分零散的模块聚合到一起编写一个完整的项目,这就是maven聚合的思想。

​ 何为继承:继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的 配置提取出来在父工程的pom.xml 中定义。

​ 何为聚合:项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比 如:dao、service、web 三个工程最终会打一个独立的 war 运行。

5.工程和模块的区别

​ 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整就是一个完整的项目,和此项目是工程和模块没有关系。

​ 工程天生只能使用自己的资源,工程天生是独立的。后天可以和其他工程或模块建立关联关系。

​ 模块天生不是独立的,子模块天生继承父模块,可以使用父模块的所有公共资源。子模块之间天生没有任何联系。

​ 父子工程直接不用建立关系,继承关系是天生的,不需要手动建立。

​ 平级直接的调用叫做依赖,依赖不是天生的,依赖是需要后天建立的。

6.传递依赖下来的包是否能用

直接依赖\传递依赖 compile provided runtime test
compile compile -(传递丢失) runtime -
provided provided provided provided -
runtime runtime - runtime -
test test - test -

实际开发中,如果传递依赖丢失,表现形式就是jar包的坐标无法导入,我们的做法就是直接再导入一次。

7.从私服下载依赖的配置

<!-- 下载jar包配置 -->
<profile> 
    <!--profile的id -->
    <id>dev</id>
    <repositories>
        <repository> 
            <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
            <id>nexus</id> 
            <!--仓库地址,即nexus仓库组的地址 -->
            <url>http://localhost:8081/nexus/content/groups/public/</url> 
            <!--是否下载releases构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!--是否下载snapshots构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories> 
        <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
        <pluginRepository>
            <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://localhost:8081/nexus/content/groups/public/</url>
        </pluginRepository>
    </pluginRepositories>
</profile>

<activeProfiles>
    <activeProfile>dev</activeProfile>
</activeProfiles>

猜你喜欢

转载自blog.csdn.net/lunatic__/article/details/110943114