ELcker-maven教程

目录

简介

环境

下载:

配置:

Window下

LIUXS下

概念

约定配置

POM

生命周期

配置文件

插件

仓库

Maven 仓库有三种类型:

Maven 依赖搜索顺序

升级为MAVEN项目


简介

Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。

Maven 功能

  1. 构建
  2. 文档生成
  3. 报告
  4. 依赖
  5. SCMs
  6. 发布
  7. 分发
  8. 邮件列表

环境

下载:

官网:http://maven.apache.org/index.html 

          http://maven.apache.org/download.cgi

与JDK的版本说明:http://maven.apache.org/docs/history.html

配置:

配置环境变量(必须依赖jdk,所以要求环境变量中有对应的JAVA_HOME)

Window下

    配置maven信息
      新建环境变量 maven_home 变量值 :对应安装路径

      配置Path 在之后添加 ;%maven_home%\bin;

LIUXS下

    编辑 /etc/profile 文件 sudo vim /etc/profile,在文件末尾添加如下代码:

    export MAVEN_HOME=安装目录

    PATH=${PATH}:${MAVEN_HOME}/bin

    保存文件,并运行如下命令使环境变量生效:

    source /etc/profile

概念

约定配置

    Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:

目录

目的

${basedir}

存放pom.xml和所有的子目录

${basedir}/src/main/java

项目的java源代码

${basedir}/src/main/resources

项目的资源,比如说property文件,springmvc.xml

${basedir}/src/test/java

项目的测试类,比如说Junit代码

${basedir}/src/test/resources

测试用的资源

${basedir}/src/main/webapp/WEB-INF

web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面

${basedir}/target

打包输出目录

${basedir}/target/classes

编译输出目录

${basedir}/target/test-classes

测试编译输出目录

Test.java

Maven只会自动运行符合该命名规则的测试类

~/.m2/repository

Maven默认的本地仓库目录位置

POM

        POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖。

所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。

project:工程的根标签。

modelVersion:模型版本需要设置为 4.0。

groupId:这是工程组的标识。它在一个组织或者项目中通常是唯一的。

artifactId:这是工程的标识。它通常是工程的名称。

version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。

扩展

      父(Super)POM是 Maven 默认的 POM。所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 包含了一些可以被继承的默认设置。因此,当 Maven 发现需要下载 POM 中的 依赖时,它会到 Super POM 中配置的默认仓库 http://repo1.maven.org/maven2 去下载。

Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被重写。

使用以下命令来查看 Super POM 默认配置:

      mvn help:effective-pom

生命周期

      Maven 拥有三套独立的生命周期,它们分别是 clean、default 和 site。clean 生命周期的目的是清理项目;default 生命周期的目的是构建项目;site 生命周期的目的是建立项目站点。每个生命周期又包含了多个阶段。这些阶段在执行的时候是有固定顺序的。后面的阶段一定要等前面的阶段执行完成后才能被执行。

 

每套生命周期的各个阶段。

1. clean 生命周期

clean 生命周期的目的是清理项目,它包括以下三个阶段。

pre-clean:执行清理前需要完成的工作。

clean:清理上一次构建过程中生成的文件,比如编译后的 class 文件等。

post-clean:执行清理后需要完成的工作。

2. default 生命周期

default 生命周期定义了构建项目时所需要的执行步骤,它是所有生命周期中最核心部分,包含的阶段如下表所述,比较常用的阶段用粗体标记。

名称

说明

validate

验证项目结构是否正常,必要的配置文件是否存在

initialize

做构建前的初始化操作,比如初始化参数、创建必要的目录等

generate-sources

产生在编译过程中需要的源代码

process-sources

处理源代码,比如过滤值

generate-resources

产生主代码中的资源在 classpath 中的包

process-resources

将资源文件复制到 classpath 的对应包中

compile

编译项目中的源代码

process-classes

产生编译过程中生成的文件

generate-test-sources

产生编译过程中测试相关的代码

process-test-sources

处理测试代码

generate-test-resources

产生测试中资源在 classpath 中的包

process-test-resources

将测试资源复制到 classpath 中

test-compile

编译测试代码

process-test-classes

产生编译测试代码过程的文件

test

运行测试案例

prepare-package

处理打包前需要初始化的准备工作

package

将编译后的 class 和资源打包成压缩文件,比如 rar

pre-integration-test

做好集成测试前的准备工作,比如集成环境的参数设置

integration-test

集成测试

post-integration-test

完成集成测试后的收尾工作,比如清理集成环境的值

verify

检测测试后的包是否完好

install

将打包的组件以构件的形式,安装到本地依赖仓库中,以便共享给本地的其他项目

deploy

运行集成和发布环境,将测试后的最终包以构件的方式发布到远程仓库中,方便所有程序员共享

