Maven1

1. 基本概念

maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。

1.1 项目构建

项目构建是一个项目从编写源码到编译、测试、运行、打包、部署、运行的过程

1.2 依赖管理

        依赖管理就是对项目所有的依赖的jar包进行规范化的管理。

        maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包,运行。

      只用maven依赖管理添加jar的好处:

1. 通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。

2. maven团队维护了一个非常全的maven仓库,里面包括了当前使用的几乎所有的jar,maven工程可以自动从maven仓库下载jar包,非常方便。

        在maven中依赖管理是通过<dependencies>标签来管理的

例如:HTTPClient的依赖

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.2</version>
</dependency>

 groupId:组ID,一般用包名来表示,表示项目是由哪个组织开发的。

artifactId:一般是项目的名称。

version:该元素定义jar包的版本。

1.3 使用maven的好处

1.3.1 一步构建

maven对项目构建的过程进行标准化,通过一个命令即可完成构建工程

1.3.2 依赖管理

maven工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便不易出错。

1.3.3 跨平台

可以在Windows上和Linux上使用

1.3.4 提高了开发效率

maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven构建项目

2. maven安装

2.1. 环境变量配置

将下载好的maven文件,解压到一个不含中文和空格的目录中。

2.1.1 maven目录说明

bin目录:存放着maven的一些命令。如:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)

boot目录:maven运行需要类加载器,该文件夹存放的是一些启动加载器与类

conf目录:配置文件夹,如:settings.xml整个maven工具核心配置文件

lib目录:maven运行依赖jar包

2.1.2 环境变量配置

jdk版本需要1.7+版本

1. 新建MAVEN_HOME

注意:变量值规范不需要加bin

2. 将MAVEN_HOME添加到path

3. MAVEN仓库与配置

3.1 MAVEN仓库

3.1.1 作用

        maven工作需要从仓库下载一些jar包,当我们的项目通过maven软件从远程仓库下载了jar并保存在本地仓库(设置好的本地文件夹),当再次需要这些jar的时候,就不会冲远程仓库下载了,而是从本地仓库取。本地仓库可以理解为缓存

3.1.2 本地仓库

        用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。

注意:默认的本地仓库地址为,${user.dir}/.m2/respository,${user.dir}表示Windows用户目录。

3.1.3 远程仓库

如果项目需要的jar或者插件在本地仓库没有,那么,就会默认去远程仓库下载,远程仓库可以在互联网也可以在局域网。

3.1.4 中央仓库

      在maven软件中内置一个远程仓库地址,http://repo1.maven.org/maven2,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常安全的jar包,它包含了全世界上大部分流行的开源项目构件。

3.2 配置本地仓库

在maven的解压缩文件中的conf下,有一个文件settings.xml,本地仓库就在这个配置文件中配置。

找到localRepository标签位置,添加本地路径即可

<localRepository>F:\maven\repository</localRepository>

3.3 私服

私人搭建的服务器,一般在企业内部局域网中使用。私服也叫作远程仓库

4. maven的命令

1)mvn clean:清理

2)mvn compile:编译

3)mvn test-compile:编译测试程序

4)mvn test:执行测试

5)mvn package:打包

6)mvn install:安装

7)mvn site:生成站点

4.1 compile

compile命令是maven工程的编译命令,其作用是将src/main/java下的文件编译为class文件输出到target目录下。

例如:在cmd命令进入控制台,执行命令  mvn compile 

4.2 clean

clean是maven工程的清理命令,执行clean会删除target目录的内容

4.3 package

package是maven工程的打包命令,对于java工程打成jar包,对于web工程打成war包

4.4 install

install是maven工程的安装命令,执行install将maven打成jar或者war发布到本地仓库

4.5 test

test是maven工程的测试命令,会执行src/test/java下的单元测试类。

cmd执行mvn test 执行 src/test/java 下单元测试类。

5. maven的三套生命周期

