maven是干嘛的
mvn
是项目管理工具。通过mvn
可以对java
项目进行依赖管理和项目构建。
maven坐标的概念
maven
的坐标俗称gav
。通过gav
可以定位一个Maven
工程。
-
groupid :
公司或组织名 -
artifactid :
模块名(实际项目名) -
version :
当前项目的版本
<groupId>com.mayn</groupId>
<artifactId>oms</artifactId>
<version>3.4</version>
maven依赖的导入
需要的依赖可以去maven仓库寻找,复制需要的dependency
到pom
文件。
eg:
<properties>
<shiro.version>1.4.0</shiro.version>
</properties>
<dependencyManagement>
<dependencies>
<!--Shiro核心框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
maven引入外部依赖
<!--京东API接口 -->
<dependency>
<groupId>com.jd</groupId>
<artifactId>jingdong-pop-api-sdk</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/sdk/open-api-sdk-2.0.jar</systemPath>
</dependency>
依赖的范围
dependency
的scope
属性表示依赖的范围,具体如下:
- compile 范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
是否参与部署:参与
典型例子:log4j
- test 范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子:Junit
- provided 范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子:servlet-api.jar
,一般在发布到 服务器中,比如 tomcat,服务器会自带servlet-api.jar
包,所以provided 范围依赖只在编译测试有 - runtime 范围依赖:在测试、运行的时候依赖,在编译的时候不依赖。例如:
JDBC
驱动,项目代码只需要jdk
提供的jdbc
接口,只有在执行测试和运行项目的时候才需要实现jdbc
的功能。
依赖排除
springboot内嵌Tomcat
,需要用外部Tomcat
启动程序时,需要排除自带的Tomcat
。使用exclusions
排除内嵌依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 去除内嵌tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖的冲突
- 同一个
pom
文件冲突
同一个pom.xml
文件,先申明者优先。
pom
文件中越往下越优先声明,优先级越高。 - 跨
pom
文件,路径最短者优先。
maven的常用命令
-
mvn compile
编译,将Java 源程序编译成class
字节码文件。 -
mvn test
测试,并生成测试报告。 -
mvn clean
将以前编译得到的旧的class
字节码文件删除。 -
mvn pakage
打包,动态 web工程打war
包,Java
工程打jar
包。 -
mvn install
将项目生成jar
包放在仓库中,以便别的模块调用。