再识 Maven

再识 Maven

1 修改Maven默认JDK版本

方式一:只针对修改的工程
在工程的pom.xml文件中添加:

	<build>
		<plugins>
			<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>
				</configuration>
			</plugin>
		</plugins>
	</build>

方式二: 全局
在settings.xml文件中,在标签下添加以下内容:

	<profile>
	<id>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.compilerVersuon>1.8</maven.compiler.compilerVersuon>
	</properties>
</profile>

2 Maven项目直接在Tomcat中启动运行

在项目的pom.xml文件中配置tomcat-maven插件

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
			</plugin>
		</plugins>
	</build>		

启动命令:
tomcat7:run

3 Maven坐标主要组成

	groupId:		组织标识(包名)
	artifactId:	项目名称(项目名-模块名)
	version:		项目当前的版本
	packaging:		项目打包的方式,常见为jar和war两种,打的包默认在本地仓库中

样例:

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.3.18.RELEASE</version>
	</dependency>	

4 依赖范围

依赖范围scope用来控制依赖jar包和编译,测试,运行的classpath的关系,主要取值如下:

  1. compile:默认编译依赖范围,对于编译,测试,运行三种classpath都有效
  2. test:测试依赖范围,只对于测试classpath有效
    例如:junit
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>	
  1. provided:已提供依赖范围,对于编译,测试的classpath都有效,但对于运行无效,因为容器已经提供
    例如:servlet-api
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
		<scope>provided</scope>
	</dependency>	
  1. runtime:运行时提供
    例如:jdbc驱动
	<dependency>
		<groupId>com.oracle</groupId>
		<artifactId>ojdbc14</artifactId>
		<scope>runtime</scope>
	</dependency>

5 生命周期

Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,测试,打包,部署等构建过程

5.1 Maven的三套相互独立的生命周期分别是:
	1 .Clean LifeCycle		在构建之前进行清理工作
	2. Default LifeCycle	构建核心部分,编译,测试,打包,部署
	3. Site LifeCycle		生成项目报告,站点,发布站点

6 聚合和继承

6.1 聚合:

一次构建多个项目模块,需要对多个项目模块进行聚合

	<modules>
		<module>system-entity</module>
		<module>system-dao</module>	
		<module>system-service</module>
		<module>system-web</module>	
	</modules>

6.2 继承:

为了消除重复,把相同的配置提取出来

	<parent>
		<groupId>com.xms</groupId>
		<artifactId>system-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>	

项目结构:

    system-parent
    |---pom.xml
    |---system-entity
      |---src
      |---pom.xml
    |---system-dao
      |---src
      |---pom.xml
    |---system-service
      |---src
      |---pom.xml
    |---system-web
      |---src
      |---pom.xml	

7 传递依赖 与 排除依赖

  • 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
  • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
<exclusions>
   <exclusion>
      <groupId>cn.missbe.web.search</groupId>
      <artifactId>resource-search</artifactId>
      <packaging>pom</packaging>
      <version>1.0-SNAPSHOT</version>
   </exclusion>
</exclusions>

8 依赖冲突

若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

1.短路优先

例如:

A.jar——>B.jar——>X.jar
C.jar——>X.jar
若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。

这时,Maven只会引用引用路径最短的Jar。

2.声明优先

若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。

9 静态资源被拦截的处理

<mvc:default-servlet-handler/> 之后,对进入DispatcherServlet 的 URL进行筛查,如果发现是静态资源,就将请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet 继续处理
Tomcat, Jetty, JBoss, GlassFish 这些容器自带的默认Servlet的名字 都是default。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值