Maven的使用及注意事项

一、为什么使用Maven

  1. 一个项目就是一个工程

    如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。
    
    借助于maven就可以将一个项目拆分成多个工程
    
  2. 项目中使用jar包,需要 复制、粘贴 项目的lib中

    同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。
    
    借助于maven,可以将jar包保存在 仓库 中,不管在哪个项目只要使用引用即可就行。
    
  3. jar包需要的时候每次都要自己准备好或到官网下载

    借助于maven我们可以使用统一的规范方式下载jar包.
    
  4. jar包版本不一致的风险

    不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。
    
    借助于maven,所有的jar包都放在 仓库 中,所有的项目都使用仓库的一份jar包。
    
  5. 一个jar包依赖其他的jar包需要自己手动的加入到项目中

    commons-fileupload-1.3.jar
    依赖于
    commons-io-2.0.1.jar
    
    使用commons-fileupload-1.3.jar的时候需要对应的引入commons-io-2.0.1.jar
    
    需要花费时间在jar的依赖关系处理上。
    
    借助于maven,它会自动的将依赖的jar包导入进来。
    

二、maven是什么

  1. maven是一款服务于java平台的自动化构建工具

  2. 构建指的是什么

     构建定义:把软件项目经过编译得到的结果,部署到服务器上的整个过程。
    
     编译:java源文件[.java]->编译->Class字节码文件[.class]
    
     部署:把项目编译后部署到服务器中
    
  3. 构建的各个环节

     [1] 清理clean:将以前编译得到的旧文件class字节码文件删除
    
     [2] 编译compile:将java源程序编译成class字节码文件
    
     [3] 测试test:自动测试,自动调用junit程序
    
     [4] 报告report:测试程序执行的结果
    
     [5] 打包package:动态Web工程打War包,java工程打jar包
    
     [6] 安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
    
     [7] 部署deploy:将工程生成的结果放到服务器中或者容器中,使其可以运行
    

三、安装maven

  1. 当前系统是否配置JAVA_HOME的环境变量

  2. 下载maven,解压maven放在一个非中文无空格的路径下

  3. 配置maven的相关环境变量

     [1] 在环境变量增加M2_HOME,路径是maven解压后的根目录
    
     [2] 在环境变量里的path中增加maven/bin的目录
    
  4. 验证:mvn -v 查看maven版本

四、maven项目

  1. 创建约定的目录结构(maven工程必须按照约定的目录结构创建)(约定优于配置)
    maven工具只能针对maven项目来使用(拥有maven项目结构的项目可以用maven工具 )【不同IDE工具创建的项目结构不一致,使用maven创建项目,可以创建项目结构一致的项目】

    [1] 根目录:工程名
    
    [2] |---src:源码
    
    [3] |---|---main:存放主程序
    
    [4] |---|---|---java:java源码文件
    
    [5] |---|---|---resources:存放框架的配置文件
    
    [6] |---|---test:存放测试程序
    
    [7] |---|---|---java:java测试文件源码
    
    [8] |---|---|---resources:存放框架的测试配置文件
    
    [9] |---pom.xml:maven的核心配置文件
    

    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>
    
    	<!-- 1.公司或者组织域名倒序+项目名 -->
    	<groupId>com.briup</groupId>
    	<!-- 2.模块名 -->
    	<artifactId>mvn-test</artifactId>
    	<!-- 3.版本 -->
    	<version>0.0.1-SNAPSHOT</version>
    
    	<name>mvn-test</name>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    	
    	<dependencies>
    		<!-- 配置需要用的依赖jar包 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.0</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<!-- 配置需要用的插件 -->
    		</plugins>
    	</build>
    
    </project>
    
  2. 常用maven命令

     [1] mvn clean:清理
    
     [2] mvn compile:编译主程序
    
     [3] mvn test-compile:编译测试程序
    
     [4] mvn test:执行测试
    
     [5] mvn package:打包
    
     [6] mvn install:安装
    

    注意:执行maven命令必须进入到pom.xml的目录中进行执行

