Maven基础

Maven基础

1.Maven的配置文件setting.xml

Maven的配置文件setting.xml中的几个常用默认参数

默认本地仓库路径:

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<localRepository>c:\.m2\repository</localRepository>


默认groupId:

<pluginGroups>
    <!-- pluginGroup
     | Specifies a further group identifier to use for plugin lookup.
    <pluginGroup>com.your.plugins</pluginGroup>

<pluginGroup>org.jenkins-ci.tools</pluginGroup>
-->
<pluginGroup>org.apache.maven.plugins</pluginGroup>
</pluginGroups>
Maven默认以org.apache.maven.plugins作为groupId。也可以修改,为自己指定一个默认的groupId,例如com.yourcompanyname.plugins。

2.pom(Project Object Model)

Maven项目的所有配置都存放在.pom配置文件中,包括如下定义:项目类型、名字、依赖关系和定制插件的行为等。

<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.xyz.helloworld</groupId>
    <artifactId>helloworld</artifactId>
    <description>helloworld test prj</description>
    <name>helloworld</name>


    <properties>
        ......
    </properties>


    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        ......
    </dependencies>
    ......
</project>
        

new project的时候指定的三个属性:GroupId、ArtifactId、Version

GroupId:com.xyz.helloworld
ArtifactId:helloworld
Version:0.0.9-SNAPSHOT

工程创建以后,会自动生成.pom配置文件,自动生成的.pom配置文件包含groupId, artifactId, version等信息:

    <groupId>com.xyz.helloworld</groupId>
    <artifactId>helloworld</artifactId>
    <version>0.0.9-SNAPSHOT</version>

pom中的groupId, artifactId, version叫作maven坐标,maven坐标能唯一确定一个项目的标识。

maven坐标的元素包括:groupId, artifactId, version,package,classifier。

groupId:项目组织唯一的标识符,定义了项目属于哪个组。实际对应Java的包的结构,是main目录里java的目录结构。一般用:com.company.myapp,例如:com.xyz.helloworld

artifactId:项目的唯一的标识符,定义了当前项目在项目组织中的唯一的ID。实际对应项目的名称,就是项目根目录的名称。例如:helloworld-web;helloworld-srv

version:指定项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。在引用依赖的时候,可以通过指定version来确定具体依赖的版本号

上面这三个参数指出了一个项目的特定版本,让Maven知道我们正在处理的是谁,以及什么时候在我们想要的软件生命周期中。

packaging:可选。规定项目的输出格式,包括 pom, jar, maven-plugin, ejb, war, ear, rar, par,根据实际需要确定。当不定义packaging时,maven会使用默认值jar。

classifier:元素用来帮助定义构件输出的一些附属构件,一般用不到。

有了maven坐标,我们就可以用它来指定一个项目所依赖的其他项目、插件、父项目。

pom中的其他常用属性:

name:可选。指定一个项目名称,非必须的,但是为了方便交流,推荐为每个pom声明name。

description:项目的描述。

现实场景中,往往一个大的项目会分成几个子项目。这种情况下,每个子项目就都会有各自的pom文件,然后多个子项目会有一个共同的父项目。这样只要构建父项目就能够构建所有的子项目了。子项目的pom会继承父项目的pom。

pom中引入插件时要注意,很多插件是super pom中并没有配置的,如果用户使用某个插件时没有设定版本,那么则会一定规则去仓库中查找可用的版本,然后做出选择。

在Maven2中,插件的版本会被解析至latest。latest表示的就是最新版本,而这个版本很有可能是快照版本,如果快照版本发生变化,程序执行可能会出错。

在Maven3中调整了解析机制,当插件没有声明版本的时候,不再解析至latest,而是使用最新的release版本。如果发布了新的release,则同样可能导致问题。存在隐患。

因此引用插件时推荐指定版本。

3.super pom

所有的项目pom都继承了一个super pom。在maven-model-builder-{version}.jar包中存在这样一个文件:org/apache/maven/model/pom-4.0.0.xml,所有的pom文件都继承该pom文件。

我的文件路径:C:\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar,打开这个jar包:org/apache/maven/model/pom-4.0.0.xml

文件内容如下:


<?xml version="1.0" encoding="UTF-8"?>
...
<!-- START SNIPPET: superpom -->
<project>
  <modelVersion>4.0.0</modelVersion>


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

super pom设置了一些默认值,比如在第一篇文章中提到的默认的目录结构,默认的插件等等,它遵循了惯例优于配置的原则。所以尽管我们的这个pom配置很简单,但是这只是我们看见的一部分。真正运行时候的pom要复杂很多。

通过下面的命令,我们可以看到真正运行的时候的pom的全部内容:

mvn help:effective-pom

4.Maven依赖

pom文件中进行Maven项目的依赖管理:

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


5.Maven库

当第一次运行maven命令的时候,需要联网,因为它要从maven默认的远程仓库网上下载一些文件。远程库提供了maven的核心插件和可供下载的插件jar包。

下载保存到本地仓库,默认本地仓库路径为~/.m2/repository(Windows默认为用户目录下的.m2,例如C:\Users\Administrator\.m2)。

Maven查找jar时先从本地仓库查找,本地没有,才会去远程仓库下载。

项目jar包安装到本地仓库:

mvn install

一个项目mvn install安装到本地库以后,其他项目就可以通过maven坐标和这个项目建立依赖关系。

例如:helloworld通过mvn install安装以后,新建其他项目需要用到helloworld,就可以如下所示来建立依赖关系:、

    <dependency>
      <groupId>com.xyz.helloworld</groupId>
      <artifactId>helloworld</artifactId>
      <version>0.0.9-SNAPSHOT</version>
    </dependency> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunny05296

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值