Maven核心概念
Maven采用“约定优于配置”(CoC)的原则,只要将项目的源文件按Maven要求的规范组织,并提供pom.xml文件,开发者就能使用Maven来编译项目、运行程序,甚至运行测试用例、打包部署项目。以下约定:
- 源代码应该位于/src/main/java路径下
- 资源文件应该位于/src/main/resources路径下
- 测试代码应该位于/src/test路径下
- 编译生成的class文件应该位于/target/classes路径下
- 打包后的jar文件在/target下
当然maven也允许自定义默认值改变约定。
下载和安装Maven
登录maven站点,下载zip压缩包
将压缩包解压缩到任意路径
目录解释:
- bin: 保存可执行命令
- boot: 类加载器框架加载maven自己 的框架
- conf: 配置文件目录
- lib: maven运行时需要的类库
配置环境变量
JAVA_HOME:JDK安装路径
M2_HOME:maven安装路径
path:%M2_HOME%\bin
检验是否安装成功
通过DOS命令检查一下我们是否安装成功
mvn -v
配置Maven本地仓库
1. 在D:\Program Files\Apache\目录下新建maven-repository文件夹,该目录用作maven的本地库。
2. 打开D:\Program Files\Apache\maven\conf\settings.xml文件,查找下面这行代码:
<localRepository>/path/to/local/repo</localRepository>
localRepository节点默认是被注释掉的,需要把它移到注释之外,然后将localRepository节点的值改为我们在3.1中创建的目录D:\Program Files\Apache\maven-repository。
3. localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。
4. 运行一下DOS命令
mvn help:system
Maven的使用
1、创建一个简单的maven项目
>mvn archetype:generate
第一次执行该命令时,Maven先从网络下载archetype插件,然后通过插件生成一个maven项目
黄色部分需要自己定义,其余回车
Choose a number: 6: (直接回车)
Define value for property ‘groupId’: : cnblogs (可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写)
Define value for property ‘artifactId’: : maven-hello-world (组件名称,可暂时理解成项目名称)
Define value for property ‘version’: 1.0-SNAPSHOT: : (版本号,直接回车,默认1.0-SNAPSHOT)
Define value for property ‘package’: cnblogs: : (打包后的jar文件名,相当于.net中项目最后生成的程序集dll名称)
2、项目目录
├───src
│ ├───main
│ │ └───java
│ │ └───testMaven
│ └───test
│ └───java
│ └───testMaven
└───pom.xml
maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码
3、编译项目
mvn compile
进入项目文件夹内输入命令。首先maven下载compile插件,然后对项目进行编译
观察项目目录的变化:多出来的target目录存放编译后的class文件
4、执行项目
mvn exec:java -Dexec.mainClass="testMaven.App"
输出hello world.(-D 后面跟参数)
5、单元测试
mvn clean test
clean是是Maven的其中一个生命周期(clean default site),进行任务前进行清理
6、项目打包
mvn clean package
运行完后,会在target目录下生成jar包
注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包
packing配置为war会打包为war
7、项目部署
mvn clean jboss-as:deploy
就能自动将web项目部署到jboss中(前提是jboss web server已经成功启动),因为刚才我们创建的是一个最基本的maven项目,并非web项目,所以执行这条命令,应该会失败,后面会讲如何在eclipse中用插件部署web项目,这里可以先跳过。
另外:
有时候,我们的项目是一个类库,只是封装一些方法供其它项目引用,对于这种项目,我们可以用 mvn clean install 把生成的jar包,安装到“本地仓库”中,这样本机其它项目需要使用该jar包时,只要在pom里配置依赖项即可,不用把jar包复制到当前项目中。
8、依赖管理
<dependencies>
<dependency>
<groupId>junit</groupId>//开发者域名
<artifactId>junit</artifactId>//制定项目名
<version>3.8.1</version>//版本号
<scope>test</scope>//依赖范围
</dependency>
</dependencies>
- compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
- test:测试依赖范围。只对于测试classpath有效
- provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
- runtime:运行时提供。例如:jdbc驱动
(junit包scope就是test范围)
排除依赖:
<exclusions.../>
<dependency>
<groupId>com.ys.b</groupId>
<artifactId>pro-b</artifactId>
<version>1.0.1</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId>com.ys.c</groupId>
<artifactId>pro-c</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入正确依赖 -->
<dependency>
<groupId>com.ys.c</groupId>
<artifactId>pro-c</artifactId>
<version>1.0.0</version>
</dependency>
因为依赖具有传递性,将不需要的依赖排除出去
多模块项目依赖管理中,父pom文件中指定maven依赖jar的version,子pom中不用指定version。这样可以通过parent统一管理maven依赖jar的version。