maven的相关概念

maven坐标

maven拥有大量组件。定位一个组件的时候,需要一系列的元素来准确的找到该组件。此时,maven坐标应运而生。

Maven坐标主要组成:

  • groupId定义当前Maven项目隶属的实际项目。

  • artifactId定义MavenMaven项目的项目名称

  • version定义Maven项目的版本

  • packaging定义Maven项目打包的方式(非必须)

  • classifier辅助助定义组件输出的一些附件(非必须)

在通过原型创建的Java web项目中我们看到的dependencies节点:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

dependency节点通过groupId,artifactId,version准确引用了项目所需要的junit包

仓库

仓库用来统一存储所有Maven共享组件

maven仓库分为本地仓库远程仓库两类:

本地仓库

每个用户只有一个本地仓库,默认是在~/.m2/repository/(~为用户目录),此目录可以配置:

修改方法:

修改%MAVEN_HOME%/conf/setting.xml, 将文件中的

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->

修改为:

<localRepository>文件存储路径</localRepository>

远程仓库

当建立一个maven项目后,运行mvn clean package时,我们看看到了许多的Downloading:

[INFO] Generating project in Batch mode
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-j2ee-simple/1.0/maven-archetype-j2ee-simple-1.0.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-j2ee-simple/1.0/maven-archetype-j2ee-simple-1.0.jar (9 KB at 4.3 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-j2ee-simple/1.0/maven-archetype-j2ee-simple-1.0.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-j2ee-simple/1.0/maven-archetype-j2ee-simple-1.0.pom (549 B at 1.2 KB/sec)
[INFO] ----------------------------------------------------------------------------

这是maven在从中央仓库下载项目所需要的jar包。

maven默认的中央仓库的定义是在${M2_HOME}/lib/maven-2.0.10-uber.jar中。此包中包含一个路径为\org\apache\maven\project\pom-4.0.0.xml的文件文件,在这个文件里面定义了默认中央仓库的地址:

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <layout>default</layout>
        <url>http://repo1.maven.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

默认仓库组件搜索:组件搜索

maven插件

maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。

每个插件都能实现多个功能,每个功能就是一个插件目标

maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标。