maven是一个成熟和流行的java项目构建工具,现在将通过学习慕课网maven教程所记载的笔记,以及查阅官网了解的maven相关知识做一个笔记记录之。

Maven目录结构

  • maven的目录结构如下
src
        - main
            -java
                -package
       - test
           - java
               - package
       - resources
pom.xml

配置文件

  • maven基于约定,减少了配置,比如约定的配置结构。
  • 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">
<modelVersion>4.0.0</modelVersion>
<!-- 组织-->
<groupId>com.imooc.maven01</groupId>
<!-- 项目名词 -->
<artifactId>maven01-model</artifactId>
<!-- 版本 -->
<version>0.0.1SNAPSHOT</version>
<!--打包类型-->
<packaging>jar</packaging>
<!-- 依赖 -->
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
</dependencies>
</project>

构建命令

maven的基本命令是mvn,通过使用不同的参数来实现不同的效果。

mvn [options] [<goal(s)>] [<phase(s)>]

查看系统版本

mvn -v

编译项目

mvn compile

测试项目

mvn test

打包项目

mvn package

删除target目录

mvn clean

安装jar包到本地仓库,安装的目录:组织ID/项目ID/版本

mvn install

跳过测试

mvn package -Dmaven.test.skip=true

archetype创建项目骨架

我么可以使用maven的archetype插件来自动地创建项目的骨架。
交互式的创建

mvn archetype:generate

批处理模式

mvn archetype:generate -B -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.1  -DgroupId=com.company -DartifactId=project -Dversion=1.0-SNAPSHOT -Dpackage=com.company.project

坐标和仓库

maven的构建是基于坐标的,groupId为组织的名字,如com.company,artifactedId为项目名字加模块名,如oops-model1version为版本。

<groupId>com.maven01</groupId>
<artifactId>model</artifactId>
<version>1.0-SNAPSHOT</version>

仓库:存储maven项目依赖包的地方,首先会在本地仓库中去查找,如果没有找到,就去中央仓库中去查找,如果再没有找到就报错。

maven的生命周期

Maven有以下三种标准的生命周期:

  • clean 清理项目
  • default 构建项目
  • site 生成项目文档站点

maven的生命周期相互独立,每个生命周期中包含一些阶段,各个生命周期中的阶段是有顺序的,后面的阶段依赖于前面的阶段,但是不同的生命周期的阶段是不会相互影响的。maven核心只提供基本的功能,他执行的如mvn clean,mvn package等命令都是通过调用maven插件来实现的,他们分别对应生命周期的不同阶段,这些阶段绑定了相应插件的goal(目标:插件具体实现的功能)。maven有许多内建的插件,并且已默认绑定到了生命周期的各个阶段。

Phase

plugin:goal

generate-resources

plugin:descriptor

process-resources

resources:resources

compile

compiler:compile

process-test-resources

resources:testResources

test-compile

compiler:testCompile

test

surefire:test

package

jar:jar and plugin:addPluginArtifactMetadata

install

install:install

deploy

deploy:deploy

可以通过在pom.xml将插件的目标绑定到生命周期的具体阶段中去,如果没有指定那么他将会被绑定到默认的阶段(具体是什么阶段需要看插件的文档说明),如果指定了阶段,那么他会覆盖默认的阶段,并且插件的目标可以被绑定到多个阶段上去。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <id>compile-package-source</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
                <execution>
                    <phase>compile</phase>
                    <id>package-source</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

参考

  • Generate project in batch mode
  • http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
  • http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
  • http://maven.apache.org/ref/3.6.2/maven-model/maven.html
  • 项目管理利器——maven