Maven初探:一切从HelloMM开始!
? ? ?前言:初次发帖,此文为maven的初级文章,老鸟飞过。(java技术交流群:178547149)
? ? ?引子:maven是一款基于项目对象模型(POM)的项目构建工具,可以轻松的帮助开发人员构建项目,生成站点,打包jar等操作,鄙人对maven不算很深入,言多必失,o()o 。
?
一、环境设置(Windows)? ? ?1.在此之前请确保本机已安装jdk,并配置好了环境变量。所谓环境设置就是使maven的相关命令能在dos下识别,下载maven压缩包。直接解压到某一目录下,其中
? ?---bin目录:包含运行maven命令的脚本;
? ?---boot目录:包含运行maven所需的类加载jar包;
? ?---conf目录:包含一个全局配置文件;
? ?---lib目录:与maven相关的所有jar包;
记住其路径,打开环境变量设置对话框,新建M2_HOME变量,其值为maven的解压路径,在path变量中追加%M2_HOME%\bin,打开dos键入mvn -v,出现下图则表示成功。
?
? ? ?
? ??
2.用maven构建项目时,首先会从http://maven.apache.org/这个网站找所需的jar包,然后下载到本地仓库(repository)方便以后重用,当然只需下载一次。到maven的conf目录找到settings.xml配置文件,找到如下节点:
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ~/.m2/repository <localRepository>/path/to/local/repo</localRepository> -->
?默认的本地仓库路径为 ~/.m2/repository,~表示为你的解压路径。现在我们修改它的默认路径,到C:\Documents and Settings\Administrator\.m2目录下找到settings.xml文件,修改如下图所示。
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ~/.m2/repository --> <localRepository>D:\\soft\\repository</localRepository>
也就是说以后所缺的jar包下载后都会放到D盘的soft/repository文件夹下,还有一点需要说明,maven的conf文件夹下的settings.xml配置文件是基于全局的,计算机上所有的用户都将受到影响,而后者是用户范围的,只对当前用户
产生影响,为了避免一些无意识的操作而影响到所有的用户,一般推荐用户范围的,如果没找到.m2文件夹,先跳到第二步
构建项目,然后回过头再来找找就有了。
?
二、构建项目? ? ?1.首先创建一个文件夹,名称随便,约定成俗,我新建了一个HelloWorld文件夹。
? ? ?2.在HelloWorld文件夹新建src目录与pom.xml文件,名称请跟我一样,谢谢。
? ? ?3.然后在src目录下新建main与test文件夹,名称保持一致。
? ? ?4.在main与test文件夹下分别新建java文件夹,名称一致。
? ? ?5.接下来的文件夹可以算是package的名,我这为了方便在src与test的java目录下分别新建了maven/demo两个文件夹,现在你的文件夹应该是这样的:
?
? ? ?
? ? ?6.有点烦哈,在src\main\java\maven\demo目录下新建一个HelloMM程序,代码如下:
package maven.demo;public class HelloMM{public String SayHi(){return "HelloMM";}public static void main(String[] args){System.out.print(new HelloMM().SayHi());}}? ? 7.,在src\test\java\maven\demo目录下新建一个TestApp测试程序,代码如下:
package maven.demo;import org.junit.Test;import org.junit.BeforeClass;import org.junit.Before;import static org.junit.Assert.assertEquals;public class TestApp{HelloMM hi = null;@BeforeClasspublic static void setUp(){System.out.println("BeforeClass!");}@Beforepublic void setBefore(){hi = new HelloMM(); System.out.println("Before!");}@Testpublic void isTest(){assertEquals("HelloMM",hi.SayHi());}}? ?8.==,好像忘记啥东西了,怎么可以少了一个最重要的pom.xml呢,最后我们写写项目构建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>maven.demo</groupId><!-- 坐标ID唯一的 --><artifactId>maven-demo</artifactId><!-- 构件ID --><packaging>jar</packaging><!-- 打包形式 --><version>1.0-snapshot</version><!-- 内部开发版本 --><url>http://maven.apache.org/</url><!-- jar包的来源 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 字符编码 --></properties><dependencies><!-- 依赖包 --><dependency><groupId>junit</groupId><!-- 坐标ID --><artifactId>junit</artifactId><scope>compile</scope><!-- 作用域 --><version>4.8.2</version><!-- 版本号 --></dependency></dependencies></project>
? ?pom.xml用于定义项目的行为,属性,依赖等等,所有配置都可完成。
? ?至此我们的项目搭建算是完成,有点繁碎呢,后面有更简单的做法,暂且不表。
?
三、编译项目? ? ?鸡冻人心的时刻到了,打开你的dos黑窗口,cd到HelloWorld文件夹,然后键入mvn compile,不出意外会出现下图:
?

?
??可以看到maven会从网站下载所需的包,这里下载的是junit测试包,大家可以到本地仓库文件夹看到下载的jar包,运行次命令后你会看到HelloWorld文件夹下多了一个target文件夹,里面则是编译后的文件,如下图所示:
?
? ?
? 同样可以使用mvn test-compile命令对测试源代码进行编译,大家可以试试,接下来我们运行mvn test命令,对项目进行编译测试,会看到如下图所示:

?现在把TestApp测试类改下,让它测试不通过,代码如下:
?
@Testpublic void isTest(){assertEquals("Hello",hi.SayHi());}?然后我们再次运行mvn test 命令,则会看到下图所示:
? ?
断言失败,单元测试失败。
?
四、打包项目? ? ? 1.运行mvn clean package 命令,clean表示清除以前的编译文件(删除targer文件夹),package表示将整个项目打包,我们运行试试:
?

结果得到了4个文件夹和1个jar包,其中包括站点报告、打包文件等。
? ? ? 2.然后我们进入cd到target目录,运行java -cp maven-demo-1.0-snapshot.jar maven.demo.HelloMM
命令,这个时候会执行main方法,也就是输出"HelloMM"字符串,如下图所示:
?
? ? ?3.做到这步还不行,通过java -jar命令执行生成的jar包会出现错误,如下图所示:
?

一个可执行的jar包必须指定一个main类,现在我们去实现它,找到pom.xml文件,增加如下节点:
?
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>1.2.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>maven.demo.HelloMM</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>
? ? ? 4.再次运行mvn clean package 命令,记得要在pom.xml的目录下,执行命令后在target目录生成了两个jar包
??maven-demo-1.0-snapshot.jar:打包文件,其中包括依赖包(junit);
??original-maven-demo-1.0-snapshot.jar:打包文件的原始版本;
现在到target目录执行java -jar maven-demo-1.0-snapshot.jar命令,控制台输出"HelloMM",成功了。
?

? ?5.接下来把项目导入到eclipse里,mvn eclipse:eclipse执行它,打开心爱的eclipse,import it!
?

? ?6.至于在eclipse安装maven插件,运行命令等操作,有机会再讲。
? ?7.最后说说简单创建项目命令。
普通的Java项目:?
??mvn archetype:create?? -DgroupId=com.yourcompany? -DartifactId=myproject? -DarchetypeArtifactId=maven-archetype-quickstart?
普通的Web项目:?
??? mvn archetype:create? -DgroupId=com.yourcompany -DartifactId=myproject? -DarchetypeArtifactId=maven-archetype-webapp?
还有一个是mvn archetype:generate命令,一步一步创建maven项目,可以去试试。
其实都是大同小异,无非是指定groupid,dartifactid之类的。
五、结束语? ? 总算写完了,貌似图贴的很多,如有错误,请大声指正。
1 楼 daixu2008 2011-12-30 嗯。幸苦了 2 楼 lg985 2011-12-30 图片看不到。愣徘徊