Maven 插件
我们用了 mvn archetype:generate 命令来生成一个项目。那么这里的 archetype:generate 是什么意思呢?archetype 是一个插件的名字,generate是目标(goal)的名字。这个命令的意思是告诉 maven 执行 archetype 插件的 generate 目标。插件目标通常会写成
一个目标是一个工作单元,而插件则是一个或者多个目标的集合。比如说Jar插件,Compiler插件,Surefire插件等。从看名字就能知道,Jar 插件包含建立Jar文件的目标, Compiler 插件包含编译源代码和单元测试代码的目标。Surefire 插件的话,则是运行单元测试。
看到这里,估计你能明白了,mvn 本身不会做太多的事情,它不知道怎么样编译或者怎么样打包。它把构建的任务交给插件去做。插件定义了常用的构建逻辑,能够被重复利用。这样做的好处是,一旦插件有了更新,那么所有的 maven 用户都能得到更新。
mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT
Maven 生命周期
我们用的第二个命令是:mvn package。这里的 package 是一个maven的生命周期阶段 (lifecycle phase )。生命周期指项目的构建过程,它包含了一系列的有序的阶段 (phase),而一个阶段就是构建过程中的一个步骤。
那么生命周期阶段和上面说的插件目标之间是什么关系呢?插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。当 maven 在构建过程中逐步的通过每个阶段时,会执行该阶段所有的插件目标。
maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。如果你没有对它进行任何的插件配置或者定制的话,那么上面的命令 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标:
process-resources 阶段:resources:resources
compile 阶段:compiler:compile
process-classes 阶段:(默认无目标)
process-test-resources 阶段:resources:testResources
test-compile 阶段:compiler:testCompile
test 阶段:surefire:test
prepare-package 阶段:(默认无目标)
mvn package 来构建项目
当你第一次运行 maven 的时候,它会从网上的 maven 库 (repository) 下载需要的程序,存放在你电脑的本地库 (local repository) 中,所以这个时候你需要有 Internet 连接。Maven 默认的本地库是 ~/.m2/repository/ ,在 Windows 下是 %USER_HOME%\.m2\repository\ 。
2、使用Maven清理项目
在基于Maven的项目中,很多缓存输出在“target”文件夹中。如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署。
要清理项目缓存的输出,发出以下命令:mvn clean 来清理项目,当mvn clean执行,在“target”文件夹中的一切都将被删除。
部署进行生产
要部署您的项目进行生产,它总是建议使用 “mvn clean package“, 以确保始终获得最新的部署。
3、使用Maven运行单元测试
mvn test 这会在你的项目中运行整个单元测试
package com.yiibai.core;
import junit.framework.Assert;
import org.junit.Test;
public class TestApp2 {
@Test
public void testPrintHelloWorld2() {
Assert.assertEquals(App.getHelloWorld2(), "Hello World 2");
}
}为了运行单个测试(TestApp2),发出此命令: mvn -Dtest=TestApp2 test
4、将项目安装到Maven本地资源库
在Maven中,可以使用 mvn install 打包项目,并自动部署到本地资源库,让其他开发人员使用它。
注意,当“install”在执行阶段,上述所有阶段 “validate“, “compile“, “test“, “package“, “integration-test“, “verify” 阶段, 包括目前的“install”阶段将被执行有序。
mvn install 示例
一个Java项目,具有以下 pom.xml 文件
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai.core</groupId>
<artifactId>yiibai-core</artifactId>
<packaging>jar</packaging>
<version>99</version>
<name>yiibai-core</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>基于以上pom.xml文件,在“mvn install”被执行,它会打包项目为“yiibai-core-99.jar”文件,并复制到本地存储库。
它总是建议运行“clean”和“install”在一起,让您能始终部署最新的项目到本地存储库。
mvn clean installmvn site在Maven中,可以使用“mvn site”,为您的项目信息生成文档站点。生成的网站是在项目的“target/site”文件夹中。
6、使用“mvn site-deploy”部署站点
mvn site:deploy
在 pom.xml 中,配置在 “distributionManagement” 标签部署你的网站。
<distributionManagement>
<site>
<id>yiibaiserver</id>
<url>dav:http://127.0.0.1/sites/</url>
</site>
</distributionManagement>“dav”前缀是HTTP协议之前添加的,这意味着通过WebDAV机制部署您的网站。或者,可以用“scp”取代它,如果您的服务器支持“scp”访问。
告诉Maven来使用“wagon-webdav-jackrabbit”扩展部署。
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<version>1.0-beta-7</version>
</extension>
</extensions>
</build>mvn site:deploy 命令执行:所有站点文件夹和文件,在项目文件夹- “target/site”会被自动部署到服务器。
7、生成mvn树
mvn dependency:tree > tree.txt
8、打包
cd 到对应的待打包的目录下
mvn clean deploy -DskipTests=true