大家好,又见面了,我是你们的朋友全栈君。
Maven环境配置及介绍
Maven的出现是为了解决jar包管理的问题,可以通过简短的描述信息,进行项目管理的工具软件。
1.maven的安装
下载地址:http://maven.apache.org/downloa/d.cgi
2.环境变量配置
maven环境变量配置,配置方式跟jdk有些类似。新建环境变量MAVEN_HOME(值为maven的根目录)、然后在PATH环境变量里加入%MAVEN_HOME%bin;即可。
使用快捷键win R,在黑窗口输入mvn –v进行查看,显示如下就表示配置成功了
3.配置settings.xml文件
有了maven后,就不需要再频繁的下载jar包了,只需要引入一个坐标,就可以找到对应的jar。所有的jar包都放在仓库(repository)中,输入对应的坐标就可以再仓库中找到了。 在安装的目录下找到conf
xml配置文件中的很多英文注释,如果没有能力区阅读可以忽略,但需要在文件中配置部分路径。
代码语言:javascript复制复制53行到末尾配置自己的仓库地址 <localRepository>D:repository</localRepository>
由于中央仓库式国外的大佬搞出来的,所以使用外网下载jar包会很慢,所以需要使用到我们国内的大佬们去搭建的私服镜像克隆了中央仓库以供使用,当然xx自由者可直接去中央仓库下载:https://mvnrepository.com/,国内的镜像用阿里的就可以了,当然还有其他的镜像仓库可以去百度,这里是一个阿里云镜像。
<!-- 阿里云镜像 -->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<!-- https://maven.aliyun.com/repository/public/ -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
懒人式CTRL大法:
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:repository</localRepository>
<!-- 阿里云镜像 -->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<!-- https://maven.aliyun.com/repository/public/ -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
仓库知识急救区
- 本地仓库:就是Maven在本机存储构件的地方。maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建。maven本地仓库的默认位置:在用户的目录下都只有一个.m2/repository/的仓库目录;可以修改。
- 中央仓库:包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。开源的Java项目依赖的构件都可以在这里下载到。
- 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库。
4.IDEA集成maven
创建一个Maven项目:
maven项目在默认情况下会产生JAR文件,编译后的classes会放在target/classes下面,JAR文件放在target下面。
创建完maven项目后,系统会提示导入Maven:
这时可以先不导入,因为系统默认的是IDEA的Maven,也可以用,但是没有配置仓库的位置。所以需要在File–>setting中找到maven,配置好自己的路径。
5.maven常用命令
常用命令 | |
---|---|
编译源代码 | mvn compile |
编译测试代码 | mvn test-compile |
清除产生的项目 | mvn clean |
运行测试 | mvn test |
产生site | mvn site |
打包 | mvn package |
在本地Repository中安装jar | mvn install |
上传项目到远程仓库 | mvn deploy |
注意:如果出现报错信息,需要在pom.xml中设置jdk1.8。
代码语言:javascript复制设置插件如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source> <!-- 源代码使用jdk1.8支持的特性 -->
<target>1.8</target> <!-- 使用jvm1.8编译目标代码 -->
<compilerArgs> <!-- 传递参数 --通过支持反射拿到方法名>
<arg>-parameters</arg>
<arg>-Xlint:unchecked</arg>
<arg>-Xlint:deprecation </arg>
</compilerArgs>
</configuration>
</plugin>
6.maven项目生命周期(Lifecycle)
clean: 主要目的是清理项目(第一生命周期)
- pre-clean: 执行一些清理前需要完成的工作
- clean: 清理上一次构建生成的文件
- post-clean: 执行一些清理后需要完成的工作
default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分 validate initialize generate-sources process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容 进行变量替换等工作后,复制到项目输出的主classpath目录中 generate-resources process-resources compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中target process-classes generate-test-sources process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录 的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中 generate-test-resources process-test-resources test-compile: 编译项目的测试代码,一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中 process-test-classes @Test test: 使用单元测试框架运行测试,测试代码不会打包或部署 prepare-package package: 接受编译好的代码,打包成可发布的格式,如JAR pre-integration-test integration-test post-integration-test verify install: 将包安装到Maven本地仓库,供本地其他Maven项目使用 deploy: 将最终的包复制到远程仓库(私服),供其他开发人员和Maven项目使用 site生命周期: 建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点 pre-site: 执行一些在生成项目站点之前需要完成的工作 site: 生成项目站点文档 post-site: 执行一些在生成项目站点之后需要完成的工作 site-deploy: 将生成的项目站点发布到服务器上
7.pom.xml基本配置说明
代码语言:javascript复制<!--固定的-->
<modelVersion>4.0.0</modelVersion>
<!--描述当前项目的组织-->
<groupId>cn.cdqf</groupId>
<!--描述当前项目的唯一id-->
<artifactId>maven_01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--定义打包的方式 jar:默认方式 war: web项目最终打成war包 放在服务器上运行 pom:其它项目的父亲 -->
<packaging>war</packaging>
<!--spring jar包有50个 组织 id 版本 定义常量 -->
<properties>
<junit.version>4.12</junit.version>
</properties>
<!--项目所有依赖都写在这里面 每一个<dependency>就表示一个依赖 groupId artifactId version :精确在仓库中定位一个jar -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<!--依赖范围-->
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
<!--排除当前jar依赖的某个jar包 一般在jar包冲突的时候使用-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
8.scope依赖范围
scope定义依赖的范围,默认是compile
compile
编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;
test
测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;
provided
已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容器已经提供,无需Maven重复引入;
runtime
运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
system
系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用
9.jar包的冲突
传递依赖:某个SDK会依赖某些jar包,如果这个SDK是写的比较好的项目,当别人用到该SDK的时候需要导入SDK的jar包,同时也会传递导入SDK中依赖的jar包。
引入条件:
- 第一原则:路径优先
- 第二原则:第一声明者优先
排除jar包的依赖冲突:
代码语言:javascript复制<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
<!--排除当前jar依赖的某个jar包 一般在jar包冲突的时候使用-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
10.常用插件
插件名称 | 用途 | 来源 |
---|---|---|
maven –clean -plugin | 清理项目 | Apache |
maven –compile -plugin | 编译项目 | Apache |
maven –deploy -plugin | 部署项目 | Apache |
maven –install -plugin | 安装项目 | Apache |
maven –resources -plugin | 处理资源文件 | Apache |
maven –site -plugin | 生成站点 | Apache |
maven –surefire -plugin | 执行测试 | Apache |
maven –jar -plugin | 构建JAR项目 | Apache |
maven –war -plugiin | 构建war项目 | Apache |
maven –shade -plugin | 构建包含遗憾的JAR包 | Apache |
maven –changelog -plugin | 生产版本控制变更报告 | Apache |
maven –checkstyle -plugin | 生成checkStyle报告 | Apache |
maven –javadoc –plugin | 生成JavaDoc文档 | Apache |
maven –pmd –plugin | 生成PMD报告 | Apache |
maven –project –info -reports –plugin | 生成项目信息报告 | Apache |
maven –surefire –plugin | 生成单元测试报告 | Apache |
maven -archetype –plugin | 基于Archetype生成项目骨架 | Apache |
maven –assembly –plugin | 构建自定义格式的分布包 | Apache |
maven –dependency –plugin | 依赖分析及控制 | Apache |
maven –enforcer –plugin | 定义规则并强制要求遵守 | Apache |
maven –pgp –plugin | 为项目构建生成PGP签名 | Apache |
maven -invoke –plugin | 自动运行Maven项目构建并验证 | Apache |
maven –release –plugin | 自动项目版本发布 | Apache |
maven –scm –plugin | 集成版本控制系统 | Apache |
maven –source –plugin | 生成源码包 | Apache |
properties –maven –plugin | 从properties文件读写Maven属性 | Codehaus |
sql –maven –plugin | 运行SQL脚本 | Codehaus |
tomcat –maven –plugin | 启动、停止、部署项目 | Codehaus |
versions –maven –plugin | 自动化批量更新POM版本 | Codehaus |
cargo –maven –plugin | 启动/停止/配置各类Web容器自动化部署Web项目 | Cargo |
jetty –maven –plugin | 集成jetty容器,实现快速开发测试 | Eclipse |
11.maven的聚合
聚合的好处:模块重用
- 新建一个emptyproject
- 新建模块
- 父模块
- Util工具模块
代码语言:javascript复制 - Dao模块
代码语言:javascript复制 - service模块
代码语言:javascript复制 - Controller模块
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146578.html原文链接:https://javaforall.cn