Maven

Maven

1.主要内容

Maven

2.Maven简介

2.1简介

​ maven这个词可以翻译为“专家”,“内行”,作为Apache组织中的一个颇为成功的开源项目Maven主要服务于基于java平台的项目构建,依赖项目和项目信息管理

​ 无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷来发,Maven都能大显身手。

2.2项目搭建

​ 不管你是否意识到,构建(build)是每一位程序员每天都在做的工作,早上来到公司,我们做的第一件事情就是从源码库签出最新的代码,然后进行单元测试,如果测试失败,会找到相应的同事一起测试,修复错误代码,接着回到自己的工作上去,编写自己的单元测试及产品代码。

​ 仔细总结一些,我们会发现,除了编写源代码,我们每一天有相当一部分事件花在了编译,运行单元测试,生成文档,打包和部署等繁琐且不起眼的工作上,这就是搭建,如果我们现在还手工这样做,那成本太高,于是有人用软件的方法让这一系列工作完成自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所以繁琐的步骤都能够自动化完成,很快就能拿到最终结果

2.3项目构建工具

Ant构建

​ 最早的构建工具,基于IDE,大概是2000年有的,当时是最流行的java构建工具,不过它的XML脚本编写格式让XML文件特别大,对工程构建过程中的过程控制特别好

Maven【java】

​ 项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具,它填补类容Ant缺点,Maven第一次支持了从网络上下载的功能,仍然采用XML作配置文件格式。Maven专注的是依赖管理,使用java编写

Gradle

​ 属于结合以上两个的优点,他继承Ant的灵活Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的区别是不用XML作为配置文件格式,采用DSL格式,是的脚本更加简洁

​ 目前市面上Ant比较老,所以一般是一些比较传统的软件企业公司使用,Maven使用java编写,是当下大多数互联网公司会使用的一个构建工具,中文文档也比较齐全,gradle使用groovy编写,目前比较新型的构建工具一些初创互联网公司会使用,以后会有很大的使用空间

2.4Maven的四大特点

2.4.1依赖管理系统

​ Maven为java世界引入了一个新的依赖管理系统jar包管理,jar升级时修改配置文件即可。在java世界中,可以用groupld、artifactld、version组成的Coordination(坐标)唯一标识一个依赖

​ 任何基于Maven构建的项目自身也必须定义这三项属性,生产的包可以是jar包,也可以是war包或者jar包。一个典型的依赖引用如下所示:

<dependency>
	<groupId>javax.servlet</groupId> com.baidu
    <artifactId>javax.servlet-api</artifactId>  ueditor echarts
    <version>3.1.0</version>
</dependency>
坐标属性的理解

​ Maven坐标为各种组件引入了秩序,任何一个主键必须明确定义自己的坐标

groupld

定义当前maven项目隶属的实际项目-公司名称。(jar包所在仓库路径)由于Maven中模块的概念,因此一个实际项目往往会被划分为很多个模块,比如Spring是一个实际项目,其对应Maven模块会有很多,比如spring-core,spring-webmvc等

artifactld

​ 该元素定义实际项目中的一个Maven某块-项目名,推荐的做法是使用实际项目名称作为actifactld的前缀。比如:spring-bean,spring-webmvc

version

​ 该元素定义Maven项目当前所处的版本。

2.4.2多模块构建

​ 项目复查时dao service controller 层分离将一个项目分解为多个模块已经是很通用的一种方式

​ 在Maven中需要定义一个parent POM作为一组module的聚合POM。在该POM中可以使用标签来定义一组子模块,parent POM不会有什么实际构建产出。而parent POM中的build配置都会自动继承给子module。

2.4.3一致的项目结构

​ Ant时代大家创建的java项目目录比较随意,然后通过Ant配置指定那些属于source,那些属于testSource等。而Maven在设计之初的概念就是Conversion over configguration(约定大于配置)。其制定了一套项目目录结构作为标准的java项目结构,解决不同ide带来的文件目录不一致问题。

2.4.4一致的构建模型和插件机制
<plugin>
	<groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.25</version>
    <configuration>
    	<scanIntervalSenconds>10</scanIntervalSenconds>
        <contextPath>/test</contextPath>
    </configuration>
</plugin>

3.Maven的安装配置和目录

3.1 Maven的安装配置

3.1.1检查JDK的版本

​ jdk版本1.7及以上

3.1.2下载Maven

​ 下载地址 http://maven.apache.org/download.html

3.1.3配置Maven环境变量

​ · 解压后把Maven的跟目录配置到系统环境变量中Maven_HOME,将bin目录配置到path变量中

​ 注:maven解压后存放的目录不包含中文和空格

3.1.4检查Maven是否安装成功

​ 打开dos窗口,执行mvn -v

Maven

3.2认识Maven目录结构

