由David发表在天码营
Maven是一个项目构建和管理工具。那什么是构建呢?构建就是软件项目生产的整个过程,比如这个过程应该包括:
可见,项目的构建可不仅仅是编译软件这件事情。除了写代码,在项目层面做的大部分工作,都包含在构建的过程中。Maven可以帮助我们在非常短的时间里完成项目的配置工作,管理开发时的依赖,从而快速建立开发环境。同时Maven能够自动化地帮我们执行编译、构建、测试和发布等过程,比我们手动执行要更加高效。
接下来我们通过Maven来管理我们的项目,因此我们先简单了解Maven的一些基本概念和使用方法。
Eclipse Luna自带了Maven,可以直接使用。但是一般情况下建议手动安装Maven,这样更容易在不同环境以及不同团队成员之间统一Maven版本,同时也更便于在命令行中执行Maven命令。
前往官网下载Maven,下载二进制文件即可,即apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz。
将下载文件解压到某个目录,如/Users/david/DevTools/apache-maven-3.3.3,将目录中的bin文件夹路径(/Users/david/DevTools/apache-maven-3.3.3/bin)添加到环境变量path。
如果你使用的是Mac,通过Brew安装Maven,只需要一条命令:
brew install maven
为了验证Maven是否安装成功,在命令行执行mvn -v命令,如果安装成功,可以看到控制台输出:
➜ ~ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_20, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"
为了让Eclipse使用本地安装的Maven版本而非自带的默认版本,需要进行简单的配置。
打开偏好设置,选择【Maven】->【Installations】,点击【Add】;
在弹出对话框中,输入本地Maven安装的路径,同时进行命名,比如我们命名为Maven 3.3.9;
完成之后,将Maven 3.3.9勾选,点击【OK】,则Eclipse将使用本地安装的Maven。
接下来让我们创建第一个Maven项目。【File】->【New】->【Other...】,选择【Maven】->【Maven Project】。
接下来设置项目路径,勾选Create s simple project和Use default Workspace location,点击【Next】。
填写以下信息后,点击【Finish】完成项目创建。
其中:
Group Id是这个项目所属的组织,一般都是组织域名的反写形式,这里我们填写为com.tianmaying
Artifact Id是这个项目所产生的制品的名称,比如最终所生成的JAR包或者WAR包的名称
Version是项目的版本
Pacaking是项目如何打包,默认的值为jar
Name是项目的可读名称
Description是项目的描述
项目创建完成之后,Maven已经为我们建立好了项目的文件结构:
src/main/java
src/main/resources
src/test/java
src/test/resources
点击打开项目根目录下的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tianmaying</groupId>
<artifactId>hello-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello-maven</name>
<description>A demo of simple maven projects</description>
</project>
POM是Project Object Model的缩写,即项目对象模型,项目的所有信息都体现在POM文件中了。事实上我们说通过Maven文件管理项目,更确切的就是通过POM文件来描述项目,Maven会根据POM文件来帮我们自动化执行各种过程和任务。
上面的XML代码中的信息包含了最简单的项目信息,其中<modelVersion>
POM模型的版本(只能是4.0.0),其它信息与刚刚在创建项目导向中输入的信息是一致的。Eclipse根据我们的输入自动生成了这些信息,很多情况下我们也可以手动输入。
新创新的Maven的项目,默认是使用JDK 1.5,为了让Maven项目使用JDK 1.8,可以在POM文件中加入如下代码:
<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>
<groupId>com.tianmaying</groupId>
<artifactId>hello-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello-maven</name>
<description>A demo of simple maven projects</description>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
这段代码将Maven编译Java 代码的JDK改为了1.8版本,详细解释我们暂时略过。【右键】->【Maven】->【Update Project】就可以在项目导航栏中看到JRE System Library中显示为JavaSE 1.8了。
在src/main/java/
目录下来创建我们需要的Java类,我们创建一个用于Say Hello World的NewComer
类,另外一个包含main
方法的HelloWorld
类。
NewComer.java
package com.tianmaying.mavendemo;
public class HelloWorld {
public static void main(String[] args) {
NewComer newComer = new NewComer();
System.out.println(NewComer.sayHello());
}
}
NewComer
package com.tianmaying.mavendemo;
public class NewComer {
public String sayHello() {
return "Hello Tianmaying!";
}
}
我们可以通过Maven执行不同的构建生命周期目标,比如编译项目代码,创建制品(如JAR包),将包安装到本地仓库等。
在命令行中输入:mvn compile
这里compile
就是一个目标,这条命令告诉Maven执行编译,如果成功执行,将可以在target/classes文件夹下看到编译出来的.class文件。如果首次运行maven命令,需要花一些时间去将依赖的包下载到本地仓库,执行成功可以在控制台中看到Build Success的信息。
通常情况下,我们执行得更加频繁的命令是:mvn package
执行package目标不仅会编译代码,同时会运行所有的测试,最后将target目录下的生成JAR包。JAR包的名称时<artifactId>
和<version>
两个属性值连接起来构成的。比如上面这个例子中,生成JAR包会被命名为hello-maven-0.0.1.jar。如果将<packaging>
的值从"jar"改成"war",则将生成一个WAR包。
Maven在本地维护着一个缓存依赖的仓库,通常在用户目录下的.m2/repository
目录,这样构建时可以迅速获取所需的依赖。如果你希望项目生成JAR包也放到本地仓库中,可以执行:mvn install
install
目标不仅编辑、测试和打包,同时将打包出来的制品会复制到本地依赖仓库中,将来其它项目如果需要依赖于这个包时,就可以在POM文件中引用它。
更多生命周期目标以后再使用到时我们在为大家解释。
我们也可以在Eclipse中通过菜单操作来执行命令。【邮件】->【Run As】->【Maven build】:
在弹出如下对话框,我们在【Goals】中输入clean package
后,点击【Run】就相当于在命令行执行了mvn clean package
。
一条Maven命令可以执行多个目标,在这个例子中,就先后执行了clean
和package
两个目标,其中clean
目标会删除之前的编译和打包结果,通常我们会在一个目标前加入clean
目标。
更多文章请访问天码营网站