Maven使用入门(一)

以下是手工创建一个简单的hello-world的Maven项目。

  1、创建目录

       Maven对于项目目录结构、测试用例命名方式等都有既定的规则,比如项目的构建目录是target目录,源代码目录是src/main/java目录,测试源代码目录是src/main/test目录等。只要遵循这些规则,用户在项目间切换可以免去额外的学习成本,即所谓的约定优于配置(Convention Over Configuration)。

       创建hello-world的项目目录以及源代码目录src/main/java和测试源代码目录src/main/test。

  2、pom文件

       Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型包含了项目构建的基本信息,用于描述项目如何构建,声明项目依赖等等。

      在hello-world项目的根目录下创建一个pom.xml文件,添加以下内容:

<?xml version="1.0" encoding="UTF-8" ?>

<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.jackie.maven</groupId>
  <artifactId>hello-world</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>Maven Hello World Project</name>

</project>

配置文件pom.xml相关说明

(1)代码的第一行是XML头,指定了XML文档的版本和编码方式。

(2)project元素是所有pom.xml文件的根元素。

(3)modelVersion指定POM模型的版本,对于Maven 2以及Maven 3来说,只能是4.0.0。

     (4)groupId元素定义了项目或者组织的唯一标志,比如你的公司是yihaodian,有一个项目为myapp,那么groupId就应该是com.yihaodian.myapp。而且配置时生成的路径也是由此生成, 如com.jackie.maven生成的相对路径为:/com/jackie/maven。

     (5)artifactId元素定义了当前Maven项目在组中的唯一ID,比如这个Hello World项目的artifactId为hello-world。

     (6)version元素定义了项目的版本,如Hello World项目的当前版本是1.0-SNAPSHOT。SNAPSHOT意思是快照,说明项目还处在开发阶段,是不稳定的版本。

     (7)packaging元素定义打包的方式,如pom, jar, maven-plugin, ejb, war, ear, rar, par等

     (8)name元素定义一个更友好的项目名称, 非必须,但Maven推荐使用。

       注:(1)groupId、artifactId、version这三个元素定义了任何一个Maven项目最基本的坐标,在Maven的世界,任何的构件(如jar、war等)都是以基于这些基本的坐标进行区分的。

              (2)Maven能够让POM最大程度的与实际代码间解耦。

3、编写源代码

       package com.jackie.maven.helloworld;
       public class HelloWorld {
           public String sayHello() {
               return "Hello, world";
           }
           public static void main(String[] args) {
               HelloWorld h = new HelloWorld();
               System.out.println(h.sayHello());
           }
       }

       注:(1)项目的源代码会被打包到最终的构件(如jar)中,而测试源代码只是用来运行测试,不会被打包。

              (2)最佳实践:源代码的包名最好基于项目的groupId和artifactId,这样方便搜索构件或Java类。

       使用Maven编译项目,在项目的根目录下运行命令mvn clean compile会得到如下输出:

       [INFO] Scanning for projects...
       [INFO]                                                                         
       [INFO] ------------------------------------------------------------------------
       [INFO] Building Maven Hello World Project 1.0-SNAPSHOT
       [INFO] ------------------------------------------------------------------------
       [INFO]
       [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hello-world ---
       [INFO] Deleting /home/jackie/hello-world/target

       [INFO]
       [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hello-world ---
       [debug] execute contextualize
       [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
       [INFO] skip non existing resourceDirectory /home/jackie/hello-world/src/main/resources
       [INFO]
       [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hello-world ---
       [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
       [INFO] Compiling 1 source file to /home/jackie/hello-world/target/classes
       [INFO] ------------------------------------------------------------------------
       [INFO] BUILD SUCCESS
       [INFO] ------------------------------------------------------------------------
       [INFO] Total time: 1.009s
       [INFO] Finished at: Sun Nov 18 22:13:04 CST 2012
       [INFO] Final Memory: 7M/17M
       [INFO] ------------------------------------------------------------------------
       注:(1)clean告诉Maven清理输出目录target,compile告诉Maven编译项目源代码。

             (2)从输出可以看出Maven先执行clean:clean任务,删除target目录;接着执行resources:resources任务;最后执行compiler:compile任务,编译源码至target/classes目录下。

             (3)clean:clean、resources:resources、compiler:compile对应Maven的插件以及插件目标,比如clean:clean是clean插件的clean目标,compiler是compiler插件的compile目标。

            


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackiehff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值