Maven学习笔记(一):Maven介绍、安装及简单示例

注意:本系列文档均以mac os平台为试验平台。

一、Maven介绍

Maven是一个基于Java平台的项目构建、依赖管理和项目信息管理的跨平台的项目管理工具。Maven能够最大化地消除构建的重复,抽象了完整的构建生命周期,并为绝大部分的构建任务提供了已实现的插件,同时,Maven还能够帮助我们标准化构建过程。

 

二、Maven的安装

在安装Maven之前,需要安装JDK(版本至少要求1.7及以上,本实验平台安装的是Oracle JDK 1.8)

接下来详述Maven安装过程。

2.1 下载Maven

在Apache Maven的官方网址可以下载Maven的安装包(http://maven.apache.org/download.cgi),如下图所示,下载apache-maven-3.5.0-bin.tar.gz安装包。

2.2 配置Maven环境变量

下载了安装包之后,将该安装包进行解压至理想的目录下(用户可自行决定解压目录)

tar xzvf apache-maven-3.5.0-bin.tar.gz

解压之后的maven目录结构为:

LICENSE		
README.txt	
NOTICE
boot/		
lib/	
bin/		
conf/

将maven环境变量添加至~/.bashrc文件中

vi ~/.bashrc

在.bashrc文件中添加maven的环境变量如下

# Maven Environment
export MAVEN_HOME=/User/xhhuang/maven
export PATH=$PATH:$MAVEN_HOME/bin

其中,/User/xhhuang/maven为安装包的解压目录。

添加完毕后,执行source ~/.bashrc命令,然后在终端输入mvn -version目录,看到如下所示结果说明maven环境变量配置成功。

xhHuangs-MacBook-Pro:maven xhhuang$ mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /Users/xhhuang/709/maven
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.5", arch: "x86_64", family: "mac"
xhHuangs-MacBook-Pro:maven xhhuang$ 

 

三、Maven Eclipse开发环境搭建

首先需要下载Eclipse IDE,下载地址为:(http://www.eclipse.org/downloads/eclipse-packages/),可依据不同平台进行下载。

3.1 安装m2eclipse插件

选择Eclipse导航栏Help中的Install new softwares,输入m2eclipse网址中给出的下载链接(详细地址请访问http://www.eclipse.org/m2e/),地址如下图所示:

在eclipse中输入网址,然后全选Mave Integration for Eclipse,点击下一步进行自动下载安装,如下图所示:

3.3 配置外部maven程序

Eclipse默认使用内置的mave程序,我们需要将其配置为我们在第2节中安装的外部maven程序。

选择Eclipse中的Preferences,然后选择maven的installation选项,添加第2节中安装的外部maven程序地址即可,如下图所示。

至此,maven的基本开发环境已经全部搭建完毕。

 

四、Maven的基本使用

4.1 创建Maven项目

可以通过Archetype生成maven项目骨架,使用mvn archetype:generate命令

mkdir HelloWorld

cd HelloWorld/

xhHuangs-MacBook-Pro:HelloWorld xhhuang$ mvn archetype:generate
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO] 
[INFO] 
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
...
中间的一些下载过程、说明过程在此处都省略掉
...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 997: 
Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 
Define value for property 'groupId': com.xhhuang
Define value for property 'artifactId': helloworld
Define value for property 'version' 1.0-SNAPSHOT: : 
Define value for property 'package' com.xhhuang: : com.xhhuang.helloworld
Confirm properties configuration:
groupId: com.xhhuang
artifactId: helloworld
version: 1.0-SNAPSHOT
package: com.xhhuang.helloworld
 Y: : y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/xhhuang/Documents/mavenProject/HelloWorld
[INFO] Parameter: package, Value: com.xhhuang.helloworld
[INFO] Parameter: groupId, Value: com.xhhuang
[INFO] Parameter: artifactId, Value: helloworld
[INFO] Parameter: packageName, Value: com.xhhuang.helloworld
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/xhhuang/Documents/mavenProject/HelloWorld/helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 44.938 s
[INFO] Finished at: 2017-07-04T00:29:14+08:00
[INFO] Final Memory: 18M/213M
[INFO] ------------------------------------------------------------------------
xhHuangs-MacBook-Pro:HelloWorld xhhuang$ 

在交互的过程中,回提示让你输入groupId、artifactId、version以及package。

  • groupID:定义了项目属于哪一个组,这个组往往和项目所在的组织或公司存在关联。譬如,在googlecode上建立一个名为myapp的项目,那么gourpId就应该为com.googlecode.myapp/
  • artifactId:定义了当前maven项目在组中的唯一ID,此处我们的artifactId为helloworld
  • version:指定了maven项目的当前版本,SNAPSHOT为快照,表示该项目目前还处于开发阶段,是不稳定的版本
  • packageName:定义了包的名字

maven通过groupId、artifactId和version定义一个项目的基本坐标。

可以看到生成的maven项目的目录树结构如下所示:

xhHuangs-MacBook-Pro:mavenProject xhhuang$ ls -R helloworld/
pom.xml	src

helloworld//src:
main	test

helloworld//src/main:
java

helloworld//src/main/java:
com

helloworld//src/main/java/com:
xhhuang

helloworld//src/main/java/com/xhhuang:
helloworld

helloworld//src/main/java/com/xhhuang/helloworld:
App.java

helloworld//src/test:
java

helloworld//src/test/java:
com

helloworld//src/test/java/com:
xhhuang

helloworld//src/test/java/com/xhhuang:
helloworld

helloworld//src/test/java/com/xhhuang/helloworld:
AppTest.java
xhHuangs-MacBook-Pro:mavenProject xhhuang$ 

App.java中的默认代码如下图所示:

修改pom.xml文件,在<project></project>标签内添加如下部分:

<build>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>1.2.1</version>
          <executions>
              <execution>
                  <phase>package</phase>
                  <goals>
                          <goal>shade</goal>
                  </goals>
                      <configuration>
                          <transformers>
                              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                  <mainClass>com.xhhuang.helloworld.App</mainClass>
                              </transformer>
                          </transformers>
                      </configuration>
              </execution>
          </executions>
       </plugin>
    </plugins>
  </build>

这一部分保证我们生成的jar包能够通过java -jar命令运行(能找到main函数入口)。

执行mvn clean package命令生成jar包,jar包在命令执行之后产生的target目录中。

xhHuangs-MacBook-Pro:helloworld xhhuang$ ls
pom.xml	src
xhHuangs-MacBook-Pro:helloworld xhhuang$ mvn clean package
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ helloworld ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/xhhuang/Documents/mavenProject/helloworld/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/xhhuang/Documents/mavenProject/helloworld/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/xhhuang/Documents/mavenProject/helloworld/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/xhhuang/Documents/mavenProject/helloworld/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ helloworld ---
[INFO] Surefire report directory: /Users/xhhuang/Documents/mavenProject/helloworld/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.xhhuang.helloworld.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---
[INFO] Building jar: /Users/xhhuang/Documents/mavenProject/helloworld/target/helloworld-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:1.2.1:shade (default) @ helloworld ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /Users/xhhuang/Documents/mavenProject/helloworld/target/helloworld-1.0-SNAPSHOT.jar with /Users/xhhuang/Documents/mavenProject/helloworld/target/helloworld-1.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.649 s
[INFO] Finished at: 2017-07-04T00:50:51+08:00
[INFO] Final Memory: 18M/197M
[INFO] ------------------------------------------------------------------------
xhHuangs-MacBook-Pro:helloworld xhhuang$ ls
pom.xml	src	target
xhHuangs-MacBook-Pro:helloworld xhhuang$ cd target/
xhHuangs-MacBook-Pro:target xhhuang$ ls
classes					original-helloworld-1.0-SNAPSHOT.jar
helloworld-1.0-SNAPSHOT.jar		surefire-reports
maven-archiver				test-classes
maven-status
xhHuangs-MacBook-Pro:target xhhuang$ java -jar helloworld-1.0-SNAPSHOT.jar 
Hello World!

可以看到,通过java -jar命令运行产生之后的jar文件,输出了程序的结果。

 

附录:maven常用命令

mvn clean

mvn clean compile

mvn clean test

mvn clean package

mvn clean install

转载于:https://my.oschina.net/xhhuang/blog/1149094

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值