一般都与clean命令结合使用
mvn package
生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
mvn clean install
运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
mvn -version/-v 显示版本信息
mvn clean 清空生成的文件
mvn compile 编译
mvn test 编译并测试
mvn package 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
mvn site 生成项目相关信息的网站
mvn clean compile 表示先运行清理之后运行编译,会将代码编译到target文件夹中
mvn clean package 运行清理和打包
mvn clean install 运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
mvn clean deploy 运行清理和发布
我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
Maven 的坐标
使用如下三个向量在 Maven 的仓库中唯一的确定一个Maven工程。
(也唯一确定依赖的jar包)
groupid:公司或组织的域名倒序+当前项目名称
artifactId:当前项目的模块名称
version:当前模块的版本
举例
<groupId>com.test.your</groupId>
<artifactId>testJar</artifactId>
<version>0.0.1-SNAPSHOT</version>
如何通过坐标到仓库中查找 jar 包?
将 gav 三个向量连起来
com.test.your+testJar+0.0.1-SNAPSHOT
以连起来的字符串作为目录结构到仓库中查找
com/test/your/testJar/0.0.1-SNAPSHOT/testJar-0.0.1-SNAPSHOT.jar
有时依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这就是依赖的范围。
依赖的范围有几个可选值,常用的有:compile、test、provided 三个,
当然还有不常用的 runtime、system…
compile:默认范围,编译测试运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:只在测试时有效
system:在编译和测试时有效,与本机系统关联,可移植性差
常用依赖范围有效性总结
compile test provided
主程序 √ × √
测试程序 √ √ √
参与部署 √ × ×
A 依赖 B,B 依赖 C,A 能否使用 C 呢?
那要看 B 依赖 C 的范围是不是 compile,
如果是则可用,否则不可用。
如果我们在当前工程中引入了一个依赖是 A,
而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当 前工程,
但是个别情况下 B 有可能是一个不稳定版,
或对当前工程有不良影响。这时我们可以在引入 A 的时候将 B 排除。
<dependency>
<groupId>com.test.your</groupId>
<artifactId>testJar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
统一管理所依赖 jar 包的版本,对
同一个框架的一组 jar 包最好使用相同的版本。
为了方便升级框架,
可以将 jar 包的版本信息统一提取出来
举例如下:
<properties>
<starfish.spring.version>4.1.1.RELEASE</starfish.spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
引用上面声明的版本号
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${starfish.spring.version}</version>
<scope>compile</scope>
</dependency>