POM

POM是Maven项目的核心。
POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建声明项目依赖,等等。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>testMaven</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. </project>

XML头**:**第一行,指定了XML文件的版本和编码方式。

project元素**是所有pom.xml的根元素,声明了POM相关的命名空间和xsd元素**(非必需)。这些属性能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。

modelVersion元素:指定了当前POM模型的版本。对于Maven2和Maven3,它只能是4.0.0。

groupId,artifactId,version:是这段代码中最重要的,定义了项目的基本坐标。在Maven的世界里,任何的jar,pom或者war都是基于这些基本坐标进行区分的。类似于经度纬度定位一个地点。

  • groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。
  • artifactId定义了当前Maven项目在组中唯一的ID
  • version指定了Hello World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。

目录结构

遵循Maven约定把代码放到指定目录,无需额外的配置,Maven会自动搜寻到代码。

主代码:放于src/main/java。依照上面pom文件定义的groupId和artifactId,主代码的包名应该是org.example.testMaven。所以项目中的文件最好是置于**src/main/java/org/example/testMaven**文件夹中。
测试代码:放于src/test/java。

IDEA依赖

官方查找
https://mvnrepository.com

**查找依赖
在pom.xml文件内,鼠标右击,选择Generate,选择Dependency,在search for artifact输入你要查找的依赖,比如,junit,spring。选中后pom.xml文件内就会出现这个dependency的坐标。

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.12</version>
  6. <scope>test</scope> <!--可写可不写-->
  7. </dependency>
  8. </dependencies>

scope元素:依赖范围。若依赖范围为test,表示该依赖只对test有效。在main中import JUnit会报错。不声明依赖范围,表示该依赖对main和test都有效。

Sync依赖
刚刚我们已经把依赖写到POM文件里,接下来需要把依赖下载下来。
image.png
依赖范围
image.png

Maven命令

执行maven命令必须进入到pom.xml的目录中进行执行。

  • 清理clean:清理输出目录target/。将以前编译得到的旧文件class字节码文件删除
  • 编译compile:将java源程序编译成class字节码文件,一般是放到target/。
  • 测试test:自动测试,自动调用junit程序
  • 报告report:测试程序执行的结果
  • 打包package:动态Web工程打War包,java工程打jar包
  • 安装install:Maven特定的概念——-将打包得到的文件复制到“仓库”中的指定位置
  • 部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

    插件

    Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。
    例如编译源代码是由maven- compiler-plugin完成的。
    进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标。例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

Nexus

Nexus 是一个强大的 Maven 仓库管理工具,使用 Nexus 可以方便的管理内部仓库同时简化外部仓库的访问。