一. 常用命令
1. 编译 mvn compile
2. 打包 mvn package
3. 测试 mvn test
4. 清理 mvn clean
5. 安装jar包到本地仓库 mvn install
6. 自动创建基本目录 mvn archetype:generate
-DgroupId = 组织名 + 项目名 (org.zuel.xxx) -DartifactId = 项目名 -Dversion = 版本号 -Dpackage = 代码初始包名
二. 生命周期
clean -> compile -> test -> package -> install 依次执行
1. clean 清理项目
a. pre-clean 清理前工作
b. clean 清理上一次构建生成文件
c. post-clean 清理后工作
2. default 构建项目
a. compile
b. test
c. package
d. install
3. site 生成项目站点
a. pre-site 生成站点前工作
b. site 生成站点文档
c. post-site 生成后工作
d. site-deploy 发布站点到服务器
三. pom简介
1. 当前pom版本
<modelVersion>4.0.0</modelVersion>
2. 主体信息
<groupId>org.zuel</groupId> <artifactId>proj + module</artifactId> <!-- 第一位大版本号, 第二位分支版本号, 第三位小版本号 snapshot快照, alpha内测, beta公测, Release稳定, GA发布--> <version>0.0.1snapshot</version> <!-- 打包方式, 默认jar, 还有war, zip, pom --> <packaging>jar</packaging> <!-- 项目描述名 --> <name></name> <!-- 项目地址 --> <url></url> <!-- 项目描述 --> <description></description> <!-- 开发者 --> <developers></developers> <!-- 许可信息 --> <licenses></licenses> <organization></organization>
3. 依赖信息
<dependencies> <dependency> <groupId><groupId> <artifactId><artifactId> <version><version> <!-- 依赖类型 --> <type><type> <!-- 依赖范围 --> <scope><scope> <!-- 设置依赖是否可选, 默认false, 其他值true --> <optional></optional> <!-- 排除依赖传递列表 --> <exclusions> <exclusion></exclusion> </exclusions> </dependency> </dependencies> <!-- 用于子模块继承, 只在此作为声明, 子模块仍需要配置但不需要版本号 --> <dependencyManagement> <dependencies> <dependency> <groupId><groupId> <artifactId><artifactId> <version><version> </dependency> </dependencies> </dependencyManagement>
4. 聚合继承
<!-- 子模块pom继承父模块pom --> <parent> <groupId><groupId> <artifactId><artifactId> <version><version> </parent> <!-- 聚合运行多个mvn项目 --> <modules> <!-- 模块相对路径 --> <module></module> </modules>
5. 构建信息
<!-- 构建管理 --> <build> <!-- 插件列表 --> <plugins> <plugin> <groupId><groupId> <artifactId><artifactId> <version><version> </plugin> <plugins> </build>
四. 依赖详解
1. scope
a. complie 默认范围, 编译测试运行都有效
b. provided 编译测试有效, 运行无效
c. runtime 测试和运行有效
d. test 测试范围有效
e. system 类似provided编译测试有效, 移植性差
f. import 导入范围, 只使用在dependencyManagement中, 表示从其他pom导入dependency配置
e.g: 将A中的依赖导入到B中
<project …> <groupId>example</groupId> <artifactId>B</artifactId> <!-- …… --> <dependencyManagement> <dependencies> <dependency> <groupId>example</groupId> <artifactId>A</artifactId> <version>1.0.0</version> <type>pom<type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
2. 依赖传递 exclusions
A依赖B, B依赖C, 则A间接依赖C, 则A的依赖列表会出现C, 可排除对C依赖
<exclusions> <exclusion> <groupId>example<groupId> <artifactId>C<artifactId> <exclusion> <exclusions>
3. 依赖冲突与原则
a. 短路优先
e.g: A -> B -> C -> X1(jar) 与 A -> D -> X2(jar), A会优先依赖D所依赖的X2
b. 路径长度相同, 先声明优先
e.g: A -> B -> X1(jar) 与 A -> C -> X2(jar), 取决于B与C在A的依赖列表里的顺序, 如下会依赖X1
<dependencies> <dependency> <groupId>example</groupId> <artifactId>B</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>example</groupId> <artifactId>C</artifactId> <version>1.0.0</version> </dependency> </dependencies>
4. 聚合
批量对多个项目进行操作, 新建一个容器项目然后作如下配置
<packaging>pom</packaging> <modules> <module>../mvnModule1</module> <module>../mvnModule2</module> </modules>
5. 继承
a. 父模块配置
<project ……> <groupId>org.zuel.mvn.demo</groupId> <artifactId>mvnParent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <junit.version>4.12</junit.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <modules> <module>mvnModule1</module> <module>mvnModule2</module> </modules> </project>
b. 子模块配置
<project ……> <groupId>org.zuel.mvn.demo</groupId> <artifactId>mvnModule1</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.zuel.mvn.demo</groupId> <artifactId>mvnParent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
五. idea相关
1. 手动指定mvn配置
Settings -> Build… -> Build Tools -> Maven -> User setting file
2. 导入失败考虑手动指定jdk
Settings -> Build… -> Build Tools -> Maven -> Importing -> JDK for importer