maven命令有很多,但是比较常用的命令有下面这些:
下面就来看看下面五个命令的使用:
mvn -v/version:用来查看Maven版本
mvn compile:用来对源文件进行编译
mvn test:用来运行测试程序
mvn package:用来对项目进行打包
mvn clean:用来清空项目,也就是删除maven项目下的target目录
mvn install:安装jar包到本地仓库中
新建一个maven项目maven02,像第一个maven项目的示例那样构建骨架。
编写的Speak.java源文件代码是:
package com.demo.maven02.util;
import com.demo.maven01.model.HelloWorld;
public class Speak {
public String sayHi() {
return new HelloWorld().sayHello();
}
}
编写的SpeakTest.java测试源文件代码是:
package com.demo.maven02.util;
import org.junit.*;
import org.junit.Assert.*;
public class SpeakTest {
@Test
public void testSayHi() {
Assert.assertEquals("Hello World!",new Speak().sayHi());
}
}
由于在代码中我们导入了项目maven01下的com.demo.maven01.model.HelloWorld类,因此我们编写的
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- groupId的值是项目的包名 -->
<groupId>com.demo.maven02</groupId>
<!-- artifactId的值是模块名 -->
<artifactId>maven02-util</artifactId>
<!-- version的值是版本 -->
<version>0.0.1SNAPSHOT</version>
<dependencies>
<!-- 导入Junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!-- 导入maven01-model依赖 -->
<dependency>
<groupId>com.demo.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>
</dependencies>
</project>
我们使用命令mvn compile编译源代码:
上面的结果是编译失败,原因是在本地仓库中和远程中央仓库中找不到和maven01的相关的jar文件,这就需要
我们手动将maven01的项目打包后,添加到本地仓库中,供maven02项目的使用。
在项目maven01中我们已经打包成功,只需要用命令mvn install安装jar包到本地仓库中即可:
我们在本地仓库中可以找到项目maven01的jar文件:
接下来我们继续项目maven02的示例,由于编译失败,生成的target目录需要清除,我们使用命令mvn clean清
除即可,也就是删除target目录。
那么我们使用命令mvn compile重新编译maven02项目,就会成功。
maven自动建立目录骨架
Maven集成了archetype插件,用于创建符合maven规定的目录骨架,这个目录骨架我们已经很清楚了,自己手
动创建很麻烦繁琐。
在进行自动创建之前,先来解决一个问题,可以在最后加上:-DarchetypeCatalog=internal参数,表示的意思
是让它不要从远程服务器上取catalog,如果从远程服务器上下载会很慢或者卡死在Generating project in
Interactive mode,有时候导致创建失败。
参考我转载的文章:
Maven创建项目时出现Generating project in Interactive mode就一直卡住的解决方案
创建目录的两种方式
第一种:按照提示进行选择创建符合maven规范的目录
新建一个项目maven03,在这个目录中进行构建目录。
mvn archetype:generate
archetype:generate 目标会列出一系列的 archetype 让你选择。 Archetype 可以理解成项目的模型。 Maven
为我们提供了很多种的项目模型,包括从简单的 Swing 到复杂的 Web 应用。我们选择默认的 maven-archetype-
quickstart ,是编号7 ,如下图所示。
遇到Choose a number or apply filter是直接敲击回车选择默认的即可,也可以选择提示给你的数字。连打两个
回车,这时候让你确定项目属性的配置。
接下来输入的是,根据自己的要求输入即可,这些属性是我们在命令行中用 -D 选项指定的。该选项使用 -
Dname=value 的格式。回车确认,就完成了项目的建立,如下图所示:
-DgroupId=com.mycompany.helloworld
-DartifactId=helloworld
-Dversion=1.0-SNAPSHOT
-Dpackage=com.mycompany.helloworld
项目构建过程检查配置的属性,最后成功构建项目helloworld,在maven03目录下出现helloword项目
第二种:一次性创建符合maven规范的目录
mvn archetype:generate
-DgroupId=组织名,公司的网址反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包
我们新建一个maven04的目录,在此目录下使用一次性创建来重新构建上面的示例。
输入:mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -
Dversion=1.0-SNAPSHOT -Dpackage=com.mycompany.helloworld -DarchetypeCatalog=internal
看结果:
这时候我们看一下 maven 给我们建立的文件目录结构:
maven的archetype插件建立了一个 helloworld 目录,这个名字来自 artifactId 。在这个目录下面,有一个
Project Object Model(POM) 文件 pom.xml 。这个文件用于描述项目,配置插件和管理依赖关系。
源代码和资源文件放在 src/main 下面,而测试代码和资源放在 src/test 下面。
Maven已经为我们建立了一个 App.java 文件:
正是我们需要的HelloWorld代码。所以我们可以构建和运行这个程序了。用下面简单的命令构建:
cd helloworld和mvn package
当你第一次运行maven的时候,它会从网上的maven库(repository)下载需要的程序,存放在你电脑的本地库
(local repository) 中,所以这个时候你需要有Internet连接。Maven默认的本地库是 ~/.m2/repository/ ,在
Windows 下是 %USER_HOME%/.m2/repository/ 。修改了默认的本地仓库则会下载到修改后的本地仓库中。
打包成功后,这个时候, maven在helloworld下面建立了一个新的目录target/ ,构建打包后的jar文件
helloworld-1.0-SNAPSHOT.jar 就存放在这个目录下。编译后的 class 文件放在 target/classes/ 目录下面,测试
class 文件放在 target/test-classes/ 目录下面。
为了验证我们的程序能运行,执行下面的命令:
java -cp target/helloworld-1.0-SNAPSHOT.jar com.mycompany.helloworld.App
运行成功!!