Maven
1、Maven:项目对象模型
2、配置环境变量
3、Pom.xml文件
<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"> <!-- 版本:4.0.0 --> <modelVersion>4.0.0</modelVersion> <!-- 组织名称:暂时使用 组织名称+项目名称 作为组织名称 --> <!-- 组织名称:实际名称 按照访问路径规范设置,通常以功能作为名称: eg: junit spring --> <groupId>com.kkb.maven</groupId> <!-- 项目名称 --> <artifactId>HelloWorld</artifactId> <!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 --> <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号 --> <version>0.0.1</version> <!-- 名称:可省略 --> <name>Hello</name> <!-- 依赖关系 --> <dependencies> <!-- 依赖设置 --> <dependency> <!-- 依赖组织名称 --> <groupId>junit</groupId> <!-- 依赖项目名称 --> <artifactId>junit</artifactId> <!-- 依赖版本名称 --> <version>4.12</version> <!-- 依赖范围:test包下依赖该设置 --> <scope>test</scope> </dependency> </dependencies> </project>
4、常用指令
mvn compile :编译
mvn clean:执行 mvn clean命令,执行完毕后,会将target目录删除。
maven package:执行 mvn package命令,完成打包操作 ;执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war。
mvn install:执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作
5、修改本地仓库路径:
<localRepository>D:\Maven\apache-maven-3.6.3-bin\maven_repository</localRepository>
6、maven坐标:
groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本或者是所依赖的jar包的版本
<groupId>com.kkb</groupId>
<artifactId>demoProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
7、依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
scope属性值介绍:
1. compile 编译范围,默认scope,在工程环境的 classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候 都有效。
2.provided 容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使 用,打包的时候不会包含在目标包中 。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包,一般由servlet容 器提供,无需在打包到war包中,如果不配置为provided,把这些包打包到工程war包中,在tomcat6以上版本会 出现冲突无法正常运行程序(版本不符的情况)。
3.runtime 一般是运行和测试环境使用,编译时候不用加入classpath,打包时候会打包到目标包中。一般是通过动态加载或 接口反射加载的情况比较多。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫 描动态加载的情况。典型的包括:JDBC驱动等。
4.test 测试范围,一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit
5.system(一般不用,不同机器可能不兼容) 系统范围,与provided类似,只是标记为该scope的依赖包需要明确指定基于文件系统的jar包路径。因为需要通过 systemPath指定本地jar文件路径,所以该scope是不推荐的。如果是基于组织的,一般会建立本地镜像,会把本 地的或组织的基础组件加入本地镜像管理,避过使用该scope的情况。
8、依赖范围
总结:
(1) 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
(2) 当第二直接依赖的范围是test的时候,依赖不会得以传递。
(3) 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同 样为 provided;
(4) 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此 时传递的依赖范围为runtime;
排除依赖:
maven 的传递依赖能自动将间接依赖引入项目中来,这样极大地简化了项目中的依赖管理,但是有时候间接依赖 的关联包可以因为版本或其他原因,并不是我们想要的版本,那该怎么办呢? 这种做法就是排除依赖。那怎么实现排除依赖呢?实现排除依赖还是比较简单的,在直接依赖的配置里面添加 exclusions→exclusion 元素,指定要排除依赖的 groupId 和 artifactId 就行,如下面代码所示。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope> <exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
9、maven的继承性
1、创建父工程
2、创建子工程
3、父工程统一管理版本号
父工程声明版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.kkb</groupId>
<artifactId>demo2</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程不需要指定版本号:
<parent>
<groupId>com.kkb</groupId>
<artifactId>father</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.kkb</groupId>
<artifactId>demo2</artifactId><!--这里不需要指定版本-->
</dependency>
</dependencies>
4、父工程提取版本号:
当父工程中定义的jar包越来越多,找起来越来越麻烦,所以可以把版本号提取成一个属性集中管理
父工程:
<properties>
<log4j.version>1.2.9</log4j.version>
</properties>
子工程:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${log4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
10、maven的生命周期
(1) Clean Lifecycle: 在进行真正的构建之前进行一些清理工作。 Mvn clean
(2) Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。 Mvn compile test package install deploy
(3) Site Lifecycle: 生成项目报告,站点,发布站点。
注意:直接运行 mvn clean install site 可以运行所有这三套生命周期。
10.1、default :构建项目
Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些
比较重要和常用的阶段:
validate 验证项目结构是否正常,必要的配置文件是否存在
initialize 做构建前的初始化操作,比如初始化参数,创建必要的目录等
generate-sources 产生在编译过程中需要的源代码
process-sources 处理源代码,比如过滤值
generate-resources 产生主代码中的资源在classpath中的包
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes 产生编译过程中生成的文件
generate-test-sources 产生编译过程中测试相关的代码
process-test-sources 处理测试代码
generate-test-resources 产生测试中资源在classpath中的包
process-test-resources 复制并处理资源文件,至目标测试目录
test-compile 编译测试源代码。
process-test-classes 产生编译测试代码过程的文件
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package 处理打包前需要初始化的准备工作
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test 做好集成测试前的准备工作,比如集成环境的参数设置
integration-test 集成测试
post-integration-test 完成集成测试前的准备工作,比如集成环境的参数设置
verify 检测测试后的包是否完好
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
10.2、site:生成项目站点
Site生命周期
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
11、maven插件
1、在pom.xml文件中插入:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugin>
</build>
2、修改maven的setting.xml文件:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
3、tomcat插件:
a.创建maven类型的web工程
b.在pom.xml文件中添加如下信息:
<plugins>
<plugin> <!-- 配置插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
c.:点击“add confifiguration”,按照图片中的步骤添加tomcat命令,运行tomcat插件
运行方式1:
命令:tomcat:run 运行tomcat6(默认)
运行方式2:
命令:tomcat7:run 运行tomcat7(推荐,但是需要添加插件)
12、配置阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>