maven 依赖、仓库、生命周期和插件、继承与聚合配置速览

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ty497122758/article/details/79121808
基本配置
POM:项目对象模型,Project Object Model
<modelVersion>表示pom的版本,maven2和maven3中modelVersion只能是4.0.0
mvn archetype:generate快速生成项目,格式为:groupId:artifactId:version:goal
<packaging>:打包方式,默认是jar,还有:war、pom、maven-plugin、ear

依赖管理
<dependency>/<scope>:test表示测试需要,默认是compile
<optional>:可选性依赖,可选性依赖的不会被传递,不建议使用

dependency完全配置
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.2</version>
<type>jar</type>
<scope>compile</scope>
<optional>false</optional>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
<classifier>jdk15</classifier>
</dependency>
scope
compile:默认
test:测试包下可以,打包不加入,比如:junit
provided:编译和测试的依赖,打包不加入,比如:servlet-api
runtime:测试和运行有效,编译时不加入,比如:jdbc驱动
system:本地文件依赖(本地仓库外的),没有移植性
传递优先级
第一原则:路径短优先
第二原则:第一声明者优先(pom解析顺序)
最佳实践
用exclusion排除依赖
归类依赖,用properties定义变量统一版本
优化依赖,mvn dependency:list查看当前项目已解析依赖;mvn dependency:tree依赖树
仓库
本地仓库
远程仓库
优先找本地仓库,如果没有就去远程仓库下载,如果远程仓库也没有则报错
可以做个私服,代理多个的远程仓库,并把公司的私有仓库放上面
配置远程仓库
<profiles>
<profile>
<id>cloudhopper</id>
<repositories>
<repository>
<id>cloudhopper</id>
<name>Repository for Cloudhopper</name>
<url>http://maven.cloudhopper.com/repos/third-party/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>cloudhopper</activeProfile>
</activeProfiles>

索引地址
仓库下载地址
发布项目到私服
配置:
<distributionManagement>
        <snapshotRepository>
            <id>user-snapshot</id>
            <name>User Porject Snapshot</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
            <uniqueVersion>true</uniqueVersion>
        </snapshotRepository>
        <repository>
            <id>user-release</id>
            <name>User Porject Release</name>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>
命令:mvn clean deploy
镜像
<settings>
...
<mirrors>
<mirror>
<id>maven.net.cn</id>
<name>one of the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
...
</settings>
复杂的需求,Maven还支持更高级的镜像配置:
1. <mirrorOf>*</mirrorOf>
匹配所有远程仓库。
2. <mirrorOf>external:*</mirrorOf>
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
3 .<mirrorOf>repo1,repo2</mirrorOf>
匹配仓库repo1和repo2,使用 逗号 分隔多个远程仓库。
4. <mirrorOf>*,!repo1</miiroOf>
匹配所有远程仓库,repo1除外,使用 感叹号 将仓库从匹配中排除。
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
生命周期和插件
生命周期功能由插件提供,生命周期和插件协同一起工作
阶段:清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成
三套生命周期:clean、default、site『建立项目站点』
描述插件
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:2.1
mvn help:describe -Dplugin=compiler
mvn help:describe -Dplugin=compiler -Dgoal=compile
mvn help:describe -Dplugin=compiler -Ddetail
可以用插件前缀来简化mvn命令的调用
聚合与继承
聚合
一般聚合项目用<packaging>pom</packaging>
聚合项目与子项目平行目录结构的配置
<modules>
<module>../subModule1</module>
<module>../subModule2</module>
</modules>
继承
<perent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath></relativePath>
</parent>
父模块dependencyManagement中定义的依赖:不会为父模块和子模块实际依赖,必须在子模块定义实际定义才行,而 dependencies为导致父模块和所有子模块的依赖不必要的资源;pluginManagement和plugins有相同的道理
可以被继承的元素
  • groupId:项目组ID,项目坐标的核心元素
  • version:项目版本,项目坐标的核心因素
  • description:项目的描述信息
  • organization:项目的组织信息
  • inceptionYear:项目的创始年份
  • url:项目的URL地址
  • developers:项目的开发者信息
  • contributors:项目的贡献者信息
  • distributionManagement:项目的部署配置
  • issueManagement:项目的缺陷跟踪系统信息
  • ciManagement:项目的持续集成系统信息
  • scm:项目的版本控制系统信息
  • malilingLists:项目的邮件列表信息
  • properties:自定义的Maven属性
  • dependencies:项目的依赖配置
  • dependencyManagement:项目的依赖管理配置
  • repositories:项目的仓库配置
  • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
  • reporting:包括项目的报告输出目录配置、报告插件配置等
裁剪mvn构建的模块
  • -am,--also-make:同时构建所列模块的依赖模块
  • -amd,-also-make-dependents:同时构建依赖于所列模块的模块
  • -pl,--projects<arg>:构建指定的模块,模块间用逗号分隔
  • -rf,-resume-from<arg>:在完整的反应堆构建顺序基础上指定从哪个模块开始构建

猜你喜欢

转载自blog.csdn.net/ty497122758/article/details/79121808
今日推荐