在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件 。 对于Maven来说,仓库只分为两类:本地仓库 和远程仓库 。私服是一种特殊的远程仓库。 在Linux系统中,以点(.)开头的文件或目录默认是隐藏的,可以使用ls -a
命令显示隐藏文件或目录。 Maven3的超级POM在文件$ MAVEN_HOME/lib/maven-model-builder-x.x.x.jar
中的org/apache/maven/model/pom-4.0.0.xml
路径下, - Maven3的超级POM在文件$ MAVEN_HOME/lib/maven-x.x.x-uber.jar
中的org/apache/maven/model/pom-4.0.0.xml
路径下。 超级POM是所有Maven项目都会继承的POM。相当于java里面的Object类,超级POM中自带了中央仓库的配置。 私服是一种假设在局域网内的特殊的远程仓库。它可以节省外网带宽,加速Maven构建,降低中央仓库的负荷,部署自己的构建,提高稳定性,增强控制。
<projects>
...
<repositories>
<repository>
...
<snapshots>
<enabled>true</enabled>
<updatePolicy>daliy[never][always][interval:X]</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
</repository>
</repositories>
</projects>
仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml
中。 安装到本地仓库,部署到远程仓库。 mvn clean install -U
,安装的时候强制检查更新。如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。X包含Y,X>=Y。 命令行的输入往往就对应了生命周期,如mvn package
就表示执行默认生命周期阶段的package。Maven的生命周期是抽象的,其实际行为由插件来完成。 Maven的生命周期就是为了对所有的构建过程进行抽象和统一,这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成。 Maven拥有三套相互独立的生命周期,分别是clean
、default
和site
。clean的目的是清理项目,default的目的是构建项目,site的目的是建立项目站点。 插件前缀:插件目标
Maven引入了目标前缀的概念,比如help
是maven-help-plugin
的目标前缀,dependency
是maven-dependency-plugin
的前缀。这些前缀都在插件仓库元数据上定义。<prefix></prefix>
maven在超级POM中为所有核心插件设定了版本。 一般来说,一个项目的子模块都应该使用同样的groupId ,如果它们一起开发和发布,还应该使用同样的version ,此外,还应该使用同样的version ,它们的artifactId 还应该使用一致的前缀,以方便同其它项目区分。 聚合是聚合,继承是继承。虽然现实项目中把一个pom作为聚合pom,同时也作为父pom,但其实是两个概念。 如果你一次性想构建多个项目,使用聚合。 如果你想定义一个模板pom,减少代码量,消除重复配置,或者追求一种统一,使用继承。 聚合pom和父pom的打包方式packing
都必须为pom,否则无法构建。 artifactId
不可被继承。Maven提供的dependencyManagement
元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。dependencyManagement
声明的依赖既不会给父模块引入依赖,也不会给子模块引入依赖。只有子模块声明了依赖使用,才会产生实际的效果。 使用<scope>import</scope>
将另一个pom的dependencyManagement
导入。 同理,pluginManagement
元素帮助管理插件。 在超级pom中,定义了项目的结构,比如src/main/java
。 在一个多模块的maven项目中,反应堆是指所有模块组成的一个构建结构;对于单模块的项目,反应堆就是该模块本身。 mvn -h
如下内容:
-am,
build projects required by the
list
-amd,
build projects that depend on
projects on the list
-pl,
reactor projects to build instead
of all projects. A project can be
specified by [groupId]:artifactId
or by its relative path
-rf,
project