MAVEN使用笔记

132 阅读3分钟

一.maven主要属性

内置属性

1. ${basedir} //项目的根目录(包含pom.xml文件的目录)
2. ${version} //项目版本

POM属性

用户可以使用该属性引用POM文件中对应元素的值,常用的POM属性包括:

${project.build.sourceDirectory}:项目的主源码目录,默认为 src/main/java

${project.build.testSourceDirectory}:项目的测试源码目录,默认为 src/test/java

${project.build.directory}:项目构件输出目录,默认为 target/

${project.outputDirectory}:项目主代码编译输出目录,默认为 target/classes/

${project.testOutputDirectory}:项目测试代码编译输出目录,默认为 target/test-classes/

${project.groupId}:项目的 groupId

${project.artifactId}:项目的 artifactId

${project.version}:项目的 version,与${version}等价

${project.build.fianlName}:项目打包输出文件的名称。默认为${project.artifactId}-${project.version}

二.maven文件结构

  • bin:包含了maven的运行脚本文件。
  • boot:maven的依赖的类加载器。
  • conf:非常重要,maven的全局配置文件(settings.xml),定制maven的运行行为。
  • lib:maven依赖的jar包(重点:maven-model-builder-3.2.5.jar
  • .m2文件夹:运行一个maven命令(如:mvn help:system),会发现在用户个人文件夹下,生成一个.m2文件夹里面有一个repository文件夹,里面是刚下载的jar文件。

最佳实践:

  1. 将maven的conf/settings.xml拷贝到.m2中,作为个人maven配置文件;
  2. 重新定位repository目录地址:中配置

三.POM文件简介

  1. modelVersion:指定maven模型版本,必须是4.0.0,不需要修改
  2. groupId:组id,一般只公司名称,并且对应项目包名称(如com.csj.maven,groupid一般到项目)
  3. artifactId:定义当前maven项目在组中的唯一id(一般指向当前子项目/模块名称)
  4. version:定义当前maven项目的版本号
  5. name:项目更直白的名称,可以不用写

四.坐标

maven中坐标就是用来规范maven唯一标志一个构建的方法 maven坐标构成包括:

  1. groupId:项目id
  2. artifactId:项目中maven项目/模块名称
  3. version:项目版本
  4. packing:打包方式,比如jar、war、pom等
  5. classifier:附属构件,如source,javadoc等,但是注意,一般不会直接定义classifier,附加构件不是直接定义的,是插件帮助构件的;

生成的文件名是根据坐标生成的,规则:artifactId-version[-classifier].packing

在仓库中的位置也是根据坐标生成的;

五.依赖

一个完成的依赖配置包括

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <type></type>
      <scope>test</scope>
      <optional></optional>
      <exclusions>
      	<exclusion></exclusion>
      </exclusions>
</dependency>
  • groupId:该依赖项目的groupId;
  • artifactId:该依赖项目的artifactId;
  • version:该依赖项目的版本;(也是通过这三个坐标找到jar包位置)
  • type:依赖项目的类型,对应坐标中的packing,即文件类型,一般不填,默认为jar;
  • scope:该依赖项目的依赖范围;
  • optional:标记依赖是否可选;
  • exclusion:设置排除依赖传递性;

六、仓库

仓库是用于统一管理和存放依赖包的地方; 仓库中依赖包存放的方式和坐标的对应关系是: groupId/artifactId/version/artifactId-version.packing 仓库分类:本地仓库和远程仓库;组件仓库和插件仓库。

超级POM中:

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
  • id:仓库的id,只有中央仓库id为central,仓库的id必须唯一,如果其他仓库id覆盖central,则相当于覆盖了中央仓库;

  • url:仓库的URL地址;

  • layout:仓库的布局,MAVEN2以上都用default;

  • snapshots:代表不从中央仓库中下载快照版本;

可以在POM中配置其他的公共仓库;

仓库的镜像:如果一个仓库完全和中央仓库同步,我们就可以选择本地的这种仓库作为中央仓库的镜像仓库;

在settings.xml中配置:

<mirror>
      <id>maven.cn</id>
      <mirrorOf>central</mirrorOf>
      <name>cn</name>
      <url>http://maven.net.cn/content/groups/public/</url>
</mirror>

<mirrorOf>:

*:匹配所有的仓库(比如配置私服)

external:*:所有远程仓库(localhost,file除外);

rep1,rep2:仓库1和仓库2;

*,!rep1:除了仓库1其他所有的;

七、生命周期