A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liushuang119 初级黑马   /  2018-4-26 20:53  /  1514 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 liushuang119 于 2018-5-2 14:19 编辑

我爱学习,学习使我快乐,但是我也喜欢玩耍。。。推荐一个视频播放软件potplayer
一、maven概述
要用java实现一个后台系统,可能需要涉及很多模块。
web应用服务器、文件服务器、db 等等。 我们要开发这些模块,需要先把他们各自需要依赖的jar包或者项目下载打包好,然后配置到项目的classpath中。
这些应用在运行单元测试pr编译or部署的时候,需要依赖本地的一些配置,比如jdk、web容器等,这样我们将项目分享出去的时候,别人要使用就有一定的配置门槛。
maven可以帮我们完成上述所有的工作,不用我们再手工去完成。、
maven将项目看做一个对象。
maven建立了一个仓库体系,来管理这些项目对象。
maven的仓库分为本地仓库和远程仓库(maven提供的中央仓库)。
我们可以通过maven的命令把自己的项目a放到本地仓库中,如果其他项目b需要依赖项目a,则可以直接在本地仓库中找到。
如果我们的项目依赖一些别人的项目,比如jdbc、mybatis,maven会先根据我们的项目属性在本地仓库中去找,若找不到就去中央仓库中去找。
如下图,箭头表示依赖关系。
maven项目对象的部分基础属性
① 项目坐标
    项目坐标用来定位一个项目在仓库中的位置。当项目b依赖项目a或者jdbc时,maven会根据项目坐标属性去从仓库体系中寻找项目,并自动配置到项目依赖中。
② 打包方式。
    这个属性决定我们执行maven的package方法后,项目会被打包成什么文件。
③ 项目依赖列表。
 这个属性的值是一个数组,里边有一些其他项目的坐标。
④ 构建插件列表。
    这个属性是一个数组,定义项目需要的一些插件,比如源码打包工具、web容器
还有一些属性在后边介绍。

maven项目对象的部分方法
①mvn compile  编译项目
②mvn package 打包项目
③mvn clean 清除之前编译和打包产生的文件
④mvn install  将项目安装到本地仓库
⑤mvn test 运行测试代码
二、maven的安装
① 访问http://maven.apache.org/download.html 下载最新版本
② 解压到maven工作目录,比如d盘根目录
③ 配置maven环境变量
MAVEN_HOME : D:\apache-maven-3.0.2
  MAVEN : %MAVEN_HOME%\bin
  在path 前面 加上 %MAVEN%;
④ 打开cmd敲 mvn -version, 回车。
    如看到下面信息表示安装成功:
   
file:///C:/Users/Administrator/AppData/Local/YNote/data/qq20EFB6C1E08DABEFB609E4F6E4E16CB2/8e93ac63120441858c8fa9c93dd1e996/c00eb125f835.png

三、maven项目结构和项目创建方法
 项目结构:
一级目录src为源码目录
  二级目录main/java为项目主要代码目录
    三级目录就是项目的source目录了
  二级目录test/java为项目测试代码目录
    三级目录   测试代码source目录
一级目录 编译、打包产生的文件的存放目录
pom.xml文件——项目对象描述文件,前边讲的项目对象的属性和方法配置就在这个文件里边
  maven项目创建方法
  ① 打开cmd,切换到工作目录,运行
  
  首次运行这个命令maven会下载一大堆依赖的文件,这个不用管。
②  填写quickstart参数
  
  按回车,这样就成功的创建了一个maven项目。
  我们填写的几个参数:
  groupId是帮助项目对象在仓库中定位的
  artifactId决定了生成的项目文件夹目录的名称
  version是项目版本号
  package 是项目source文件下最顶层的包名
③ 项目创建成功
 

④ 也可以把命令一次敲完


四、maven配置文件settings.xml
  在使用maven的时候和仓库相关的一些配置用到了这个文件,所以在这里想讲一讲这个文件。位置:maven\conf\settings.xml。

  ① 修改本地仓库位置
  maven默认本地仓库的位置是  用户\.m2  目录 。这个目录在C盘下,和我们的工作区是分开的,不方便管理。另外,如果系统出现啥问题,C盘格式化了,我们的文件就找不回来了。
  <localRepository>D:/java/maven_repo</localRepository>
  修改这个属性,即可修改本地仓库的位置。
   修改了settings.xml后最好在本地仓库里边复制一份,避免maven重装后配置文件丢失

  ② 配置maven中央仓库位置
  由于祖国很墙,有时候访问中央仓库网速会特别慢或者干脆不可用,所有我们要配置一个maven中央仓库在国内的镜像服务器。
  我使用的是oschina提供的镜像服务器,项目比较全速度也挺快。
[url=][/url]
<mirrors>    <mirror>        <id>nexus-osc</id>        <mirrorOf>central</mirrorOf>        <name>Nexus osc</name>        <url>http://maven.oschina.net/content/groups/public/</url>    </mirror></mirrors>    [url=][/url]


五、maven项目对象配置文件  pom.xml 解析
  pom.xml是maven项目比较核心的一个文件,所以这部分的内容可以算是重头了。我还是按照描述一个对象的方式来描述这个文件吧。
 ①  pom.xml 对象
<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">    <!-- 指定了当前POM的版本 -->    <modelVersion>4.0.0</modelVersion></project>

  这个是pom.xml的壳子,我姑且把它叫做pom对象吧
  ② 坐标属性
  如果我们认为maven仓库是一个空间,那么坐标属性就是项目在这个空间内的 x、y、z 坐标(刚好决定坐标的标签有三个,这么比喻很合适啊:) )。
