maven学习进程-使用篇

来源:互联网 发布:域名注册网站排名 编辑:程序博客网 时间:2024/06/06 19:48

2.1编写POM

就像make的makeFile,ant的build,xml文件,maven项目的核心是pom.xml。pom(project object model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。现在先为Helloword项目编写一个最简单的pom.xml。
首先创建一个名为hello-world的文件夹,打开文件夹,新建一个名为pom.xml的文件,输入如下内容。

代码的第一行是xml头,指定了该xml文档的板式和编码方式。紧接着是project元素,project是所有pom.xml的根元素,它还声明了一些pom相关命名空间及xsd元素。虽然这些元素不是必须的,但使用这些属性能够让第三方工具(如IDE中xml编辑器)帮助我们快速编辑pom。
根元素下的第一个子元素modelVersion指定了当前pom模型的版本,对于maven2.0及maven3.0来说,它也只能是4.0.0
这段代码中最重要是包含了groupId,artifactId和version的三行。这三个元素定义了一个项目基本的坐标,在maven的世界,任何的jar,pom,或者war都是基于这些基本的坐标进行区分的。
groupId定义 了项目属于哪个组,这个组往往和项目所在的组织或者公司关联。譬如在google上建立了一个名为myapp的项目,那么groupId就应该是com.google.myapp.如果你的公司是mycom,有个项目为myapp,那么groupId就应该是com.mycom.myapp。本书中所有代码都基于groupId  com.juvenxu.mvnbook;
artifactId定义了当前maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world,本书其他章节代码会分配其他的artifactId.而在前面的groupId为com.googlecode.myapp的例子中,你可能会为不同的子项目分配artifactId
顾名思义,version指定了hello-world项目当前的版本--1.0SNAPSHOT.SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本,随着项目的发展,wersion会不断升级。

2.2编写主代码

项目主代码和测试代码不同,项目的主代码会被打包到最终的构建中,而测试代码只在运行时用到,不会被打包。默认情况下,maven假设项目主代码位于src/main/java目录。我们遵循maven的约定。创建该目录。然后再该目录下创建文件com/juvenux/mvnbook/helloworld/Hlloworld.java其内容代码清单如下。

这是一个简单的java类,它有一个sayHello()方法,返回一个String。同时这个类还带有一个main方法,创建一个HelloWorld实例,调用sayHolle()方法,并将结果输出到控制台。
关于该java代码有两点需要注意,首先,在绝大多数情况下,应该把项目主代码放到src/main/java/目录下(遵循Maven的约定),而无需额外的配置。Maven会自动搜寻改目录找到项目主代码。其次,该Java类包名是com.juvenxu.mvnbook.helloworld。这与之前在pom定义的groupId和artifactId相吻合。一般来说,项目中java类的包都应该基于项目的groupId和artifactId.这样更加清晰,更加符合逻辑,也方便搜索构建或者java类。
代码编写完毕后,使用maven进行编译。在项目根目录下运行命令mvn clean compile会得到如下输出:

3.3编写测试代码

为了使项目结构保持清晰,主代码与测试代码应该分别位于独立的目录中。3.2节讲过Maven项目中默认的主代码目录是src/main/java。对应的,Maven项目中默认的测试代码目录是src/test/java。因此,在编写测试用例之前,应当先创建该目录。
在java世界中,由Kent Beck和Erich Gamma建立的JUnit是事实上的单元测试标准。要使用JUnit,首先需要为Helloworld项目添加一个JUnit依赖。修改项目的pom如代码清单。



3.4打包和运行

将项目进行编译,测试之后,下一个重要的步骤就是打包(package)。Hello World的Pom中灭有指定打包类型,使用默认打包类型jar。简单执行命令mvn clean packege进行打包,可以看到如下输出


类似的maven在打包之前执行编译测试等操作。这里看到jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为hello-world-1.0.SNAPSHOT.jar的文件。该文件也位于target/输出目录中。他是根据artifactId-version.jar规则进行命名的,如有需要,还可以使用fileName来自定义该文件的名称,这里不展开讨论。
打包之后,又指定了安装任务install。从输出可以看出来改任务将项目输出的jar安装到了maven本地仓库中,可以打开相应的文件看到hello-world项目的pom和jar。之前讲述jUnit的pom及jar的下载的时候,我们说只有构建被下载到本地仓库后,才能由所有maven项目使用,这里同样的道理,只有将hello world的构建安装到本地仓库后,其他maven项目才能使用它。

2.5使用ArchetType生成项目骨架

hello world项目中有一些约定,在项目的根目录中放置pom.xml。在src/main/java目录中放置项目的主代码,在src./test/java中放置项目的测试代码。之所以一步一步的展示这些步骤,是为了能让可能是maven初学者的你得到更多实际的感受。我们称这些基本的目录结构和pom.xml文件内容成为项目的骨架,当你第一次创建项目骨架的时候,你还会饶有兴趣的去体会这些约定背后的思想,第二次,第三次,你也许还会满意自己的熟练程度。但是第四次,第五次做同样的事情,你可能会恼火,为此maven提供了 Archetype以帮助我们勾勒出项目骨架。
还是以hello world为例,我们使用maven archetype来创建项目骨架,离开当前的maven项目目录。
如果是maven3.o简单运行如下命令:
mvn archetype:generate
如果是maven2.0,最好运行如下命令:
mvn org.apche.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate


1 0
原创粉丝点击