Maven的使用入门
1. 检查JDK安装
在安装Maven之前,首先要确认安装了JDK.
2. 下载Maven
点击下载apache-maven-3.6.1-bin.zip,解压文件到指定目录,设置环境变量
3. Maven使用入门
3.1 编写pom.xml
Maven的核心文件是pom.xml.POM(Project Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等.
以下为一个pom.xml:
1 |
|
第一行是XML头,指定该XML文档的版本和编码方式.
紧接着是project元素,是所有pom.xml的根元素,声明一些POM相关的命名空间和xsd元素,不是必须的,但是能够让第三方工具帮助我们快速编辑POM.
根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2和Maven3,只能是4.0.0
最重要的是包含groupId、artifactId和version的三行.这三个元素定义了一个项目基本的坐标.
- groupId:定义项目属于哪个组,这个组往往和项目所在的组织或公司存在关联.如果你的公司是mycom,有一个项目是myapp,那么groupId就应该是com.mycom.myapp
- artifactId:定义当前Maven项目在组中唯一的ID.在myapp中可能为不同的子项目(模块)分配不artifactId,如myapp-util,myapp-web等
- version:定义当前项目的版本.
- name:声明了一个对用户更为友好的项目名称,虽然不是必须的,但是推荐使用以方便交流
添加依赖:
<dependencies>
元素中可以包含多个<dependency>
元素以声明项目的依赖.通过groupId,artifactId,version定位一个jar,Maven将从中央仓库下载.JUnit依赖中的<scope>
表示依赖范围,如果依赖范围为test,则表示该依赖只对测试有效.如果不声明依赖范围,默认值为compile,表示对主代码和测试代码都有效.
3.2 打包和运行
pom中没有指定打包类型,则使用默认打包类型jar.
1 | mvn clean package |
执行该命令后,将获得项目的jar包,可以将该jar包复制到其他项目的Classpath中以使用该jar包.
但是如何让其他的Maven项目引用这个jar呢?
需要一个安装的步骤:
1 | mvn clean install |
此时这个jar包被安装到了本地Maven仓库中.
但是生成的jar包不是可执行的,为了生成可执行的jar包,需要借助maven-shade-plugin
,将该插件添加到pom.xml中:
1 | <plugin> |
然后执行mvn clean install
,构建完成后打开target/目录,生成两个jar包,其中original开头的为原始的jar包,另一个为可执行的jar包,执行该jar包:
1 | java -jar target ***.jar |
3.3 使用Archetype生成项目骨架
手动创建Maven的目录非常麻烦,可以使用maven archetype生成项目的骨架:
如果是Maven 3:
1 | mvn archetype:generate |
如果是Maven 2:
1 | mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate |
4. 项目坐标详解
Maven为各种构件引入了秩序,任何一个构件都必须明确定义其坐标,一组Maven坐标通过一些元素定义,分别是:groupId
,artifactId
,version
,packaging
,classifier
.
- groupId:定义当前Maven项目隶属的实际项目,一般为域名反向对应.注意要定义到项目级别而不应该只定义到组织级别.如
com.sonatype.nexus
,而不是com.sonatype
- artifactId:定义实际项目中的一个Maven项目(模块),使用实际项目名称作为其前缀,如
nexus-indexer
,使用实际项目名nexus作为前缀.这样的好处是方便寻找构件. - version:定义Maven项目当前所处的版本.版本管理后面介绍.
- packaging:定义Maven的打包方式,默认值为jar
- artifactId:用来帮助定义构建输出的一些附属构件.不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成.
以上五个元素,groupId,artifactId,version为必须定义的,packaging为可选的,classifier是不可直接定义的
5. 依赖的配置
1 | <dependencies> |
- groupId,artifactId,artifactId:基本坐标
- type:依赖的类型,对应于项目坐标定义的packaging,大部分情况下该元素不必声明,其默认值为jar
- scope:依赖的范围
- optional:标记依赖是否可选
- exclusions:用来排除传递性依赖
大部分依赖声明只包含基本坐标,在一些特殊情况下,其他元素至关重要.对其他元素将在后面的文章介绍