Maven目录结构

目录 目的
${basedir} 存放pom.xml和所有子目录
${basedir}/src/main/java 项目的.java源代码
${basedir}/src/main/resources 项目的资源,比如说property文件
${basedir}src/test/java 项目的测试类,比如说JUniti代码
${basedir}src/test/resources 测试使用的资源

任务:手动创建一个Maven项目,并编译运行成功!

3.2.1目录结构

目录结构Maven

<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>
    
    <!-- 基本设置 The Basics -->
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>
    <dependencies>...</dependencies>
    <parent>...</parent>
    <dependencyManagement>...</dependencyManagement>
    <modules>...</modules>
    <properties>...</properties>
    
    <!-- 构建过程的设置 Build Settings -->
    <build>...</build>
    <reporting>...</reporting>
    
    <!-- 项目信息设置 More Project Information -->
    <name>...</name>
    <description>...</description>
    <url>...</url>
    <inceptionYear>...</inceptionYear>
    <licenses>...</licenses>
    <organization>...</organization>
    <developers>...</developers>
    <contributors>...</contributors>
    
    <!-- 环境设置 Environment Settings -->
    <issueManagement>...</issueManagement>
    <ciManagement>...</ciManagement>
    <mailingLists>...</mailingLists>
    <scm>...</scm>
    <prerequisites>...</prerequisites>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <distributionManagement>...</distributionManagement>
    <profiles>...</profiles>
</project>
3.2.2cmd编译主函数

Maven

3.2.3cmd下编译并运行

​ cmd下面,进入项目的根目录

​ 1.编译java文件

​ mvn compole

​ 2.执行main方法

​ mvn exec:java-Dexec.mainClass="com.xxx.demo.Hello"

Maven

4、Maven命令

​ 作为开利器的maven,为我们提供了非常丰富的命令。了解maven的命令行操作并熟练运用常见的maven命令还是十分必要的,即使譬如IDEA等工具给我们提供了图形化界面工具,但是其底层还是依靠maven命令来驱动的。

maven命令格式如下

mvn [plugin-name]:[goal-name]

命令代表的含义;执行plugin-name插件的goal-name目标

4.1常见命令

命令 描述
mvn-version 显示版本信息
mvn-clean 清楚项目产生的临时文件,一般时模块下的targer目录
mvn compile 编译源代码,一般编译模块下的src/main/java目录
mvn package 项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test 测试命令,或执行src/test/java下junit的测试用例
mvn install 将打包jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy 将打包的文件发布到远程参考。提供其他人员进行下载依赖
mvn site 生产项目相关信息的网站
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat7:run 在tomcat容器中运行web应用
mvn jetty:run 调用jetty插件的run目标在jetty Servlet容器中启动web应用

注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录,否则,必以通过参数来指定项目的目录

4.2命令参数

​ 上面列举的只是比较通用的命令,其实很多命令都可以携带参数以执行更精准的任务

4.2.1 -D传入属性参数

​ 例如:

​ mvn package -Dmaven.test.skip=true

​ 以-D开头,将mavven.test.skip的值设为true,就是告诉maven打包的时候跳过单元测试,同理,mvn deploy-Dmaven.test.skip=true代表部署项目并跳过单元测试。

4.2.2 -P使用指定的Profile配置

​ 比如项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,在pom.xml中配置如下:

<profiles>
	<profile>
    	<id>dev</id>
        <properties>
        	<env>dev</en
        </properties>
        <activation>
               <activeByDefault></activeByDefault>
        </activation>
    </profile>
   	<profile>
    	<id>qa</id>
        <properties>
        	<env>qa</env>
        </properties>
    </profile>        
    <profile>
        <id>pre</id>
        <properties>
        	<env>pre</env>
        </properties>
    </profile>
    <profile>
    	<id>prod</id>
        <properties>
        	<env>prod</env>
        </properties>
    </profile>
.......
<build>
	<filteers>
    	<filter>config/${env}.properties</filter>
    </filteers>
    <resources>
    	<resource>
        	<directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    .......
</build>
</profiles>

​ profiles 定义了各个环境的变量id,filters中定义了变量配置文件的地址,其中地址中的环境变量

就是上面profile中定义的值,resources中的定义那些目录下的文件被配置文件中的定义的变量替换。

​ 通过maven可以实现按不同环境进行打包部署,例如:

​ mvn package -Pdev -Dmaven.test.skip=true

​ 表示打包本地环境,并跳过单元测试

5 IDEA编辑器集成Maven环境

选择File-->Other Setting -->Settings for New Project...-->搜索Maven

Maven

6、Maven项目的创建

6.1 创建java项目

6.1.1新建项目
上一篇:mvn测试执行用例的常用的命令


下一篇:mvn测试执行用例的常用的命令