首页 > 代码库 > Maven入门

Maven入门

  上一篇中已经安装好了Maven,这一篇以经典的Hello World为例讲述Maven基本操作流程。

  Maven主要完成自动化构建过程,其核心就在于配置文件pom.xml。POM(Project Object Model)定义了项目的基本信息,描述了项目如何构建,项目依赖等。

一,项目目录结构及代码

  先上一张目录结构图,在helloworld项目文件夹下执行tree命令:

.
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── yxl
    │               └── helloworld
    │                   └── HelloWorld.java
    └── test
        └── java
            └── com
                └── yxl
                    └── helloworld
                        └── HelloWorldTest.java
11 directories, 3 files

现在解释目录各文件夹的意义,约定俗成的,pom.xml是核心配置文件,后面细说。src/main/java/是放置源代码的目录,maven会自动搜寻该目录进行编译等操作。com.yxl.helloworld是包名,所以后面有三层目录com/yxl/helloworld/。src/test/java/是放置测试代码的目录。HelloWorld.java是主代码,如下所示:

  1 package com.yxl.helloworld;  2   3 public class HelloWorld  4 {  5     public String sayHello()  6     {  7         return "Hello World";  8     }  9     public static void main(String[] args) 10     { 11         System.out.println(new HelloWorld().sayHello()); 12     } 13 }

代码只有一个方法sayHello,该类带有一个main方法,使得编译后的结果可以直接运行。

测试代码为HelloWorldTest.java,如下所示:

  1 package com.yxl.helloworld;  2   3 import static org.junit.Assert.assertEquals;  4 import org.junit.Test;  5   6 public class HelloWorldTest  7 {  8     @Test  9     public void testSayHello() 10     { 11         HelloWorld helloWorld = new HelloWorld(); 12         String result = helloWorld.sayHello(); 13         assertEquals("Hello World", result); 14     } 15 }

二,pom.xml配置文件介绍

先上代码,pom.xml:

 1 <?xml version = "1.0" encoding = "UTF-8"?>  2 <project xmlns="http://maven.apache.org/POM/4.0.0"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  4     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  5   <modelVersion>4.0.0</modelVersion>  6   7   <groupId>com.yxl.helloworld</groupId>  8   <artifactId>helloworld</artifactId>  9   <version>1.0-SNAPSHOT</version> 10   <packaging>jar</packaging> 11  12   <name>helloworld</name> 13   <url>http://maven.apache.org</url> 14  15   <properties> 16     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 17   </properties> 18  19   <dependencies> 20     <dependency> 21       <groupId>junit</groupId> 22       <artifactId>junit</artifactId> 23       <version>4.7</version> 24       <scope>test</scope> 25     </dependency> 26   </dependencies> 27  28 <build> 29     <plugins> 30       <plugin> 31         <groupId>org.apache.maven.plugins</groupId> 32         <artifactId>maven-shade-plugin</artifactId> 33         <version>2.3</version> 34         <executions> 35           <execution> 36             <phase>package</phase> 37             <goals> 38               <goal>shade</goal> 39             </goals> 40             <configuration> 41               <transformers> 42                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 43                   <manifestEntries> 44                     <Main-Class>com.yxl.helloworld.HelloWorld</Main-Class> 45                     <Build-Number>123</Build-Number> 46                   </manifestEntries> 47                 </transformer> 48               </transformers> 49             </configuration> 50           </execution> 51         </executions> 52       </plugin> 53     </plugins> 54   </build> 55  56 </project>

第一行是XML头部,指定了XML的版本和编码方式。

2-4行声明了一些POM相关的命名空间及xsd元素,不是必须的,但能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。

modervison指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。

7-9行是pom.xml中最重要的内容,它定义了项目的坐标,在Maven的世界中,所有的jar,pom和war都基于这些坐标进行区分。groupId定义了项目属于哪个组,通常和所在的公司关联,假如公司是yxl,开发了一个myapp的项目,那么groupId一般定义为com.yxl.myapp。artifactId定义了当前项目在组中唯一的ID,version定义了项目的版本,第一版一般定义为1.0-SNAPSHOT,后面升级的可以陆续命名为1.1,2.0等。

19-26行定义了使用JUnit的依赖,其中,groupId是junit,artifactId是junit,版本是4.7,其他版本也可以,这三个元素构成了JUnit的坐标,Maven会自动下载junit-4.7.jar包。其中还有一个值为test的scope元素,它表示依赖范围,test表示该依赖只在测试环境中有效。

28-54行为了让生成的jar包可执行,执行mvn clean package生成的JAR包默认是不可执行的,因为带有main方法的信息不会被添加到manifest中。使用java -jar运行该包时,报错如下:

  no main manifest attribute, in original-helloworld-1.0-SNAPSHOT.jar

为了生成可执行的JAR包,需要借助maven-shade-plugin插件,生成可执行JAR包只是该插件的功能之一,其他功能见官网,配置示例网址为:

http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

关键的一行在于mainClass,它重新设定了程序运行的入口地址,其内容就是我们编写的类名称。在运行mvn clean package生成可执行JAR包,当使用java -jar命令再次执行该包时,正常输出结果。

三,Maven基本命令

1,编译主代码

mvn clean compile

 2,进行代码测试

mvn clean test

3,打包

mvn clean package

 

4,运行,生成的可执行jar包位于新生成的targe目录下,其中还包含了很多其他文件内容,这里略过。

java -jar target/helloworld-1.0-SNAPSHOT.jar

 

5,安装,即将生成的jar包安装到本地仓库,供其他项目使用

mvn clean install

6,使用原型,如果每次构建Maven项目都需要调用mkdir一个个生成指定目录未免繁琐,我们使用原型快速构建目录结构,需要做的只是按照提示使用默认值或者指定值,像groupId,artifactId等肯定是自己指定的,而version等就可以使用默认值即可。

mvn archetype:generate

OK,大功告成咯,看来整个HelloWorld也不容易啊。

Maven入门