读者指南
目的:为了更好地理解Maven插件
参考文档:菜鸟教程 https://www.runoob.com/maven/maven-tutorial.html
Maven是什么?
apache项目,纯java开发,基于POM(Project object model),管理项目的构建、报告、文档。
Maven的原则
1、约定优于配置,Maven约定的项目目录结构如下图
2、父POM为子POM提供默认值,查看默认配置的方法 mvn help:effective-pom
![](https://img2020.cnblogs.com/blog/1117609/202005/1117609-20200507204941479-1175389856.png)
POM描述
POM使用xml文件描述,文件名pom.xml,其内容包括以下几个方面(按个人理解的划分,非标准官方说法)
POM版本号(POM模型的版本,不同于POM描述的具体内容。类似于 类和对象的关系),
项目ID(项目的唯一标志),
父POM信息(每一个POM都有一个父POM,即便没有显式声明),
依赖信息(所依赖的项目的标志信息),
依赖仓库(查找依赖的仓库地址),
插件信息(构建用到的插件),
插件仓库(查找插件的仓库地址),
构建信息(源代码和资源的路径、目标文件名称和路径),
POM配置信息(变量)。
各部分所使用的标签如下:
* POM版本号:
<modelVersion>4.0.0</modelVersion>
* 项目ID:
<groupId>cn.kyh</groupId>
<artifactId>helloplugin</artifactId>
<version>1.0-SNAPSHOT</version>
* 父POM信息:
```
<parent>
<artifactId />
<groupId />
<version />
<!-- 父项目的pom.xml文件的相对路径,默认值是../pom.xml。Maven首先在relativePath,然后在本地仓库,最后在远程仓库寻找父项目的pom。 -->
<relativePath />
</parent>
```
* 依赖信息
```
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
```
* 依赖仓库
```
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
```
* 插件信息
```
<build>
<plugins>
<plugin>
<groupId>cn.kyh</groupId>
<artifactId>helloplugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
</plugins>
</build>
```
* 插件仓库
```
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
```
* 构建结果信息
```
<build>
<sourceDirectory>C:MVNprojectsrcmainjava</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:MVNprojectsrc estjava</testSourceDirectory>
<outputDirectory>C:MVNproject argetclasses</outputDirectory>
<testOutputDirectory>C:MVNproject arget est-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:MVNprojectsrcmain
esources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:MVNprojectsrc est
esources</directory>
</testResource>
</testResources>
<directory>C:MVNproject arget</directory>
<finalName>project-1.0</finalName>
</build>
```
* POM配置信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<profiles> <profile> <id>test</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>Using env.test.properties</echo> <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
常用Maven命令:
mvn clean 清理生成的文件
mvn compile 编译源代码
mvn package 打包
mvn install 把项目安装到本地仓库