Maven基础知识
1、简介
1、Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以2、常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
3、四大特性:依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制
4、groupId一般是填写公司名 ,artifactId一般填写项目名,一般是以项目名为前缀,比如spring-MvcWeb,version就是版本号。
2、环境安装
1、检查JDK版本:JDK版本在1.7及其以上。
2、在https://maven.apache.org/download.cgi下载Maven项目。
3、配置系统环境,在高级系统环境中创建一个MAVEN_HOME变量(以bin目录为值),把变量加载到path路径下。
[注]存放的路径不要是中文和空格
4、dos窗口中用mvn -v查看环境是否配置成功。
5、由于第一次加载会比较慢,要在maven项目setting.xml文件中配置阿里仓库镜像和本地仓库地址。
阿里镜像:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
本地镜像地址:
<localRepository>E:/maven/mvn_factory</localRepository>
6、关于版本的基本介绍
Version: x.x.x-里程碑
第一个x表示大版本,有重大变革。
第二个x表示小版本,修复bug,增加功能。
第三个x表示更新。
里程碑版本:
SNAPSHOT:开发版
alpha:内部测试
beta:公开测试
Release|RC:发布版
GA:正常版本
推荐在pom文件中使用name标签为每个文件声明一个项目名称,以便方便信息交流。
3、手动创建Maven项目
1、手动创建项目路径:maven项目中目录结构:
--项目名
--src
--main
--java:存放JAVA代码的包
--resources:存放资源文件
--test
--java:编写测试环境的包
--resources:存放测试环境的资源文件
--pom.xml:编写maven依赖的文件
2、cmd进行项目名目录下
一、编译java文件
mvn compile
二、执行main方法
mvn exec:java -Dexec.mainClass="com.zwf.demo.Hello"(java文件的全路径文件名)
- 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zwf</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>Plexus Classworlds</name>
<properties>
<javaVersion>8</javaVersion>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4、Maven命令
mvn [plugin-name]:[goal-name]
命令代表的含义:执行plugin-name插件的goal-name目标
- 常用命令
命令 | 描述 |
---|---|
mvn -version | 显示版本信息 |
mvn clean | 清理项目生产的临时文件,一般是模块下的target目录 |
mvn compile | 编译源代码,一般编译模块下的src/main/java目录 |
mvn package | 项目打包工具,会在模块下的target目录生成jar或war等文件。 |
mvn test | 测试命令,或者执行src/test/java下junit的测试用例 |
mvn install | 将打包的jar/war文件复制到你的本地仓库中,提供其他人员进行下载依赖 |
mvn deploy | 将打包的文件发布到远程参考,提供其他人员进行下载依赖 |
mvn site | 生成项目相关信息的网站 |
mvn eclipse:eclipse | 将项目转化为Eclipse项目 |
mvn dependency:tree | 打印出项目的整个依赖树 |
mvn run:tomcat7 | 在tomcat服务器中运行项目文件 |
注意:运行mvn命令时要在pom.xml路径下执行!
mvn package -Dmaven.test.skip=true 表示在打包时跳过测试环境。
mvn -Pdev -Dmaven.test.skip=true 表示在dev环境下发布时跳过测试环境。
5、IDEA配置自定义Maven环境
- IDEA创建JAVA maven项目
- 自定义Maven命令
- IDEA创建web Maven项目
- jetty和tomcat插件的区别
Jetty的架构比Tomcat的更为简单Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
- 在pom.xml文件中引入jetty插件
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9000</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<contextPath>/</contextPath>
<scanIntervalSeconds>0</scanIntervalSeconds>
<stopKey>stop</stopKey>
<stopPort>9001</stopPort>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
</plugins>
</build>
- Tomcat7插件
<build>
<plugins>
<!--Tomcat7插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>9999</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
6、资源拷贝插件
Maven项目下,默认只编译src/main/java中的java文件以及resource目录下的配置文件,如果需要让java和配置文件以外的文件进行编译,就需要引入拷贝插件,比如mybatis项目中。
- 模板格式
<build>
<!--引入资源拷贝插件-->
<!--编译java文件时,包括txt文件都要进行编译。-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.txt</include>
</includes>
</resource>
<!--编译资源文件时,包括txt、xml、properties文件都要进行编译。-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.txt</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
7、生命周期
maven有三套生命周期:
1、清理target文件夹生命周期。(clean)
2、发布项目生命周期。(validate-->compile-->test-->package-->verify-->install-->deploy)
3、生成站点信息生命周期。(site)
如果要使用发布项目生命周期的任何一个阶段,不光是执行这个阶段,会把这个阶段以前的所有阶段进行执行一遍。
- 要使用生成站点信息操作,要引入以下插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</build
8、Scope作用域标签
Scope作用域是针对每个jar包依赖,在哪个时间段执行。通俗点讲,compile作用域是整个阶段都生效(不编写scope标签默认是compile),provided作用域是在编译时生效,runtime作用域是只在运行时生效,test作用域是只在测试环境下生效,system要结合systemPath属性使用,表示依赖不是来源于本地库,而是来源于其他目录。
9、Maven项目关系(项目与项目关系)
- 依赖关系
maven项目中有三个关系:依赖(普通maven项目)、继承(springboot项目)、聚合(springcloud项目)
1、如果要依赖第三方组件,只需要直接在pom.xml文件中导入依赖(<groupId>等标签)。
2、如果要依赖本地项目,要先把本地项目进行安装发布到本地仓库(mvn install),再在pom.xml文件中导入依赖。
3、依赖具有传递性:A依赖B,B依赖C,最终A会依赖C。A->B->C
4、如果依赖重复引入,会应用最短路径,哪个依赖路线离项目近就使用哪个依赖。
如果重复项目依赖路径相同,由配置在pom.xml文件引入顺序决定,在前面引入的优先使用。
5、实际开发中一般引入项目依赖会排除重复依赖。
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
- 继承关系
1、如果多个项目要引入共同项目依赖,一般使用继承关系,父项目打包类型可以是pom、jar、war类型,但是由于继承关系只使用父类的依赖包,所以一般父项目的打包方式是pom类型。
2、子项目要引用父项目依赖时,必须先install安装发布到本地仓库,再在pom.xml文件中引入父项目依赖。
3、子项目引入父项目的代码格式(pom.xml):
<parent>
父项目依赖
</parent>
- 选择性继承
1、maven默认会引入父项目的所有依赖包,如果项目比较大,不使用依赖包引入,会让项目变得更加冗余,所以我们可以选择需要的依赖进行继承。
2、使用方式:
一、先在父项目的pom文件中dependencies标签外嵌套一层dependencyManagement标签。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、在子项目的pom文件中引入父项目所需要的依赖,不用加版本号和作用域,会自动继承父项目依赖,保持版本一致性。
- 继承关系与依赖关系的区别:
1、继承关系和依赖关系,前提父项目都要发布到本地。
2、依赖关系是使用父项目的JAVA代码,只能把父路径的打包方式设置为jar。(<packaging>jar</packaging>)
3、继承关系是使用父项目的依赖,打包方式虽然都可以设置,一般父项目中不写JAVA代码,一般设置为pom。(<packaging>pom</packaging>)
4、项目与项目之间只有单继承,如果重复继承会被覆盖。
- 聚合关系
1、聚合关系的前提必须是继承关系,聚合关系不用使用install安装发布到本地,聚合关系实际上是在一个父工程中添加多个子工程,不用来回切换页面进行代码编写,在同一个页面中可以编写子工程代码。
2、父工程的pom.xml文件中配置如下:
<!--聚合关系-->
<modules>
<module>SPro1</module>
<module>SPro2</module>
</modules>
标签:maven,依赖,项目,基础知识,Maven,pom,mvn
From: https://www.cnblogs.com/smallzengstudy/p/17647117.html