maven对项目构建过程分为三套相互独立的生命周期。这三套生命周期分别是:

1. Clean Lifecycle:在进行真正的构建之前进行一些清理工作

2. Default Lifecycle:构建的核心部分,编译、测试、打包、部署等

3. Site Lifecycle:生成项目报告、站点、发布站点等。

        他们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点,当然你也可以直接运行mvn clean install site 运行所有这三套声明周期。

注意:在企业开发中,我们一般不会用到第三个生命周期。

5.1 生命周期的阶段

        每个生命周期都有很多阶段(Phase),每个阶段对应一个执行命令。例如:运行mvn clean ,这个clean是Clean声明周期的一个阶段,有Clean生命周期,也有clean阶段。

5.1.1 clean生命周期阶段

pre-clean:执行一些需要在clean之前完成的工作

clean:移除所有上一次构建生成的文件

post-clean:执行一些需要在clean之后立刻完成的工作

5.1.2 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:将最终的包复制到远程的仓库,以让其他开发人员与项目共享

5.1.3 site的生命周期

pre-site:执行一些需要在生成站点文档之前完成的工作

site:生成项目的站点文档

post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上

        这里比较常用的阶段是site阶段和site-deploye阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

命令:mvn site

5.2 命令与生命周期的阶段

        每个maven命令对应生命周期的某个阶段。

例如:mvn clean命令对应clean生命周期的clean阶段;mvn test 对应default生命周期的test阶段

        执行命令会将该命令所在的生命周期当中之前的阶段自动完成。

例如:执行 mvn clean命令会去自动执行pre-clean和clean两个阶段‘mvn test会去自动执行validate、compile、test等阶段

注意:

1. 执行某个生命周期的某个阶段不会影响其他生命周期

2. 如果要同时执行多个生命周期,可在命令行输入多个命令,中间以空格隔开。

例如:clean package,该命令执行clean生命周期的clean阶段和default生命周期的package阶段。

6. eclipse配置maven

6.1 配置maven插件

打开eclipse,window-preferences,在搜索框中输入maven,搜索

6.2 将eclipse与maven插件关联

6.3 在eclipse中设置maven

7. 使用eclipse创建maven工程

新建一个maven工程

7.1 修改编译器版本

7.1.1 方式一:通过工具添加编译版本

1. 右键项目,如图

2. 在弹出的对话框中输入compile,如图

选中最高版本,点击OK

3. 打开pom.xml文件,出现如下配置

<plugin>
  	<groupId>org.apache.maven.plugins</groupId>
  	<artifactId>maven-compiler-plugin</artifactId>
  	<version>3.5.1</version>
 </plugin>

4. 指定编译版本与编码格式

<configuration>
  	<!-- 源码版本 -->
  	<source>1.7</source>
  	<!-- 编译模板版本 -->
  	<target>1.7</target>
  	<!-- 指定编码 -->
  	<encoding>utf-8</encoding>
</configuration>

7.1.2 方式二:直接添加

直接在pom.xml中添加如下代码

<plugin>
  	<groupId>org.apache.maven.plugins</groupId>
  	<artifactId>maven-compiler-plugin</artifactId>
  	<version>3.5.1</version>
  	<configuration>
  		<!-- 源码版本 -->
  		<source>1.7</source>
  		<!-- 编译模板版本 -->
  		<target>1.7</target>
  		<!-- 指定编码 -->
  		<encoding>utf-8</encoding>
  	</configuration>
</plugin>

7.1.3 方式三:修改setting.xml文件的默认配置

打开maven解压缩文件,找到conf目录下的settings.xml文件,在<profiles>标签下添加如下代码

<profile>
      <id>jdk1.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>	
      	<maven.compiler.encoding>utf-8</maven.compiler.encoding>
      </properties>
  </profile>

7.2 新建servlet

新建servlet之后,会出现找不到jar的错误,这时候,需要添加jar依赖

