Maven学习

什么是maven

maven是基于项目对象模型,通过一小段描述信息来管理项目的构建、报告和文档的项目软件管理工具

搭建maven环境

  1. maven官网下载maven3.3
  2. 设置环境变量M2_HOME = D:\SoftWare\Maven\apache-maven-3.5.2(maven安装目录)
  3. 修改Path,增加 ;M2_HOME%\bin

maven目录结构

  1. bin,maven的命令目录
  2. boot,maven的类加载器
  3. conf,配置文件
  4. lib,maven的运行时类库

maven目录结构

注意,mvn的目录结构有着固定的模式:
- src
    - main
        -java
            - 各种自定义目录package
    - test
        - java
            - 各种自定义目录package
    - resources资源目录
- pom.xml

maven的pom设置

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <!--maven的版本,这是固定的-->
    <modelVersion>4.0.0</modelVersion>
    <!--groupId就是项目的包名-->
    <groupId>cn.seu.edu.maven01</groupId>
    <!--artifactId就是模块名-->
    <artifactId>maven01-model</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!--导入Junit依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>
</project>
注意pom文件应该与src属于同一级目录

mvn基本命令

注意,mvn命令后面不能带有“;”
1. mvn compile,表示编译项目
2. mvn test,运行test
3. mvn package,为项目生成jar
4. mvn clean,删除target文件
5. mvn install,安装本地jar到目录
6. mvn archetype:generate,自动创建符合maven要求的目录结构,也可以使用mvn archetype:generate -DgroupId=xxx(这里一般就是组织名,例如公司网址反写+项目名) -DartifactId=sss(这里一般是项目在公司的唯一标识,例如项目名-模块名) -Dversion=11111 指定版本号 -Dpackage=dddddd代码所在的包

maven的坐标与仓库

maven中任何依赖、插件、项目输出等够成为构件,构件通过坐标唯一标识;
镜像仓库,镜像仓库的修改在maven的conf目录下setting.xml中的mirros节点

    <mirror>
      <id>mirrorId</id>
      《mirror of标识为那个仓库添加镜像,这里也可以使用 * 代表所有仓库,一旦使用了镜像仓库,所有对原仓库的访问都将转为对镜像仓库的访问》
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
  </mirrors>

更改仓库的位置

默认情况下,maven的仓库在C:\Users\Administrator.m2\repostory,一般不将仓库放在C盘,若需要修改位置,修改maven的conf中的settings.xml中

<localRepository>D:/SoftWare/ThirdPart4Java/Maven350/Responsitory</localRepository>
为了方便,这里最好将settings.xml文件也复制到该仓库中

eclipse中安装maven插件与创建maven项目

  1. 修改eclipse.ini文件,添加
-vm
D:\SoftWare\javaJDK\JDK8u91\bin\javaw.exe
  1. 修改eclipse的启动jre,在windows-preference-java-installedJres中add一个VM,定位带jdk的安装目录,这里内置了一个jre
这里如果不更改,使用package命令时会出现
 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
  1. 修改maven-user settings,定位到maven的settings.xml文件即可

maven项目声明周期

一个完成的项目周期包括:清理clean、编译compile、测试test、打包package、集成测试、验证test、部署deploy

maven的三套生命周期

  1. clean,清理项目
    • pre-clean,执行清理前的工作
    • clean,清理上一次够姜生成的所有文件
    • post-clean, 执行清理后的文件
  2. default,构建项目
    • compile
    • test
    • package
    • install
  3. site,生成项目站点
    • pre-site,生成站点前需要完成的工作
    • site,生成项目的站点文档
    • post-site,生成站点后需要完成的工作
    • site-deploy,发不生成的站点到服务器

相关插件

maven的相关插件在这里http://maven.apache.org/plugins/index.html,以source插件为例,为项目生成源码包
1. 在pom文件中添加下述语句

  <build>
    <plugins>
        <plugin>
          <!--这里指定的source插件的坐标-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.4</version>
            <!--这里指定的是执行的时机,即在运行package打包生成jar的同时生成源码包-->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <!--这里是目标,每个插件都有自己的目标,source的goals见http://maven.apache.org/plugins/maven-source-plugin/-->
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>

pom解析

<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>公司网址反写+项目名</groupId>
  <!--maven的项目和实际项目并不对应,maven项目对应实际项目的一个模块,即一个实际项目会有多个maven项目-->
  <artifactId>项目名-模块名</artifactId>
  <!--0大版本号.0分支版本号.1小版本号-->
  <!--
    snapshot 快照版本
    alpha 内部测试版
    beta 公测版本
    release 稳定版本
    GA 正式发布版本
  -->
  <version>0.0.1-SNAPSHOT</version>
  <!--项目打包方式,默认jar,也可以为war/zip/pom等-->
  <packaging>jar</packaging>

  <!--项目描述名,用于生成相关文档-->
  <name>hi</name>
  <!--项目地址-->
  <url>http://maven.apache.org</url>
  <!--项目描述-->
  <description></description>
  <!--项目开发者-->
  <developers></developers>
  <!--许可证信息-->
  <license></license>
  <!--组织信息-->
  <organization></organization>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!--依赖列表-->
  <dependencies>
  <!--每个dependency都表示一个依赖项-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!--scope表示作用范围,Junit仅用于test
      http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
      -->
      <scope>test</scope>
      <!--依赖项是否可选,默认false,即必须强制引入-->
      <optional>true/false</optional>
          <!--依赖排除列表,和dependecies类似,内含多个exclusion,注意exclusions在dependency标签内-->
    <exclusions></exclusions>
    </dependency>
  </dependencies>

  <!--dependencyManagement模块和dependencices类似,不同之处在于他并不会执行
      一般在父模块中定义,用于子模块继承
  -->
  <dependencyManagement></dependencyManagement>

  <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>
  <!--用在子模块中,用于对父模块pom的继承-->
  <parent></parent>
  <!--聚合多个maven项目,将各模块合并-->
  <modules></modules>
</project>

修改maven默认jdk版本

在settings.xml的profiles节点加入一个profile
<profile>
    <id>jdk-1.7</id>
    <activation>
        <activeByDefaule>true</activeByDefaule>
        <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>
    </properties>
</profile>

maven 依赖冲突

例如A/B分别依赖两个不同版本的构建,这里就会存在冲突,maven采用如下的原则
1. 短路优先,

A -> B -> C -> X(jar);
A -> D -> X(jar);
这里,maven将采用第二个路径
  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>

  <groupId>com.hongxing</groupId>
  <artifactId>hongxing.aggreation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>hongxing.aggreation</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <modules>
    <module>../hongxing-bege</module>
    <module>../hongxing-nange</module>
    <module>../hongxing-shanji</module>
  </modules>
</project>

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>

  <groupId>com.hongxing</groupId>
  <artifactId>hongxing-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!--这里package定义为pom-->
  <packaging>pom</packaging>

  <name>hongxing-parent</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--这里定义Junit的版本-->
    <junit.version>3.8.1</junit.version>
  </properties>

  <dependencyManagement>
    <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!--因为在property中定义了该属性,这里就可以向SpEL那样引用-->
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  </dependencyManagement>
</project>

maven搭建web项目

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cm.seu.edu.web</groupId>
  <artifactId>web-demo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>web-demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>

  </dependencies>
  <build>
    <finalName>web-demo</finalName>
    <plugins>
        <plugin>
        <!-- 
            这里是使用jetty作为web容器 
           <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>8.1.16.v20140903</version>
         -->
         <!--这里使用的是tomcat-->
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
            <!-- 打包后运行jetty插件 -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

  </build>
</project>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值