maven
- 1、maven安装与配置
- 2、Maven依赖管理
- 3、Maven依赖坐标系
- 4、Maven构建生命周期
- 5、maven官网
- 6、maven本地仓库和远程仓库
- 7、Maven小技巧:
- 8、Maven插件:maven-assembly-plugin
- (1)增加pom中插件依赖
- (2)增加插件仓库
- (3)pom文件中增加入口类
- (4)打成FatJar
- 9、如果不依赖IDE环境,如何对项目整体的源代码进行编译?
- 10、总结
1、maven安装与配置
- 在maven的bin目录中的mvn.cmd和mvnDebug.cmd是maven运行的最核心的命令。
- 通过在系统环境编辑Path路径添加bin文件夹路径后来初始配置完Maven后,在控制台输入mvn -v来检测配置结果
- 设置IDEA绑定最新的Maven版本——点击File-settings, 进入后搜索maven,之后通过点击 Maven home path 末尾的三个点修改文件夹路径,修改成功后,会看到下方的版本号更新成最新的
== 代码以外如xml配置文件/SSL证书等都会被放到src/main/resources目录下 ==
2、Maven依赖管理
- Maven利用dependency(依赖)自动下载、管理第三方jar
- 在pom.xml文件中配置项目依赖的第三方组件
- maven自动将依赖从中央仓库下载至本地仓库,并在工程中引用
3、Maven依赖坐标系
- Groupld:机构或者团体的英文,采用“逆向域名”形式书写
- ArtifactId:项目名称,说明其用途,例如:cms、oa…
- Version:版本号,一般采用“版本+单词”形式。例如:1.0.0.RELEASE
4、Maven构建生命周期
命令 | 用途 |
validate | 验证项目是否正确且所有必须信息是可用的 |
compile | 源代码编译在此阶段完成 |
test | 运行test目录下的测试代码验证src下源代码的逻辑 |
package | 生成产出物jar、war文件 |
verify | 运行任意的检查来验证项目包有效且达到质量标准 |
install | 安装打包的项目到本地仓库,以供其他项目使用 |
deploy | 拷贝最终的工程包到远程仓库,以共享给其他开发人员和工程 |
5、maven官网
(1)官网:https://maven.apache.org (2)阿里云镜像:https://developer.aliyun.com/mvn/guide
6、maven本地仓库和远程仓库
- 本地仓库就是中央仓库的临时存储
- 默认情况下本地仓库存储的结构是以 groupId + artifactId
的形式,打开表示版本号的最末尾的文件夹就会有从中央仓库下载的jar包、远程仓库的信息、描述了其他底层依赖的pom文件夹、用于加密校验的sha1文件、可直接删除的无关紧要的lastUpadated文件 - 如果从中央仓库下载的依赖底层也有依赖其他组件的话,那么Maven也会一次性的把所有与之关联的依赖一层一层的解析完以后来一次性全部下载并且进行加载
- 在dependencey代码上右键Diagrams-Show Dependencies显示依赖关系图
- pom.xml:对组件依赖进行说明
- 修改Local repository(本地仓库)保存路径,在Settings中查找maven然后在Local repository修改,存储路径发生变化后,原来的依赖就要重新进行下载
- 中央仓库除了下载jar包,同时源代码也可以在Maven的仓库中得以保留。自动下载源码和文档注释设置:Settings-Build,Execution,Deployment-Build Tools-Maven-Importing-Automatically download
7、Maven小技巧:
- 将本地仓库放在c盘以外的目录
- 获得jar包的源代码,在依赖包的代码页面右上角点:Download Sources
- 设置在下载jar包的同时下载源代码:
Settings --> Maven --> Importing --> Automatically download
8、Maven插件:maven-assembly-plugin
- Maven插件为构建项目提供了功能扩展的能力
- maven-assembly-plugin是Maven打包插件,用于构建FatJar
- FatJar是 指将所有依赖包装为独立运行的Jar
- 用maven的package命令打包的单独的类的jar包无法运行,没有主菜单属性,即便是注册了main方法,也因为缺乏jdbc驱动无法运行。解决办法是用maven-assembly-plugin打包插件构建FatJar
- 在pom.xml文档中的
<dependencies>
标签往下一行添加标签,<build>
标签用于说明maven构建的方式是何种形式,与maven构建相关的操作都要在<build>
标签中进行说明,其中,插件是主要的配置内容。 - 在
<build>
标签中添加<plugins>
标签,<plugins>
标签是所有插件的父标签 - 添加标签的方法,在
<plugins>
标签中添加<plugin>
子标签,并在标签中添加相关,,坐标系标签信息 - 插件默认是从国外的中央仓库下载,可能出现下载失败或者下载缓慢的情况,解决办法是增加一个阿里云国内的插件仓库,在
<repositories>
标签下面增加<pluginRepositories>
插件仓库标签,再在标签内部增加<pluginRepository>
,在标签内部增加<id>,<name>,<url>
信息即可,这样插件就会优先从阿里云插件镜像仓库下载 - 插件不知道哪个是入口类,在插件的
<version>
标签下增加<configuration>
配置标签,在<configuration>
标签中增加<archive>
标签,再在<archive>
标签中增加<mainfest>
标签,,再在<manifest>
标签中增加<mainClass>
标签,里面写入类似com.imooc.firstApp.appliction的入口类信息 - 在
<archive>
标签下添加<descriptorRefs>
描述标签,再在其中添加<descriptorRef>
标签,并在其中写入固定格式描述语:jar-with-dependencies, 表示在打包时会将引用的jar合并到输出的jar文件中,形成一个FatJar - 插件加载成功后,可以在右侧的Maven的Plugins中看到assembly。点击打开并双击第一行的assembly:assembly,就会打包FatJar文件了。过程中第一次的打包的是普通jar文件,第二次打包的是扩展名为jar-with-dependencies.jar的FatJar文件。所有刚才依赖的jar包都会自动地先进行解压缩然后和字节码进行整合形成一个大的完整的jar包。以后只需要将该fatjar包放置在需要运行的地方即可,根本不需要担心底层依赖的问题。未来构建FatJar是非常普遍的做法
(1)增加pom中插件依赖
POM文件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
</plugin>
</plugins>
</build>
(2)增加插件仓库
<!--插件仓库,阿里云镜像-->
<pluginRepositories>
<pluginRepository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</pluginRepository>
</pluginRepositories>
(3)pom文件中增加入口类
<configuration>
<archive>
<manifest>
<mainClass>JDBCSample</mainClass>
</manifest>
</archive>
</configuration>
(4)打成FatJar
<descriptorRefs>
<!--all in one ,将所有的jar合并输出到jar文件中-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
9、如果不依赖IDE环境,如何对项目整体的源代码进行编译?
- 在工程目录下(有pom.xml的目录),地址栏输入:cmd.exe
- 输入 mvn compile
- Windows环境下,默认是GBK编码的,需要在pom.xml中设置成UTF-8: 在
<properties>
标签中增加:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- 打包成jar文件: 在上面2的地方,输入mvn package
- 通过IDEA打包:(安装到本地仓库) 在右侧边栏,Maven面板 --> Lifecycle --> install
10、总结
- Maven为Java提供了标准化的构建、打包方式
- Maven不单是一个技术,更是一个标准
- 通过Maven的依赖管理简化组件之间的依赖关系
- 通过Maven插件可以实现更多额外扩展功能