maven中各文件的作用
bin:保存可执行性命令,因此要将其路径添加到PATH中,以便在命令行中使用maven命令。
boot:只包含plexus-classworlds-2.5.2.jar,maven用其加载自己的类库。
conf:保存maven配置文件的目录,setting.xml可用于配置Maven。
lib:该目录包含了所有maven运行时需要的类库。
其余为说明性文档。
setting.xml中的标签
localRepository:用于设置Maven的本地资源库路径,默认保存在用户Home目录的.m2/repository下
offline:设置为false时,当maven找不到插件、依赖库时,会自动从网络下载
proxies:设置maven访问网络的代理服务器
interactiveMode:设置交互模式,如果为false,maven将使用默认值
maven的部分命令格式
运行插件
方式一:
mvn <plugin-prefix>:<goal> -D<属性名>=<属性值>...
plugin-prefix:插件名称
goal:指定该插件所包含的指定目标
可以设置多个属性名、属性值对
方式二:
mvn <plugin-group-id>:<plugin-artifact-id>:<plugin-version>:<goal>
plugin-group-id、plugin-artifact-id、plugin-version称为maven的坐标,可唯一的确定某个插件
创建java项目
mvn archetype:generate -D interactiveMode=false -D groupId=开发者域名 -D artifactId=项目名 -D package=项目打包的类型
生成的maven项目结构如下:
源代码应该位于src/main/java下,资源文件(配置文件)应该位于src/main/resources下,测试代码位于src/test下,编译生成的class文件位于target下
编译maven项目
进入到pom.xml文件所在路径,执行以下命令
mvn compile
运行maven项目
mvn exec:java -D exec.mainClass="编译后含有主函数的类文件的路径"
下面给出个实例:
1、创建项目
项目的位置请在执行日记中查找
2、进入项目目录
3、编译项目
编译后在target的classes目录下可以找到编译后的类文件,就本例来说,编译后的类文件位于C:\Users\lzy\demo\target\classes\jar
4、执行项目
mainClass参数值为target\classes下的包名+类文件名,本例为jar.App
遇到的异常:
1、No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
环境变量没有配置JAVA_HOME对象
2、Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project demo: An exception occured while executing the Java class. App
mvn exec:java -D exec.mainClass路径错了
maven的生命周期
生命周期是指maven构建项目时的多个有序阶段(phase)
可以使用以下命令通知maven执行生命周期中的一个或是多个阶段
mvn <phase1> <phase2>
maven包括三个生命周期,这里只介绍两个:
1、clean:清除target目录下的jar文件
2、default:包括如下生命周期:
1、compile:编译
2、test:运行测试代码
3、package:项目打包
4、install:安装到本地仓库(存放jar包的文件,通过localRepository设置)
5、deploy:部署到远程仓库(通过pom.xml文件中的repositories配置)
上述生命周期按顺序执行,如果我们使用mvn install,将先后执行compile、test、package、install生命周期
pom.xml
pom.xml是一种项目对象模型的描述文件,其中定义了项目需要的依赖,打包成jar、war文件时需要遵循的规则等等,每个maven项目的pom.xml都有一个上级pom.xml文件(其中定义了大量默认配置,如果想要改变这些默认配置,只需在本项目pom.xml文件中定义相应元素进行覆盖即可),上级pom.xml中的配置信息会合并到本项目的pom.xml文件中,类似于类的继承,这被称为依赖传递,springboot中的起步依赖就利用了这点
pom.xml中的元素包括:
<properties....../>:用于定义全局属性
<dependencies...../>:用于定义依赖关系,可以包含多个<dependency>子元素
<dependencyManagement...../>:用于定义依赖管理
<build...../>:定义构建信息(打包成jar或是war包时需要执行的某些步骤),例如定义jar包的位置
<reporting..../>:定义站点报告的相关信息
<licenses...../>:定义改项目的License信息
<organization...../>:指定改项目所属组织信息
<developers...../>:配置开发者信息
<contributors....../>:配置项目贡献者信息
<issueManagement....../>:定义项目的bug追踪系统
<mailingLists....../>:定义邮件列表
<scm...../>:指明改项目的源代码管理工具
<repositories...../>:用于定义远程资源库的位置
<pliginRepositorie...../>:用于定义插件资源库的位置
<distributionManagement...../>:部署管理
<profiles...../>:根据环境调整构建配置
<dependency...../>元素可以具有以下子元素:
<groupId..../>:指定依赖所属组织
<artifactId....../>:指定依赖的项目名
<version...../>:指定依赖的版本
<scope....../>:指定依赖作用的范围
compile:默认值,编译、测试、打包时都需要该依赖
provide:运行时需要该依赖
runtime:测试、运行时需要,打包时会包含该依赖
test:该依赖只用于测试阶段
system:与provide相似,但该依赖必须是操作系统自带的
import:表示该依赖继承父POM文件中<dependencyManagement>中配置的依赖
<type..../>:指定依赖的类型,例如jar、war
<optional....../>:指定该依赖是否可选
<classifier......./>:指定对应依赖是在哪个JDK版本下编译的
<exclusions..../>:用于排除依赖中的某些依赖(例如,我想使用本依赖下的springmvc,但是不会使用到mybatis,便可利用该元素排除本依赖下mybatis的依赖)
maven通过dependency中的groupId、artifactId、packaging(项目的打包类型,可选)、version(可选)来确定一个依赖
maven的优势
在我看来,使用maven最大的便利之处是,只要我们在pom.xml中配置依赖,maven就可以自动下载我们需要的依赖(若本地资源库没有该依赖)。