maven 总结 (1)

本贴最后更新于 1684 天前,其中的信息可能已经事过境迁

1. Maven 入门指南

1.1 Maven 是什么

Maven 的正确发音是[ˈ mevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词语,代表专家、内行的意思,约等于北京话中的老炮儿。

Apache Maven,是一个软件(特别是 Java 软件)项目管理及自动构建工具,由 Apache 软件基金会所提供。基于**项目对象模型(Project Object Model 缩写:POM)**概念,Maven 利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的。

1.2 为什么要用 Maven

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期

最主要优势可以总结一下三点:

  • 生命周期管理,便捷的构建过程;
  • 依赖管理,方便引入所需依赖 Jar 包;
  • 仓库管理,提供统一管理所有 Jar 包的工具;
  • 目录结构管理,提供了一套标准的目录结构(基本上所有的 web 项目,目录结构几乎都是相同的)

当然还有其他的优点:

  • 插件式架构,大量的可重用插件;
  • 很方便集成 IDE;
  • 开源项目都使用 Maven

1.3 Maven 安装

1.首先要安装好 Java 环境,然后需要下载 Maven 的二进制包

2.然后直接解压指令:

tar zxvf apache-maven-3.5.0-bin.tar.gz

3.设置 Maven 全局变量:在.bash_prodile 或者.zshrc 中添加对应的内容

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_76.jdk/Contents/Home/   

    export M2_HOME=/Users/zhangguanghui/Public/apache-maven-3.3.9  

    export M2=$M2_HOME/bin:$PATH  

    export MAVEN_OPTS="-Xms256m -Xmx512m"

JAVA_HOME 是电脑中的 Java 路径,M2_HOME 是 Maven 的解压路径,MAVEN_OPTS 是 maven 的 jvm 配置。这个地方根据自己的位置而定,这个是 MAC 的安装配置。

  1. 高级配置
  • 每个公司或者和小组织一般都有自己的私有仓库,所以加入团队要首先配置自己的 settings.xml 文件, 当然最直接的方式是直接从同事那里进行拷贝。
  • 接下来是配置本地仓库位置,默认位置是**${user.home}/.m2/repository/**, 如果想将仓库位置改成自己想要的位置,在 settings.xml 中修改 localRepository 的属性就可以
  <settings>
          ...
          <localRepository>/path/to/local/repo/</localRepository>
          ...
    </settings>
  • **配置私有仓库和仓库的注册用户名、密码。**公司的远程私有仓库部署定义在一个项目中的 pom.xml 文件中,通过\来定义发布仓库位置,有几个仓库就在里面定义几个\标签,每个仓库都有唯一的\标签和\标签。公司的私有仓库一般需要用户名,密码去认证才能进行下载,但是这些不能保存在项目中,pom 文件是要上传到 git 服务器上,所有人都能看到,不安全,基于这个考虑可以在 setting.xml 进行添加,通过定义\标签来定义多个私有仓库认证信息,每个仓库都有一个\相对应,然后通过定义\标签与 pom 文件中的\中的\标签相同来对应,然后在里面定义\标签和\标签。如下分别是 pom.xml 中定义仓库位置,setting.xml 定义对应的私有仓库用户名和密码。
pom.xml中定义仓库
    <project>
        ....
        <distributionManagement>
            <repository>
                <id>libs-releases</id>
                <url>http://mvn.hz.netease.com/artifactory/libs-releases</url>
            </repository>
            <snapshotRepository>
                <id>libs-snapshots</id>
                <url>http://mvn.hz.netease.com/artifactory/libs-snapshots</url>
            </snapshotRepository>
        </distributionManagement>
    </project>
setting.xml定义仓库的用户名和密码
    <servers>
        <server>
            <id>libs-snapshots</id>
            <username>******</username>
            <password>******</password>
        </server>
        <server>
            <id>libs-releases</id>
            <username>******</username>
            <password>******</password>
        </server>
    </servers>

可以发现 pom 中的仓库的 id 与 setting 的 id 是相对应的。

更多配置请参见 4.Maven 之 setting.xml 文件详解。

1.4 创建第一个 Maven 工程

  • 使用 archetype 模板创建工程
mvn -B archetype:generate \

 -DarchetypeGroupId=org.apache.maven.archetypes \

 -DgroupId=com.mycompany.app \

 -DartifactId=my-app

命令执行成功后,产生一个目录文件 my-app,该目录下有一个文件 pom.xml。Maven 就是通过 pom.xml 来构建工程。

  • 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

该 pom.xml 文件内包含了最基础的信息,主要有:

标识符 含义

groupId 一般用该项目的组织或团体的域名来标识,例如:org.apache.maven.plugins

artifactId 代表唯一的工程名

version 版本号

packaging 标识打包的类型,例如有:jar, war, tar

dependencies 该工程内依赖的其他 jar 包

想了解更多信息,请参考 5. Maven 之 Pom.xml 配置文件详解

  • 坐标

每一个 Jar 包都需要定义一个唯一标识,方便管理维护,因此 Maven 使用 groupId, artifactId, versionId 三元素组成一个 Jar 的坐标。当我们依赖该 Jar 包时,同样需要指定该 Jar 包的坐标

  • 工程的目录结构
.
|____pom.xml
|____src
| |____main
| | |____java
| | | |____com
| | | | |____mycompany
| | | | | |____app
| | | | | | |____App.java
| |____test
| | |____java
| | | |____com
| | | | |____mycompany
| | | | | |____app
| | | | | | |____AppTest.java

如果你想对 Maven 工程的目录结构更多的了解,请阅读: 请参考 6. Maven 之约定大于配置

1.5 创建一个 documentation

mvn archetype:generate \

  -DarchetypeGroupId=org.apache.maven.archetypes \

  -DarchetypeArtifactId=maven-archetype-site \

  -DgroupId=com.mycompany.app \

  -DartifactId=my-app-site`

1.6 创建一个 web 应用

mvn archetype:generate \

    -DarchetypeGroupId=org.apache.maven.archetypes \

    -DarchetypeArtifactId=maven-archetype-webapp \

    -DgroupId=com.mycompany.app \

    -DartifactId=my-webapp
  • Maven

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

    186 引用 • 318 回帖 • 282 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...