public class HelloMaven extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("hello...");
		request.getRequestDispatcher("/index.jsp").forward(request, response);;
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

7.2.1 添加servlet-api

如图:

1. 添加依赖

2. 添加jar

同理:添加servlet-api

<dependencies>
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>servlet-api</artifactId>
  		<version>2.5</version>
  	</dependency>
  	<dependency>
  		<groupId>javax.servlet.jsp</groupId>
  		<artifactId>jsp-api</artifactId>
  		<version>2.0</version>
  	</dependency>
  </dependencies>

注意:

1. servlet-api是运行servlet必须的包,jsp-api包是用于编译jsp文件用的。

2. 如果运行的时候,报错500错误,Unable to compileclass for jsp,那么表示上面两个jar与tomcat冲突了,这时候,就需要给这两个jar配置作用于

例如:

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

7.3 添加Tomcat插件

<plugin>
  	<groupId>org.apache.tomcat.maven</groupId>
  	<artifactId>tomcat7-maven-plugin</artifactId>
  	<version>2.2</version>
  	<configuration>
  		<!-- 访问端口 -->
  		<port>8081</port>
  		<!-- 项目路径 -->
  		<path>/hello</path>
  		<!-- 编码 -->
  		<uriEncoding>utf-8</uriEncoding>
  	</configuration>
</plugin>

7.4 使用Tomcat插件运行项目

编译命令:

运行tomcat命令:

如图:选择第5个maven build

注意:第4个是运行已经运行过的命令,第5个是首次运行命令

如图,键入命令,运行程序

7.5. 依赖范围

A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围。

7.5.1 compile

编译范围,指A编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要,所以编译范围的依赖会被打包。

7.5.2 provided

provided依赖只有在当JDK或者一个容器已提供该依赖后才使用,provided依赖在编译和测试的时候需要,在运行时不需要。例如:前面提到的servlet api被tomcat容器提供。

7.5.3 runtime

runtime依赖在运行和测试系统的时候需要,在编译的时候不需要。例如:jdbc的驱动包,由于运行时需要所以runtime范围的依赖会被打包。

7.5.4 test

test范围依赖,在编译和运行时都不需要,他们只有在测试编译和测试运行阶段可用,比如:Junit。由于运行时不需要所以test范围依赖不会被打包

7.5.5 system

system范围依赖与provided类似,但是,你必须显示的提供一个对于本地系统中jar文件的路径,需要制定systemPath磁盘路径,system依赖不推荐使用。

8. maven安装oracle依赖及驱动

1. 找到本地的oracle安装目录:D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib

2. 打开cmd命令窗口,切换到ojdbc6.jar的目录

 3. 执行mvn命令,安装:mvn install:install-file -Dfile=ojdbc6.jar -Dpackaging=jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0

注意:

1. mvn install:install-file -Dfile="jar包的绝对路径"

2. -Dpackaging="文件打包方式"

3. -DgroupId=groupid名

4. -DartifactId=artifactId名

5. -Dversion=jar版本 (artifactId名对应之后maven配置的依赖名)。
4. 回车,安装

maven仓库:https://www.mvnrepository.com

9. maven中的dependencyManagement与dependencies

        maven使用dependencyManagement元素来提供了一种管理依赖版本号的方式,通常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。

        使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖而不用显式的列出版本。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个dependencyManagement元素中指定的版本号。
        这样做的好处就是:如果有多个子项目引用同一个依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或者切换到另一个版本的时候,只需要在顶层父容器里更新,而不需要一个一个子项目的修改,另外,如果某个子项目需要另一个版本,只需要声明version即可。

1)dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
2)如果不在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,且version与scope都读取自父pom
3)如果子项目中指定了版本号,那么会使用子项目中指定的版本jar

10. 一劳永逸解决maven项目jdk版本问题

在settings.xml文件中的<profiles>标签下加上如下代码

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

如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值