Maven入门

什么是Maven

Maven是一个跨平台的项目管理工具,主要用于基于Java平台的项目构建,依赖管理。

https://island-hexo.oss-cn-beijing.aliyuncs.com/maven%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png

maven之前的项目管理一般为 ant

Maven的作用

Maven的出现时为了解决项目的一些问题:

  1. 如果有好几个项目,这好几个项目中,需要用到很多相同的jar包, 能不能只建立一个仓库来解决这个问题?
  2. 测试方法能不能全部运行呢?
  3. 怎么样把一个模块的功能放入到仓库中

Maven的安装和配置

jdk要求1.7+

Maven官网上下载最新版本的Maven

将下载好的Mavenbin追加到环境变量path中。

在cmd中运行mvn -v,当出现下面的提示证明配置正确

https://island-hexo.oss-cn-beijing.aliyuncs.com/mvn-v.png

注意:要用管理员权限运行cmd,否则会报错

Maven的很大作用就是导入jar包,所以我们建立一个仓库来放置项目所用的jar包,在需要的时候进行管理。

Maven的仓库默认路径是C:\Users\UserName\.m2 ,注:UserName为个人电脑名称

Maven的约定

路径作用
src/main/java存放项目的java文件
src/main/resources存放项目的资源文件,如spring,hibernate的配置文件
src/test/java存放所有的测试的java文件
src/test/resources存放测试用的资源文件
target项目输出位置
pom.xml文件

必须按照这个约定放置

Maven项目

知道了Maven的约定,那么我们就可以根据约定来进行创建第一个项目。 https://island-hexo.oss-cn-beijing.aliyuncs.com/%E7%9B%AE%E5%BD%95.png HelloWorld.java文件

1
2
3
4
5
6
7
package com.young.maven.model;

public class HelloWorld{
  public String sayHello(){
    return "HelloWorld";
  }
}

HelloWorldTest.java文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.young.maven.model;
import org.junit.*;
import org.junit.Assert.*;


public class HelloWorldTest{
  @Test
  public void testHello(){
    Assert.assertEquals("HelloWorld",new HelloWorld().sayHello());
  }
}

pom.xml文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.young.maven</groupId>
    <artifactId>maven-model</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
  </dependency>
</dependencies>
</project>

在根目录下执行命令mvn compile https://island-hexo.oss-cn-beijing.aliyuncs.com/comile.png 这样就会编译成功。

Maven构建命令

命令作用
mvn -v查看maven版本
compile编译
test测试
package打包
clean删除target
install安装jar到本地仓库

Maven坐标

1
2
3
<groupId></groupId>
<artifactId></artifactId>
<version></version>

在Mevan中这三个就是基础坐标也是唯一的表示,可以快速定位到任何一个包

仓库

  • 本地仓库
  • 远程仓库
  • 镜像仓库

如果Maven在本地仓库找不到构建,那么就会去Maven的中央仓库去寻找,如果Maven的中央仓库没有,就会报错。因为Maven的远程仓库在国外,常常无法访问或者很慢,这是我们就要使用一些镜像仓库,来帮助我们。 在"~\apache-maven-3.3.9\conf\settings.xml"文件中,找到mirrors,我们可以修改这里进行镜像设置。

Maven中央仓库

中央仓库地址: http://repo.maven.apache.org/

pom.xml

  • project是包含了pom的约束信息
  • modelVersion指定了当前pom的版本
  • groupId当前maven输入那个项目,包名+项目名
  • artifactId项目名+模块名 version版本号,第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号。snapshot快照,alpha内部测试版本,beta公测版本,Relese稳定版本,GA正式发布版本。
  • packaging打包方式,默认为jar包,可以为war,zip
  • name 项目描述
  • url项目地址,项目描述
  • developers 开发人员信息
  • licenses 许可信息
  • organization组织信息
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<dependencies>
    <dependency>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
        <type></type>
        <scope>依赖范围</scope>
        <!--设置依赖是否可选-->
        <optional></optional>
        <!--排除依赖传递列表-->
        <exclusions>
            <exclusion>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
  
  </dependencies>
</dependencyManagement>
<build>
  <plugins>
    <groupId></groupId>
    <artifactId></artifactId>
  </plugins>
</build>
<parent></parent>
<modules></modules>

Maven依赖

scope 控制依赖和三种classpath的关系。

三种classpath

  1. 编译
  2. 测试
  3. 运行

scope一共有6个值分别为compile,provided,runtime,test,system,import

名称范围
compile默认的范围,编译测试运行都要效。
provided在编译和测试有效,运行时无效。
runtime在测试和运行时有效
test仅仅在测试有效
system在本系统有效,移植性非常差
improt导入范围,它只是用在dependencyManagement中,表示从其他pom.xml继承的依赖。

例如MavenB项目依赖MavenA,而MavenC依赖于MavenB,这样的活那么MavenC就会依赖于MavenA

A和B依赖不同版本但是相同的构建,就会出现冲突。

处理原则:

  • 断路优先 A->B -> C ->X(jar) A->D->X(jar) 会优先解析路径短的。
  • 先声明先优先 如果两条路径一样,那么先声明的会先依赖。

Maven创建JavaWeb

  • Maven
  • IDEA

创建Maven项目,选择webapp https://island-hexo.oss-cn-beijing.aliyuncs.com/ideawebapp.png 填写好 GroupIdArtifacetId之后next。 https://island-hexo.oss-cn-beijing.aliyuncs.com/id%E5%A1%AB%E5%86%99.png 这样我们就完成了一次创建。 https://island-hexo.oss-cn-beijing.aliyuncs.com/%E5%AE%8C%E6%88%90.png 因为只为我们创建了resource目录,按照Maven的约定,我们需要创建其他目录。

相关内容