引言
maven是一个项目管理工具,由最初的ant进化而来。虽然目前最新的是gradle,但是maven还是流串于各大公司的代码中(如springboot的源码管理)。因此,对于初学者来说,学会使用使用maven是对于后期成长非常有帮助的。
这里推荐慕课网上的maven基础课程,有空的同学一定去学一学,能够查缺补漏(https://www.imooc.com/learn/443)
项目基本架构
maven推崇的是约定大于配置,利用maven搭建的项目一定是如下的结构:
图1.代码结构图
* src
* main
* java
* com.xxx(java代码)
* resources
* xxx(资源文件)
* test
* javaxx (java测试代码)
* pom.xml
pom文件的基本介绍
<?xml version="1.0" encoding="UTF-8"?>
<!--project是pom的根元素-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--指定当前pom的版本-->
<modelVersion>4.0.0</modelVersion>
<!--这里写包名,一般为公司网址的反写+项目名-->
<groupId>com.yuxun.fantuan</groupId>
<!--这里写模块名,一般为项目名-模块名-->
<artifactId>fantuan-parent</artifactId>
<!--这里写版本-->
<!--第一位大版本,第二位分支版本,第三位小版本
snapshot快照
alpha内部测试
beta公测
release稳定
ga正式发布
-->
<version>2.6.0-SNAPSHOT</version>
<!--默认是jar,也可以是
war
zip
pom,是打包多module模式下,多个模块一起打包用的-->
<packaging>pom</packaging>
<!--项目描述名 -->
<name></name>
<!--项目地址 -->
<url></url>
<!--项目描述 -->
<description></description>
<developers></developers>
<licenses></licenses>
<organization></organization>
<!--自定义一些属性标签,用的时候就是${juint.version}-->
<properties>
<junit.version>3.8.1</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
<!-- 依赖的管理 -- >
<!-- 抽象出来做成父类被继承的,写在里面的jar将不会被本模块依赖-->
<dependencyManagement>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<!-- -->
<parent></parent>
<!-- -->
<modules>
<module></module>
</modules>
</project>
其中groupId,artifactId,version三者称之为坐标
maven常用的命令
mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 将代码打包成jar包到本地仓库中
mvn archetype:generate 创建maven目录架构
mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名
maven配置文件的修改
conf下面的setting文件里面的localRepository标签是存在jar包的位置
mirrors标签是镜像地址
maven依赖仲裁
- maven依赖冲突——短路优先
1.A -> B -> C -> X(jar)
2.A -> D -> X(jar)
优先选择路径短的,所以优先选择2- 相同路径的情况下,哪个dependency在前就是引用哪个。
maven <dependencyManagement>和<dependencies>的区别
参考网址:https://blog.csdn.net/liutengteng130/article/details/46991829
同时阿里巴巴java开发手册里面有这么提到:
8.【推荐】所有pom文件中的依赖声明放在<dependencies>语句块中,所有版本仲裁放在<dependencyManagement>语句块中。
说明:<dependencyManagement>里只是声明版本,并不实现引入,因此子项目需要显式的声明依赖,version和scope都读取自父pom。而<dependencies>所有声明在主pom的<dependencies>里的依赖都会自动引入,并默认被所有的子项目继承。
maven 的一些常见问题
1.打包成pom文件和打包成jar文件,zip文件有什么区别呢?
答:<type>pom</type>,pom文件打包最后就是pom文件,丢到私服上面就是pom文件。同时该模块下面的module又会进行相应的打包,根据他们的格式打包成相应的文件。
2.mvn 的dependeny命令是做什么的?
答:mvn clean dependency:copy-dependencies -DoutputDirectory=lib 把当前的pom文件中的依赖给下载下来。
3.maven <executions>标签的作用?
答:
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId>xx</groupId>
<artifactId>jetty</artifactId>
<version>xx</version>
<executions>
<execution>
<!-- 在打包成功后使用jetty:run来运行jetty的服务-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4.maven私服是什么东西?
答:maven我们都知道会去中央仓库去下载依赖到本地,这样就能引入到项目中。但是,我们自己的项目不一定会开源,上传到的地方不必要向所有人展示,所以要搭建自己的私人服务器。我们可以通过修改配置,先去私服上下载maven依赖,当从私服上找不到的时候就会去中央仓库中下载。一般使用nexus搭建maven私服。具体的搭建方法百度一下就有很多了。
网友评论