博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven学习手记 - 1
阅读量:6121 次
发布时间:2019-06-21

本文共 5249 字,大约阅读时间需要 17 分钟。

学习目标


  1. windows下安装maven环境;
  2. 使用命令创建maven项目结构;
  3. maven项目编译测试打包安装运行;
  4. 在maven项目中使用插件。

 

在windows下安装maven环境


在windows下安装maven环境的步骤如下:

1. 下载maven,

下载地址:

下载“”

2. 配置环境变量JAVA_HOME,指向JDK安装路径;

3. 将maven的bin包路径添加到环境变量PATH中;

4. 在命令行窗口输入mvn -v查看maven版本号,完成安装测试;

5. maven运行环境设置完成。

此外还有必要调整默认依赖库位置,添加下载代理和新增依赖库下载镜像地址。这些需要调整setting.xml文件,可以参考这篇文章:《》。

 

使用命令创建maven项目


打开命令行窗口, 进入项目创建位置。

在命令行窗口输入mvn archetype:generate第一次运行要下载比较多的依赖包(maven指令的运行需要使用大量的依赖包。maven需要依赖包时会首先在本地依赖库中查找,如果在本地找不到,就会在远程依赖库中查找并下载需要的依赖包到本地库中),所以执行的时间会长一点。一段时间后,命令行窗口出现如下提示:

这里提示设置archetype,即给所要创建的java项目选择一个通用的原型。maven提供了1039个项目原型。这里选择默认的398。

输入398,点回车键(有默认值可以直接点回车键,视为选择默认值),会有如下提示:

这里提示选择项目原型版本。1~4为测试版本,默认选择6。按回车键,选择默认版本号1.1。之后提示输入groupId

groupId是项目组织的标识符,一般默认为项目的java包名称(仅是一般的做法,并没有严格限制)。这里输入“net.ibuluo.mvntest”,而后提示输入artifactId,

artifactId是项目的标识符,一般使用项目的名称。输入“mvntest”,会提示要求设置版本号:

默认版本号为“1.0-SNAPSHOT”,按回车键直接使用默认版本号即可。之后有要求设置包名称:

042241195204282.png

包名称一般可以使用和groupId相同的包名称。这里maven提供的包名称的默认值即是之前设置的groupId。按回车键选择默认的包名称。

接下来会要求确认项目信息,确认无误输Y,按回车键;需要重新设置输N,重新从groupId开始设置项目信息。

确认后输入Y后,maven开始创建项目结构,并在命令行窗口输入以下信息:

至此,项目结构已创建完成。

看一下完成后的项目结构:

在项目的根目录下,maven创建了pom.xml文件。此外,在src包下还创建了两个目录main和test,分别对应项目目录和测试目录。在main和test下还有两个类App和AppTest。

先看一下pom.xml:

4.0.0
net.ibuluo.mvntest
mvntest
1.0-SNAPSHOT
jar
mvntest
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test

pom.xml是maven项目的核心文件。POM定义了项目的基本信息,用以描述项目如何构建,声明项目依赖等。说明下pom中的元素。

- project:pom文件中的顶层元素;

- modelVersion:指明POM使用的对象模型的版本;

groupId、artifactId和version之前已经说过了。这三个也是pom文件中最重要的部分。这三项属性是一个maven项目的唯一性标识(或者说是坐标)。

- packaging: 指定项目打包类型

- name:项目的名称,不是很重要,只是给项目一个比较友好的名称,通常用于maven产生的文档中。

- url:指定项目站点,通常用于maven产生的文档中。

- properties:属性标签,通过properties标签可以在pom.xml文件中定义一系列的变量,如上,就是定义了一个值为“UTF-8”的变量${

project.build.sourceEncoding},在pom.xml中可以直接使用这个变量。这里目前没有用到,不过在需要多次引用同一个值的时候,properties标签的作用就凸显出来了。

- dependencies:在这个标签下可以设置多个dependency来声明一系列的依赖。

- dependency:项目的依赖。之前已经说过,groupId,artifactId和verison是一个项目的唯一标识,在这里就确定了版本为3.8.1的JUnit。通过这段设置,告诉了maven去获取相应的junit-3.8.1.jar文件。

- scope:依赖范围,即依赖库的作用域。在这里指定为test,即只在测试包下生效。在项目目录下引用就会报错。如不声明依赖范围,那么scope默认compile,即对项目主代码和测试代码都有效。