五、仓库和坐标

  1. pom.xml:Project Object Model 项目对象模型。它是maven的核心配置文件,所有的构建的配置都在这里设置。

  2. 坐标:使用下面的三个向量在仓库中唯一的定位一个maven工程

  3. maven工程的坐标与仓库中路径的关系:

     maven坐标和仓库对应的映射关系:[groupId]\[artifactId]\[version]\[artifactId]-[version].jar
    
  4. 仓库
    仓库的分类:

     	本地仓库:
     		当前电脑上的仓库,有默认位置,有可以在maven安装包中的setting文件中进行配置
    
     	远程仓库:
    
     		私服:搭建在局域网中,一般公司都会有私服,私服一般使用nexus来搭建。
    
     		中央仓库:例如maven官方自己的中央仓库
    

六、依赖

  1. maven解析依赖信息时会到本地仓库中取查找被依赖的jar包

     对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载到本地仓库【中央仓库在国外,一般映射国内的阿里云镜像】
    
     对于中央仓库也找不到依赖的jar包的时候,就会编译失败了
    
  2. 如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中

  3. 依赖范围
    scope就是依赖的范围

     1、compile,默认值,适用于所有阶段(开发、测试、部署、运行),jar包会一直存在所有阶段。
    
     2、provided,只在开发、测试阶段使用,目的是不让将来部署的容器和你本地仓库的jar包冲突 。因为有些jar包在将来部署的服务器或者容器中是存在的。所以打包的是就不需要把这些jar添加进来了。
    
     3、runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    
     4、test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    
     5、system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
    
  4. 把已有的jar安装到仓库中
    因为有些jar中央仓库中没有,例如oracle连接的驱动包,由于版权等相关问题,中央仓库不提供下载,所以需要我们拿到jar后,自己手动安装到自己本地仓库中。
    4.1.提前需要配置俩个环境变量

     	M2_HOME=...
     	将%M2_HOME%\bin加入到PATH中
    

    4.2.在jar所在目录中执行maven命令

     	mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=6【版本号】 -Dpackaging=jar【打包方式】 -Dfile=ojdbc6.jar【打成什么文件】 -DgeneratePom=true【是否生成pom文件】
    
     	mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=14 -Dpackaging=jar -Dfile=ojdbc14.jar -DgeneratePom=true
    
     	mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=5 -Dpackaging=jar -Dfile=ojdbc5.jar -DgeneratePom=true
    

    4.3.pom文件中添加依赖

     	<dependency>
     		<groupId>com.oracle</groupId>
     		<artifactId>ojdbc14</artifactId>
     		<version>14</version>
     	</dependency>
     	<dependency>
     		<groupId>com.oracle</groupId>
     		<artifactId>ojdbc6</artifactId>
     		<version>6</version>
     	</dependency>
     	<dependency>
     		<groupId>com.oracle</groupId>
     		<artifactId>ojdbc5</artifactId>
     		<version>5</version>
     	</dependency>
    