这些阶段的详细介绍内容可以参考链接:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3. site 生命周期

site 生命周期的目的是建立和发布项目站点。Maven 可以基于 pom 所描述的信息自动生成项目的站点,同时还可以根据需要生成相关的报告文档集成在站点中,方便团队交流和发布项目信息。site 生命周期包括如下阶段。

pre-site:执行生成站点前的准备工作。

site:生成站点文档。

post-site:执行生成站点后需要收尾的工作。

site-deploy:将生成的站点发布到服务器上。

配置文件

  1. 构建配置文件大体上有三种类型:

项目级(Per Project) 定义在项目的POM文件pom.xml中

用户级 (Per User) 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml)

全局(Global) 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml)

  1. 配置文件激活方式

使用命令控制台输入显式激活。

通过 maven 设置。

基于环境变量(用户或者系统变量)。

操作系统设置(比如说,Windows系列)。

文件的存在或者缺失。

插件

      Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。

      插件是在 pom.xml 中使用 plugins 元素定义的。

仓库

Maven 仓库有三种类型:

  1. 本地(local)

Maven 在根据坐标查找依赖的构件时,先是在本地仓库中查找,配置方式,maven的setting.xml中

 <localRepository>C:/java/xxxx</localRepository>

  1. 中央(central)

Maven 必须知道至少一个远程仓库才能执行 Maven 的命令。这个远程仓库是默认的,也就是不需要用户专门配置,这里把它叫作中央仓库。也就是说,中央仓库就是一个默认的远程仓库。修改maven setting.xml 文件。

 <mirrors>

    <mirror>

      <id>alimaven</id>

      <name>aliyun maven</name>

      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

</mirrors>
  1. 远程(remote)

安装好 Maven 后,如果不执行任何 Maven 命令的话,本地仓库目录是不存在的。当用户输入第 1 条 Maven 命令后,Maven 才会创建本地仓库。然后根据配置和需要从远程仓库下载对应的构件到本地仓库,以备需要的时候使用。

本地仓库只会有一个,而远程仓库可以有很多。它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

        配置方式:POM.XML 中,常用的构建产品:NEXUS,参见NEXUS构建

   <repositories>

      <repository>

         <id>companyname.lib1</id>

         <url>xxxxx</url>

      </repository>

      <repository>

         <id>companyname.lib2</id>

         <url>xxxxxx</url>

      </repository>

   </repositories>

Maven 依赖搜索顺序

步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。

步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。

步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。

步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

升级为MAVEN项目

第一步:按“IDEA下MAVEN项目的创建”创建一个新的项目;

第二步:将原来的项目代码拷贝到:src/main/java 下;

第三步:将项目的配置文件拷贝到:src/main/resource 下,

第四步:若项目存在多环境时,可在java 同目录创建 evns文件夹存放差异文件,不存在多环境可以跳过此步骤;

第五步:将项目的web文件拷贝到webapp 目录下,并删除class文件夹(若项目由需要可以保留);

第六步:构建项目依赖包

  1. 将项目依赖的jar 按对应的版本添加到pom中;
  2. 若jar为自建则可以放到公司私服,并定义好版本号,再添加到pom中;
  3. 非自建,但是版本号不清晰的,可以将jar拷贝到项目某一个文件夹下,使用
<dependency>  

    <groupId>xxx</groupId>  

    <artifactId>xxxxx</artifactId>  

    <version>xxxxx</version>  

    <scope>system</scope>  

    <systemPath>${project.basedir}/libs/xxxxx.jar</systemPath>  

</dependency>  
  1. 项目依赖的jar版本久远,无从下周, 可:
  1. 将依赖的jar 全部放到webapp/WEB-INF/lib 下;
  2. Idea下引入编译时依赖此文件
  3. 添加maven编译插件
 <!--项目编译插件-->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.5.1</version>
	<configuration>
		<source>${jdk.version}</source>
		<target>${jdk.version}</target>
		<encoding>${encoding}</encoding>
		<!--根据你把lib放的位置,但需要注意的是,mac平台上,路径分隔符用的"/",windows下用的分隔符是"\"-->
		<compilerArguments>
			<extdirs>src/main/webapp/WEB-INF/lib</extdirs>
		</compilerArguments>
	</configuration>
</plugin>

第七步:多环境的配置


<profiles>
        <profile>
            <id>GS_DEV</id>
            <properties>
                <!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
                <profiles.active>GS_DEV</profiles.active>
            </properties>
            <activation>
                <!---当前是否激活->
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                   <!--差异文件-->
                    <resource>
                        <directory>src/main/evns/GS_DEV</directory>
                    </resource>
                    <!--源文件-->
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>
</profiles>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elcker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值