Maven:生命周期/插件/目标,继承,聚合

生命周期/插件/目标

生命周期就是各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。

Maven 有三套相互独立的生命周期,分别是:
①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 ②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
③Site Lifecycle 生成项目报告,站点,发布站点。
它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以 直接运行 mvn clean install site 运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比 如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

Clean 生命周期一共包含了三个阶段:
①pre-clean 执行一些需要在 clean 之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在 clean 之后立刻完成的工作

Site 生命周期
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大 的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

Default 生命周期
Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里, 只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

Maven核心程序为了更好的实现自动化构建,按照这一的特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行。
在这里插入图片描述
在这里插入图片描述

插件和目标

[1]生命周期的各个阶段仅仅定义了要执行的任务是什么。
[2]各个阶段和插件的目标是对应的。
[3]相似的目标由特定的插件来完成。
[4]可以将目标看作“调用插件功能的命令"
在这里插入图片描述

在eclipse中使用Maven

首先一般不是太低级的eclipse都会内置Maven插件
但是内置的Maven插件需要设置一些参数,

  1. installations:这是指定Maven核心程序的位置,不建议使用插件自带的Maven程序,而是使用我们自己在电脑安装的
  2. user settings:指定conf/settings.xml的位置,进而获取本地仓库的位置
    在这里插入图片描述
    在这里插入图片描述

设置通过Maven创建的工程的JDK版本

[1]打开settings.xml文件
[2]找到profiles标签
[3]加入如下配置

<profile>
		<id>jdk-1.7</id>
		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>1.7</jdk>
		</activation>
		<properties>
			<maven.compiler.source>1.7</maven.compiler.source>
			<maven.compiler.target>1.7</maven.compiler.target>
			<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
		</properties>
</profile>

创建Java工程

在这里插入图片描述
一般将Create a simple project(skip archetype selection)勾选上,这个选项主要是创建约定的目录结构使用的插件是什么,如果没有勾选接下来就是叫你选择插件
在这里插入图片描述

创建web工程

前面还是和创建java工程一样,但是这里选择的打包的方式不一样,就是将jar改成war
其实生成的工程目录和Java工程的差不多,就是src/main下面多了个webapp,但是实际上我们创建web工程有WEB-INF等目录的
在这里插入图片描述
所以我们得这样设置,首先在项目中的properties中找到project Facets,在其中就有Dynamic Web Moudule,本来应该是勾选上的,先取消勾选,apply,然后再勾选上,出现这个配置,点击
在这里插入图片描述
在这里插入图片描述
改成
在这里插入图片描述
apply后就生成META-INF和WEB-INF等web目录
在这里插入图片描述
如果你再webapp里面新建jsp页面,你会发现报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
这就是首先项目中没有servlet-api的jar包,对于Maven来说也没有依赖,所以我们得在Maven中加入依赖
现在我们 加入三个不同范围的依赖,servlet-api的依赖可以让报错信息没有

	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>
		
	</dependencies>

在tomcat运行后,回发现生成的部署文件中只有log4j的jar包,其他的都没有生成,证明了只有complie范围依赖回进行部署
在这里插入图片描述

解决jar包冲突的问题

比如现在需要在jsp里面写el表达式,所以需要加入相关的依赖信息

	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1.3-b06</version>
		<scope>provided</scope>
	</dependency>

如果将上面的以来信息改成compile依赖,这时就会出现依赖冲突的问题,就是项目本身就有jsp-api的jar包,这时候Tomcat的servlet容器又会提供相对应的jsp-api,不知道使用哪一个而出现NullpointException之类的异常

继承

现在的情景是:
Hello依赖的junit:4.0
HelloFriend依赖的junit:4.0
MakeFriends依赖的junit:4.9
由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。

②需求:统一管理各个模块工程中对junit依赖的版本

③解决思路:将junit依赖统一提取到“父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。同时也便于修改。
④操作步骤

  1. 创建一个Maven工程作为父工程。注意:打包的方式pom

  2. 在子工程中声明对父工程的引用

<parent>  
	<groupId>jane</groupId>
	<artifactId>Parent</artifactId>  
	<version>0.0.1-SNAPSHOT</version>
	 <!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->  
	 <relativePath>../Parent/pom.xml</relativePath> 
</parent> 
  1. 将子工程的坐标中与父工程坐标中重复的内容删除
    在这里插入图片描述

  2. 在父工程中统一junit的依赖

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.9</version>
				<scope>test</scope>
			</dependency>
		</dependencies>
	</dependencyManagement> 
  1. 在子工程中删除junit依赖的版本号部分
    在这里插入图片描述

聚合

作用:就是类似于一键安装各个模块工程
配置方式:在一个"总的聚合工程"中配置各个参与聚合的模块

//配置聚合
<modules>
	//指定各个子工程的相对路径  
	<module>../Hello</module>  
	<module>../HelloFriend</module>  
	<module>../MakeFriends</module> 
</modules> 

使用就直接再聚合工程的pom.xml上进行maven install就行了

推荐的Maven网站
http://mvnrepository.com/

猜你喜欢

转载自blog.csdn.net/qq_43416157/article/details/107703343
今日推荐