0%

maven简介

maven简介

maven是一个项目管理工具,基于项目对象模型(POM Project Object Model)来管理项目的构建、报告和文档信息

使用maven构建项目

使用maven命令构建一个maven项目

1
mvn archetype:generate -DgroupId=com.zhanghe -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0-SNAPSHOT

DarchetypeArtifactId: 表示项目骨架,常用的有两种

  • maven-archetype-quickstart 普通的java项目
  • maven-archetype-webapp java web项目

项目目录结构

默认结构
  • 项目源码:src\main\java

  • 资源目录: src\main\resources

  • Web 项目源码:src\main\webapp

  • 测试源码:src\test\java

  • Maven 项目结构(Project Object Model POM):pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    目录结构
    src 源码 主程序
    main
    - java 源文件
    - resources 框架配置文件
    test
    - java
    - resources
    pom.xml
自定义结构

其实任何一个Maven项目都隐式的继承了一个超级POM,而这个pom位于$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml,很多默认的配置都是在这个pom.xml中定义的,如果想要自定义,需要的是覆盖该pom中的某些配置

如可以在<build>节点中<sourceDirectory>指定源码目录 <resources> 指定资源目录

pom文件

pom是maven构建工程的重要配置,其内包含有

  • dependencies 依赖
  • plugins 插件
  • goals
  • build
  • project version
  • developers
  • mailing list

所有的pom都继承自一个父POM,其中包含了一些可以被继承的默认设置

1
2
# 查看父pom的默认配置
mvn help:effctive-pom

依赖坐标

坐标
groupid: 公司域名倒叙+项目名
artifactid: 模块名
version: 版本
packaging: 打包方式
classifer: 定义输出的一些附件

在仓库中的工程标识就是按照groupid:artifactid:version来进行标识的

设置属性

1
2
3
4
5
6
7
<properties>
<!-- 指定编码格式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 指定jdk版本 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

maven仓库

maven仓库是指存放maven依赖jar包的位置

  • 本地仓库:存储在本地电脑的,在使用maven时,会先从本地仓库获取,如果本地仓库没有,才会去远程仓库下载并保存在本地,可以在settings.xml中配置本地仓库的位置<localRepository>本地仓库位置</localRepository>

  • 远程仓库:

    如果在中央仓库找不到依赖,会停止构建过程并输出错误信息,为了避免这种情况,可以使用远程仓库,由开发人员自己定制仓库

    • 私服:局域网内由公司内部搭建,定制的仓库

    • 其他远程仓库:其他公司的定制的仓库

      可以在pom.xml中进行配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <repository>
      <id>archiva.internal</id>
      <name>Internal Release Repository</name>
      <url>http://zhhll.com/nexus/content/repositories/releases/
      </url>
      </repository>
      <snapshotRepository>
      <id>archiva.snapshots</id>
      <name>Internal Snapshot Repository</name>
      <url>http://zhhll.com/nexus/content/repositories/snapshots/
      </url>
      </snapshotRepository>
  • 中央仓库:由maven官方提供的仓库,不过由于maven的中央仓库在国外,网速很慢,可以使用仓库的镜像

    在settings.xml中配置

    1
    2
    3
    4
    5
    6
    7
    8
    <mirrors>
    <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
    </mirror>
    </mirrors>

mirrorOf配置为central是因为maven内置的pom文件中设置了一个id为central的repository

依赖搜索顺序

本地仓库(localRepositories) > 全局的profile中的repositories仓库 >该应用下的 POM配置的repositories仓库 > mirrors全局仓库

repositories一般配的是私服仓库

欢迎关注我的其它发布渠道