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也不容易啊。

posted @ 2014-12-04 23:00  2805101015  Views(1936)  Comments(0Edit  收藏  举报