七、生命周期
Maven有三套相互独立的生命周期,这三套生命周期分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。Clean生命周期一共包含了三个阶段:

     1、pre-clean 执行一些需要在clean之前完成的工作
    
     2、clean 移除所有上一次构建生成的文件
    
     3、post-clean 执行一些需要在clean之后立刻完成的工作
    
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

     1、validate(验证)
    
     2、generate-sources
    
     3、process-sources
    
     4、generate-resources
    
     5、process-resources 复制并处理资源文件,至目标目录,准备打包
    
     6、compile 编译项目的源代码
    
     7、process-classes
    
     8、generate-test-sources
    
     9、process-test-sources
    
     10、generate-test-resources
    
     11、process-test-resources 复制并处理资源文件,至目标测试目录
    
     12、test-compile 编译测试源代码
    
     13、process-test-classes
    
     14、test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
    
     15、prepare-package
    
     16、package 接受编译好的代码,打包成可发布的格式,如 JAR
     	注意,打包时可以跳过测试阶段:
     	mvn package -Dmaven.test.skip=true
    
     17、pre-integration-test
    
     18、integration-test
    
     19、post-integration-test
    
     20、verify
    
     21、install 将包安装至本地仓库,以让其它项目依赖。
    
     22、deploy
    
     注意:在一个生命周期中,每一个阶段(phase)可以理解为一个步骤,这些步骤按照既定的顺序执行来完成一个项目的构建。
    
     生命周期中,各个步骤的工作是由相应的插件(plugin)来完成的,一个插件通常完成一个或多个步骤的工作,每个步骤的工作对应插件的一个目标(goal)。
     不同的插件结合起来,就可以完成整个项目的构建,例如:编译插件,compiler;测试插件,surefire;打包插件,jar;安装插件,install,部署插件,deploy。
     
     maven中默认情况下,已经有设置了相应的插件来处理相应的步骤了。
     	【执行每个步骤都从第一个周期到当前周期】
    
  3. Site Lifecycle 生成项目报告,站点,发布站点。

     1、pre-site 执行一些需要在生成站点文档之前完成的工作
    
     2、site 生成项目的站点文档
    
     3、post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    
     4、site-deploy 将生成的站点文档部署到特定的服务器上
    

八、build配置

【插件的目标(goal),需要绑定到maven生命周期中的某一个阶段上(phase)上,当我们使用maven命令去执行的时候,当我们使用maven的命令去执行时,
例如
执行mvn compile的时候那么绑定到这个阶段(phase)的插件目标就会执行了,然后完成这个阶段(phase)做的事情】

【插件的目标(goal),就这个插件自带的命令,一个插件可能会有多个目标】
在pom文件中的标签中,可以配置打包后jar的名字、项目中资源文件的位置、配置构建时候的插件等
例如:

<build>
	<!-- 打包后项目的名字,可以使用变量表示 -->
	<finalName>${project.artifactId}</finalName>

	<!-- 描述项目中资源的位置 -->
	<resources>
		<!-- 自定义资源1 -->
	    <resource>
			<!-- 资源目录 -->
	        <directory>src/main/resources</directory>
			<!-- 包括哪些文件参与打包 -->
	        <includes>
	            <include>**/*</include>
	        </includes>
			<!-- 排除哪些文件不参与打包 -->
	        <excludes>
	        	<exclude>config/*</exclude>
	        </excludes>
	    </resource>
	</resources>
	
	<!-- 设置构建时候的插件 -->
	<plugins>
		<!-- 资源编码插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>3.1.0</version>
			<configuration>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>

		<!-- 代码编译插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>【插件需要绑定到生命周期上】
			<version>3.8.1</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>

		<!-- 源码打包插件 -->
		【javap -verbose Hello.class:查看class文件的详细信息】
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>3.1.0</version>
			<executions>
				<execution>
					<!-- 绑定source插件到Maven的生命周期 (compile) -->
					<phase>compile</phase>
					<!--在生命周期后执行绑定的source插件的goals(jar-no-fork) -->
					<goals>
						<goal>jar-no-fork</goal>
					</goals>
				</execution>
			</executions>
		</plugin>

		<!-- 可执行jar插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-shade-plugin</artifactId>
			<version>3.2.1</version>
			<configuration>
				<!-- 设置打包时候生成dependency-reduced-pom.xml文件为false -->
				<createDependencyReducedPom>false</createDependencyReducedPom>
			</configuration>
			<executions>
				<execution>
					<!-- 绑定shade插件到Maven的生命周期 (package) -->
					<phase>package</phase>
					<!--在生命周期后执行绑定的shade插件的goals -->
					<goals>
						<goal>shade</goal>
					</goals>
					<configuration>
						<transformers>
							<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
								<!--指定程序入口类 -->
								<mainClass>com.briup.test.HelloTest</mainClass>
							</transformer>
						</transformers>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值