目录
maven
maven是基于Java的自动化构建工具。
how to install
On Win
- Download
- UnZip
- Move
- Update setting in /apache-maven/conf/setting.xml
- Add path
- Change preferences
On Mac
-
Download
-
UnZip
3. Move
-
Update setting in /Aplications/apache-maven/conf/setting.xml
-
Add path
ls -a
open -e .bash_profile
6. Change preferences
maven project directory display
- project
- src
- main
- java
- resource
- [webapp]
- [WEB-INF]
- [web.xml]
- [index.jsp]
- test
- java
- resource
- pom.xml
maven command
mvn compile
mvn test
mvn package
mvn install
mvn deploy
maven concept
GAV包唯一定位
Maven下的所有工程在中央仓库中,要想准确找到一个开源项目,则需要使用三个坐标,即GAV,中文翻译为组织名、项目名、版本号。
GAV写法
<groupId>me.dongqinglin</groupId>
<artifactId>helloMaven</artifactId>
<version>1.0</version>
作用域
scope通常翻译成作用域,当然也有一些艰深的翻译方法。
作用域主要有三个,compile, test and provide。作用域默认为compile。
作用域 | compile | test | provide |
---|---|---|---|
源码区 | ✅ | ✅ | |
测试区 | ✅ | ✅ | ✅ |
打包时 | ✅ |
其中,涉及不同项目的传递继承,则当且仅当引用项目的引入库为compile时,才能成立。
其中provide作用域只有在网络服务器环境提供的情况下才适用,不需要打包进项目。
排除
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
项目工作流
maven管理项目是以工作流的形式进行的。有部分也将之称为生命周期,但笔者认为生命周期应该专指项目生命周期,在下面论述。
工作流意味每个mvn命令时严格遵循运行条件的。举个例子,在下面的mvn命令中,运行 package
命令就会自动运行先前的compile
和test
命令,如果前面的两个命令通不过,则package
命令也无法通过。
需要注意的是,如果项目第一次运行这个命令,则需要安装mvn运行必要环境,可能时间后稍慢。
mvn compile
mvn test
mvn package
mvn install
mvn deploy
项目生命周期
maven定义了一系列项目的生命周期,主要有验证、初始化、源代码、编译、打包、安装和部署。
主要可以分为四个阶段。
pre-site -> site -> post-site -> site-deploy
生命周期 | 描述 |
---|---|
Pre-site | 项目开始前准备 |
Site | 项目及源码构建 |
Post-site | 项目发布前准备 |
Site-deploy | 项目发布 |
项目继承与聚合
在IDEA中创建maven的父工程会默认一并创建src目录,需要删除。子工程可以在项目中通过new module创建,IDEA会自动调整pom文件,如下。
parent/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<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>me.dongqinglin</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>child</module>
</modules>
<!-- 版本统一声明 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- use${java.version} -->
</properties>
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
parent/child/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>parent</artifactId>
<groupId>me.dongqinglin</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>child</artifactId>
</project>
继承关系通俗易懂,即是父工程的依赖性会传递给子工程。但是子工程需要显式声明用哪些包,在书写时必须声明父工程pom文件相对路径,只用书写GA,而不用书写版本坐标。
maven deploy
项目部署,暂时还没有更新到这一步。// todo