目录
Maven核心特性
- 项目设置遵循统一的规则,保证不同环境的兼容性
- 强大的依赖管理,项目依赖组件自动下载,自动更新
- 可扩展的插件机制,使用简单,功能丰富
Maven是由Java编写的软件,要运行Maven必须要安装JDK或JRE。
bin目录下的mvn.cmd是Maven的核心执行文件,对于Maven执行的命令必须通过它来执行。
Maven项目标准结构
Maven的坐标
- GroupId:机构或者团体的英文,采用“逆向域名”形式书写
- ArtifactId:项目名称,说明其用途
- Version:版本号,一般采用“版本+单词”形式,例如:1.0.0.RELEASE
Maven项目的标准结构
- ${basedir}:根目录,用来保存pom.xml文件
- pom.xml:项目(Project)对象(Object)模型(Model)文件
- target:项目输出目录,用于存放jar、war文件
- classes:字节码(.class)的编译输出目录
- src
- test
- java:测试类的源代码目录
- resources:测试时需要使用的资源
- main
- java:Java源代码目录
- resources:资源目录,保存测试文件,静态图片等
- test
Maven依赖管理
- Maven利用dependency(依赖)自动下载,管理第三方jar
- 在pom.xml文件中配置项目依赖的第三方组件
- maven自动将依赖从远程仓库下载至本地仓库,并在工程中引用
在浏览器中输入search.maven.org,https://search.maven.org/,会看到下面的界面,例如我们想找mysql的java驱动,直接在搜索框输入 mysql java
点进来之后,下拉框中选择对应的版本,其中右侧的dependency复制到项目的pom.xml文件中即可。
然后我们的IDEA中就会多出
上面的例子只显示了引用单个的jar,对于相对复杂的组件,往往不是一个jar包而是一对jar包的组合,该组件有可能依赖其他的组件,此时,Maven会对这个dependency进行深入解析将所有的依赖一次性进行下载。
例如:spring-webmvc框架,我们添加dependency
但是我们会多出一堆组件,会把spring-webmvc依赖的所有组件都下载。
此时,我们点进groupId那一行,会进入一个pom文件,我们可以看到他的底层依赖,即dependency。引入一个组件就会将完整的jar包下载,不用考虑会存在jar包冲突。
本地仓库与中央仓库
项目启动的时候,Maven对pom.xml进行加载,分析其dependency依赖,之后会在本地仓库(我们的本地的一个目录)查找看依赖是否存在,若不存在,则去中央仓库下载到本地仓库,再用Maven加载下载好的依赖。
自然了,若都从apache的国外网站下载,速度通常很慢。这时候会用到代理服务器(对于Maven来说,中央仓库有一个一个的私服,即服务器的备份,这些备份的服务器往往存在与国类),其中属阿里巴巴提供的Maven私服最出名。
浏览器输入:maven.aliyun.com,https://maven.aliyun.com/mvn/guide,我们用public的,这边我们把public的aliyun的仓库地址拷过来。
添加repositories,然后我们添加一个url为的私服https://maven.aliyun.com/repository/public,最重要的就是url了,不过还要填上id,不然会有错误提示,name随意,通常回填然后和id保持相同。添加私服后,本地仓库缺少jar包,会优先去我们添加的私服下,再没有才回去apache的网站。
<repositories>
<!-- - - - - - - 创建私服的地址 - - - - - - -->
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
项目打包
- Maven可将Java项目打包为jar包、war包
- Maven项目打包是通过Plugins(插件)技术实现
- Maven输出Jar包插件:maven-assembly-plugin
注意别写错manifest单词,当使用maven-assembly-plugin插件打包时,不能用mvn package,需要使用mvn assembly:assembly命令。
<build>
<plugins>
<!-- - - - - 配置插件 - - - - - - -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<!-- - - - - - 指定入口类 - - - - - - -->
<archive>
<manifest>
<mainClass>com.imooc.Pinyin</mainClass>
</manifest>
</archive>
<descriptorRefs>
<!-- - - - - all in one, 在打包时会将所有引用的jar合并到输出的jar文件中- - - -->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
此时我们发现,target目录下有
其中MavenLearn-1.0.jar,缺乏依赖项,不可以直接通过java -jar MavenLearn-1.0.jar运行,我们可以运行MavenLearn-1.0-jar-with-dependencies.jar,java -jar MavenLearn-1.0-jar-with-dependencies.jar,效果如下
和在IDEA中的效果一样
Maven常见命令
- mvn archetype:geberate:创建Maven工程结构
- mvn compile:编译源代码
- mvn test:执行测试用例
- mvn clean:清除产生的项目
- mvn package:项目打包
- mvn install:安装至本地仓库
参考:慕课网-Java工程师