maven之工程

maven工程类型

  • pom工程
    POM工程是逻辑工程,用在父级工程或者聚合工程,用来做jar包管理
  • jar工程
    将会打成jar包,用作jar包使用,即常见的本地工程---》java project
  • war工程
    将会打包成war,发布在服务器上的工程。

maven目录结构

  • src/main/java
    这个目录存储java源代码
  • src/main/resources
    存储主要的资源文件,比如xml配置文件和properties文件。
  • src/test/java
    存储测试用的类,比如JUNIT的测试一般就放在这个目录下面。
    因为测试类本身就是不属于项目的,所以放在任何一个包下都显的很尴尬。所以maven专门创建了一个测试包用于存放测试的类。
  • src/test/resources
    可以自己创建存储测试环境使用的资源文件。
  • src
    包含项目所有的原地啊嘛和资源文件,以及其他项目相关的文件。
  • target
    编译后内容放置的文件。
  • pom.xml
    是maven的配置文件。配置项目和项目之间关系,包括配置以来关系等。

pom文件项目对象模型的关系

依赖关系

即A工程开发或者运行需要B工程的支持,则代表A工程需要B工程支持。
在这种情况下,需要在A项目的pom.xml文件中增加下属配置定义依赖关系。

通俗理解就是:导入jar包。
B工程可以是自己的项目打包后的jar包,也可以是中央仓库的jar包。

如何导入依赖?
在pom.xml文件根元素dependencies 标签中,配置依赖信息内可以包含多个dependence元素,以声明多个依赖,每一个依赖dependence标签都应该包含一下元素:groupId、artifactId、version:也就是依赖坐标。对于任何一个依赖来说,基本坐标是最重要的,maven根据坐标才能找到需要的依赖。
依赖的好处:
1.省去了手动添加jar包的操作。
2.可以解决jar包冲突。

依赖传递性

项目2依赖了项目1,项目1依赖了mybatis,导入项目1的时候,也会将mybatis的依赖导入到项目2中。

依赖的两大原则
  • 第一原则:最短路径优先原则
    “最短路径优先”意味着项目依赖关系树中路径最短的版本会被使用。

  • 第二原则
    依赖路径一样长的话,第一原则不能解决所有问题,在pom中依赖声明的顺序决定了谁被先解析使用,顺序最靠前的那个依赖优胜。

排除依赖
  <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
<!--            排除标签-->
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
依赖范围

依赖范围决定了依赖坐标的失效时间

  • compile
    这时默认范围。如果没有指定,就会使用该依赖范围,表示依赖在编译和运行时都生效。

  • provided
    已提供依赖范围。使用此依赖范围的Maven依赖,典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍

  • runtime
    表示编译时不生效。而只在运行时生效。典型的例子就是JDBC驱动实现。项目主代码的编译只需要提供JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

  • SYSTEM
    系统范围于provided类似,不过你必须显式制定一个本地系统路径的JAR,此类依赖应该一致有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地制定依赖文件的路径。

  • test
    test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试代码的时候需要,应用的正常运行不需要此类依赖。典型的就是Junit,他只有在编译测试代码及运行测试的时候才需要,Junit的jar包就在测试阶段用就行。你导出项目的时候没有必要把junit的东西导出去了,所以在junit坐标下加入scope-test

  • import
    import范围只适用于pom中的部分,表明执行的POM必须使用部分依赖。
    注意:import只能用在dependencyManagement的scope中。

继承

如果A工程继承B工程,则代表A工程默认依赖B工程依赖的所有资源,且可以应用B工程中定义的所有资源信息。被继承的工程(B工程)只能时Pom工程。
注意:在父项目中放在中的内容时不被子项目继承,不可以直接使用放在中的内容主要目的是进行版本管理,里面的内容在自项目中依赖时坐标只需要填写即可。

聚合

类似于父子工程项目。父工程是一个pom工程。

posted @ 2023-03-13 00:49  King-DA  阅读(46)  评论(0)    收藏  举报