<groupId>com.sogou.hi</groupId><!-- 反写的公司网址+项目名 --><artifactId>hi</artifactId><!-- 一般是项目名+模块名  如 mcloud.db --><version>0.0.1-SNAPSHOT</version><!-- 大版本号.分支版本号.小版本号  snapshot 快照  alpha内测  beta公测  release稳定版  GA正式发布版本 -->
  任何时候要找到一个项目,只需要有这三个属性就可以了

③ 项目依赖列表属性
  概述中说过,这个属性是一个数组,那么在xml文件中的表现形式就是下面这样的:
[url=][/url]
  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>    </dependency>     <dependency>      <groupId>com.sogou.ml</groupId>      <artifactId>ml-b</artifactId>      <version>0.0.1-SNAPSHOT</version>    </dependency>  </dependencies>[url=][/url]

 这个依赖列表属性表明,该项目依赖了两个项目 junit和ml-b 。项目依赖还有一些其他的属性,真正用的时候是下面这样的:  
[url=][/url]
  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope><!-- scope 属性决定该依赖项目在什么阶段,test表示该项目只在测试代码中依赖 具体见  http://maven.apache.org/guides/i ... ml#Dependency_Scope -->    </dependency>     <dependency>      <groupId>com.sogou.ml</groupId>      <artifactId>ml-b</artifactId>      <version>0.0.1-SNAPSHOT</version>      <exclusions> <!-- 排除传递关系的依赖。 例如 ml-c 依赖 ml-b,ml-b依赖 ml-a ,那么我们会发现maven让ml-c同时依赖了a和b,通过这个属性可以排除c对a的依赖 -->          <exclusion>              <groupId>com.sogou.ml</groupId>              <artifactId>ml-a</artifactId>          </exclusion>      </exclusions>    </dependency>  </dependencies>[url=][/url]

④ 构建过程中使用插件的属性
 这个配置会让我们的项目在运行 mvn package打包的同时将源码也打包,原本target目录下只会出现 xxx.jar ,现在还会出现一个 xxx-source.jar
[url=][/url]
    <!-- 为项目构建行为提供相应支持 -->    <build>        <!-- 插件列表 -->        <plugins>            <!-- 打包源码插件 -->            <plugin>                <!-- 插件项目坐标 -->                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-source-plugin</artifactId>                <version>2.4</version>                <!-- 在什么阶段执行 -->                <executions>                    <execution>                        <phase>package</phase>                        <goals>                            <goal>jar-no-fork</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build>[url=][/url]

下面这个配置可以让项目打包完成后开始运行web容器,若是web项目就可以在浏览器中访问站点了。

[url=][/url]
<plugins>        <plugin>               <!-- <groupId>org.mortbay.jetty</groupId>               <artifactId>jetty-maven-plugin</artifactId>               <version>8.1.15.v20140411</version>-->               <groupId>org.apache.tomcat.maven</groupId>              <artifactId>tomcat7-maven-plugin</artifactId>              <version>2.2</version>               <executions>                   <!-- 打包成功后即开始运行web容器 -->                   <execution>                       <phase>package</phase>                       <goals>                           <goal>                               run                           </goal>                       </goals>                   </execution>               </executions>        </plugin>    </plugins>[url=][/url]


⑤ 项目聚合属性
  假如我们有好几个项目,需要一起编译打包,挨个打包很麻烦,这个时候我们就可以用聚合属性。
[url=][/url]
<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>  <groupId>com.sogou.ml</groupId>  <artifactId>ml-all</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>  <name>ml-all</name>  <url>http://maven.apache.org</url>  <modules>      <module>          ../ml-a      </module>      <module>          ../ml-b      </module>      <module>          ../ml-c      </module>  </modules>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties></project>[url=][/url]

  新建一个pom文件,将packaging打包方式修改为pom。
  添加modules属性,这个属性也是一个数组,里边有一些项目文件夹的路径,编译打包这个pom项目的时候,会将modules里边的项目都编译打包。
⑥ 父子项目属性
  新建一个新的maven项目,pom修改如下
[url=][/url]
<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>  <groupId>com.sogou.ml</groupId>  <artifactId>ml-parent</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>  <name>ml-parent</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <junit.version>3.8.1</junit.version>  </properties><dependencyManagement> <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>${junit.version}</version>      <scope>test</scope>    </dependency>  </dependencies></dependencyManagement> </project>[url=][/url]


  打包方式同样的修改为pom。添加<dependencyManagement>节点,这个节点下是项目依赖属性。
  在此节点下的依赖项目并不会在本项目中生效,但是可以在子项目的依赖中指定依赖,子项目配置如下:
[url=][/url]
  <parent>      <groupId>com.sogou.ml</groupId>    <artifactId>ml-parent</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>    </dependency>  </dependencies>[url=][/url]

  这样就可以让子项目依赖在父项目中配置的项目了
六、为eclipse安装maven插件
若我们使用的eclipse中米有maven插件,可以自己下载安装一个。
  下载后解压到  eclipse\dropins 目录下即可。
  打开Windows-preference 看到maven说明安装成功。
  
   现在我们创建maven项目、编译打包等操作,都可以用eclipse插件来完成了。
  

3 个回复

倒序浏览
回复 使用道具 举报
自己顶一下 upup
回复 使用道具 举报
再顶再顶 凑足3个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马