再看一下main目录下给出的项目文件实例App.java:

package net.ibuluo.mvntest;/** * Hello world! * */public class App {    public static void main( String[] args )    {        System.out.println( "Hello World!" );    }}

很简单的一段hello world程序。

再看下test目录下给出的测试文件实例AppTest.java:

package net.ibuluo.mvntest;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;/** * Unit test for simple App. */public class AppTest     extends TestCase{    /**     * Create the test case     *     * @param testName name of the test case     */    public AppTest( String testName )    {        super( testName );    }    /**     * @return the suite of tests being tested     */    public static Test suite()    {        return new TestSuite( AppTest.class );    }    /**     * Rigourous Test :-)     */    public void testApp()    {        assertTrue( true );    }}

 

maven项目的编译测试打包安装和运行


试运行下这个项目。分如下四个步骤:编译->测试->打包->安装->运行

编译:打开命令行窗口,进入项目目录,输入mvn clean compile 执行编译;

完成编译后,在项目目录下生成了target目录,编译完成的文件就储存在这个目录下:

在刚才输入的命令中clean告诉maven清理target目录,compile告诉maven编译项目代码。

测试:在命令行窗口中输入 mvn clean test 调用maven执行测试,maven执行了一段功能并下载了一串依赖包后输出如下信息:

可以看到测试成功了。

再看看项目目录,在target包下又多了两个目录,surefire-reports和test-classes 。

surefire-reports存放的是测试报告,test-classes下存放的是编译后的测试文件。

打包:在命令行窗口输入 mvn clean package,执行项目打包:

可以看到,在打包之前,maven再次执行了编译和测试操作。

因为在pom文件中,我们设置打包类型为jar,所以这里生成了一个名为mvntest-1.0-SNAPSHOT.jar的文件。

安装:在命令行窗口输入 mvn clean install ,执行安装任务:

从运行结果可以看出,执行安装命令的目的是将生成的jar 包安装到本地的依赖库中。这样其他的项目也可以使用这个项目中生成的类了。

最后,执行以下这个项目。在命令行窗口输入java –jar target/mvntest-1.0-SNAPSHOT.JAR,回车键:

额,执行结果和我想的不一样。用压缩工具打开mvntest-1.0-SNAPSHOT.jar,查看下包中的META-INF/MANIFEST.MF文件:

Manifest-Version: 1.0Built-By: robinBuild-Jdk: 1.7.0_45Created-By: Apache Maven 3.2.1Archiver-Version: Plexus Archiver

没有设置Main-Class属性,这样jar文件在运行时就无法找到带main方法的类。直接动手填上也是一个办法,而且在这个小的示例中很简单。

不过这样不是治本的方法。我们需要maven生成一个可以直接执行的jar包。这时,我们需要使用插件。

 

在maven项目中使用插件


需要使用的插件为:maven-shade-plugin。

maven-shade-plugin是一个打包插件。通过这个插件我们可以配置Main-Class的值,并在打包的时候将Main-Class的值写入META-INF/MANIFEST.MF中。  关于这个插件的更多信息请参考这里:

调整pom.xml文件为:

4.0.0
net.ibuluo.mvntest
mvntest
1.0-SNAPSHOT
jar
mvntest
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test

 

而后执行命令 mvn clean install ,在target目录下生成了两个jar包:mvntest-1.0-SNAPSHOT.jar 和 original-mvntest-1.0-SNAPSHOT.jar。

mvntest-1.0-SNAPSHOT.jar是带有Main-Class的可执行的jar文件,后者是原始的jar包。

再次执行下:

执行成功,输出了”Hello World!“这个经典的招呼。

关于这个插件的更多用法可以参考下这篇文章:

 

 

 

 

 

参考的文章:

转载于:https://www.cnblogs.com/amunote/p/3765093.html

你可能感兴趣的文章
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>
Lua学习笔记(8): 元表
查看>>
PHP经典算法题
查看>>
LeetCode 404 Sum of Left Leaves
查看>>
醋泡大蒜有什么功效
查看>>
hdu 5115(2014北京—dp)
查看>>
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...
查看>>
PHP读取日志里数据方法理解
查看>>
第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
查看>>
Vivado增量式编译
查看>>
一个很好的幻灯片效果的jquery插件--kinMaxShow
查看>>
微信支付签名配置正确,但返回-1,调不出支付界面(有的手机能调起,有的不能)...
查看>>
第二周例行报告
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>