蔡香满屋
站在牛顿头上吃苹果

构件:在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可成为构件。每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId,和version等信息构成,由此,Maven就可以对构件进行版本控制,管理。

  • groupId:当前Maven构件隶属的项目名。实际开发中,项目往往会模块化开发,如spring-core,spring-aop等,他们都是Spring项目下不同的模块。命名方式与Java包名类似,通常是域名的反向书写。如ch.qos.logback,事实上项目管理组织的网址是:http://logback.qos.ch/ 。(必须)
  • artifactId:隶属项目中的模块名。(必须)
  • version:当前版本。(必须)
  • packaging:打包方式,如jar,war... (必须) 例如:所有的父级项目的packaging都为pom,packaging默认是jar类型,如果不作配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。
  • <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>
    	      
        <!--这个工程作为别的父工程,但是它又依赖另一个父工程--> <parent> <groupId>com.ly.education</groupId> <artifactId>education</artifactId> <version>2.2.1-SNAPSHOT</version> </parent> <artifactId>tz-edu-core-svc</artifactId>
        <!-- 父工程打包方式为pom--> <packaging>pom</packaging> <profiles> <!-- 默认 --> <profile> <id>default</id>
    <!--激活--> <activation> <activeByDefault>true</activeByDefault> </activation>
       <!-- 聚合方式依赖:通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build--> <modules> <module>ly-edu-core-api</module> <module>ly-edu-core-server</module> </modules> </profile> </project>

      

  • classifier:帮助定义构建输出的一些附属构件。如spring-core.jar,还生成有文档javadoc.jar,源码sources.jar。

特性

  1. 构件具有依赖传递。例如:项目依赖构件A,而构件A又依赖B,Maven会将A和B都视为项目的依赖。
  2. 构件之间存在版本冲突时,Maven会依据 “短路优先” 原则加载构件。此外,我们也可以在POM.XML中,使用<exclusions></exclusions>显式排除某个版本的依赖,以确保项目能够运行。
    1. 项目依赖构件A和B,构件A → C → D(version:1.0.0),构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.1.0)。
    2. 项目依赖构件A和B,构件A → D(version:1.0.0), 构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.0.0)。
  3. 构件的依赖范围。Maven在项目的构建过程中,会编译三套classpath,分别对应:编译期,运行期,测试期。而依赖范围,就是为构件指定它可以作用于哪套classpath。
  编译期 测试期 运行期 说明
compile 默认范围
provided   如servlet-api.jar,运行期由web容器提供
runtime   编译期无需直接引用。
test     如junit.jar
system  

必须通过 <systemPath></systemPath> 元素,显示指定依赖文件的路径,与本地系统相关联,可移植性差。

import       表示继承父POM.XML中的依赖范围设置


-------------------

posted on 2019-04-10 19:20  蔡香满屋  阅读(288)  评论(0编辑  收藏  举报