Maven

主流的项目构建工具有:Ant、Maven、Gradle等。
Apache Maven是一个软件项目管理工具,基于POM(项目对象模型)的概念,来管理项目的依赖、编译、文档等信息。
使用Maven管理项目时,项目依赖的jar包不存在于工程内,而是集中放置在用户目录的.m2目录中。

Maven中央仓库信息速查

http://mvnrepository.com/
http://maven.outofmemory.cn/

maven plugin中的概念

lifecycle:总任务,它是一系列的phase组成,它运行完后就得到了一个结果,中间的过程是phase完成的。
常见的lifecycle有 | clean | package ear | pageage jar | package war | site等等

phase:阶段任务,一个lifecycle可以包含任意个phase,phase的执行是按顺序的,一个phase至少绑定很一个goal,没有goal的phase是没有意义的。
常见的phase有package, install, deploy

goal: 执行任务的最小单元,它可以绑定到任意个phase中,一个phase有一个或多个goal,goal也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行。

mojo: lifecycle与phase与goal都是概念,mojo才是做具体事情的,可以简单理解mojo为goal的实现类。

Maven的插件机制是完全依赖Maven的生命周期的,因此先理解Maven生命周期很重要。

生命周期

Maven有三套相互独立的生命周期,它们相互独立,负责软件工程的不同方面的工作。这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等。
Site Lifecycle 生成项目报告,站点,发布站点。

它们是相互独立的,可以仅调用clean来清理工作目录,调用site来生成站点。也可以直接运行mvn clean install site运行全部三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。
例如运行mvn clean,这个的clean是Clean生命周期的一个阶段。Clean生命周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作

mvn clean中的clean就是上面的clean阶段,在一个生命周期中运行某个阶段的时候,它之前的所有阶段都会被运行,即mvn clean等同于mvn pre-clean clean,mvn post-clean 等同于 pre-clean clean post-clean。这是Maven很重要的一个规则,可以简化命令行的输入。

打包

使用mvn package进行编译打包时,Maven会执行src/test/java中的JUnit测试用例,使用参数-DskipTests和-Dmaven.test.skip=true可以跳过测试,这两个参数的主要区别是:
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

安装jar到本地Maven库

把生成的Jar文件放入本地库,以让其他项目使用。 /.m2/repository目录是Maven本地库的默认位置。
在项目目录下执行: mvn install
成功后输出:
[INFO] Installing /Users/hycx/i_workspace/yirui/yirui-common/target/yirui-common-1.0-SNAPSHOT.jar to /Users/hycx/.m2/repository/com/yirui/yirui-common/1.0-SNAPSHOT/yirui-common-1.0-SNAPSHOT.jar
[INFO] Installing /Users/hycx/i_workspace/yirui/yirui-common/pom.xml to /Users/hycx/.m2/repository/com/yirui/yirui-common/1.0-SNAPSHOT/yirui-common-1.0-SNAPSHOT.pom
[INFO] BUILD SUCCESS

打包时加入本地库

spring boot工程中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">
<modelVersion>4.0.0</modelVersion>

<dependencies>
<!--local jar-->
<dependency>
<groupId>0</groupId>
<artifactId>0</artifactId>
<version>0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/CCP_REST_SMS_SDK_JAVA_v2.6.3r.jar</systemPath>
</dependency>
</dependencies>

<!--springboot-1.5.x对应的springcloud的版本需要使用Camden.SR6-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--指定includeSystemScope为true,打包本地库-->
<configuration><includeSystemScope>true</includeSystemScope></configuration>
</plugin>
</plugins>
</build>
</project>

发表评论