Posted on 2007-07-20 22:27
Matthew Chen 阅读(344)
评论(0) 编辑 收藏 所属分类:
Build Project
浅尝MAVEN- -
最近老大要求我们把一个项目从ANT移植到maven,我就把我学习的过程以及把遇到的问题简单的叙述一下。(由于本人也是刚用MAVEN,很多东西做的不好)。
一,安装及简单配置
1.我用的是1.1beta1(版本的不同可能会导致一些问题)。
下载地址:http://maven.apache.org/start/download.html
2.环境变量
加MAVEN_HOME,并将%MAVEN_HOME%\bin加入PATH变量中
3.检查是否安装成功
只要在命令提示行中打入:maven
-v。如出现版本信息则说明安装正确。
4.配置local repository和remote repository
为了让所有的工程共享这个配置,可以在你的USER_HOME(即documents and
settings\用户名\)下建立一个build.properties文件。
maven.repo.local=D:/Maven
1.0.2/local/repository
maven.repo.remote=http://192.168.82.217/repo(可选)
在这里我的remote
repo是自己建的,默认的是ibiblio.org,关于remote.repo的其他站点可以参照网上其他blog。
如果你需要代理则要加上:
maven.proxy.host=
maven.proxy.port=
maven.proxy.username=
maven.proxy.password=
假如使用以上方法仍不能连接,那只有自己建了。(最近公司换域,就是用代理都上不去-_-#!)
建remote.repo很容易,只需要参照http://www.ibiblio.org/maven/上的目录结构,建立相应的站点。只不过包要自己去 http://www.ibiblio.org/maven/上手动下载。哎~
真是惨啊。
二,maven的简单运用
用maven -h 可以查看一些简单的命令,用maven
-g查看现有的插件及Goal(类似ant中的target)。
1.用maven genapp 创建一个application (插件信息包括goals和properties可以查看http://maven.apache.org/)
会在命令行的当前目录中建立。
maven
genapp
接下来会让你选择一个模版(插件信息里有) [default]
指定一个project id(似乎在生成的文档中用到)
[test]
指定一个name [test]
接着是指定package [maven.ex]
project.xml对该工程作了详细描述
请参照:http://www.zahui.com/html/6/36570.htm
2.用java:compile编译刚刚建立的工程
可以看到多了一个target目录,用于存放编译后的class文件和其他产生物。
3.test:test
由于刚刚的工程存在测试类,所以可用这个goal来进行测试。 在target目录又多了一个test-classes和一个test-reports,相信一看名字就明白了。
4.dist:build
会自动完成一系列的任务,其中有任务会在target目录生成很详细的文档,target\projectname-1.0\bin\projectname-1.0\下可以找到完整的html文档。
5.eclipse
使用该Goal可以生成一个eclipse工程,直接在eclipse中导入就可以了。其中classpath是根据project.xml中定义的dependency,需要在eclipse:java-build
path -classpath variable中加一个MAVEN_REPO的变量,指向你的local repo.
三,自定义goal
由于maven完全支持ant语法,对于ant的用户将更为熟悉。
要自定义goal,需要在工程目录下建一个maven.xml文件。
比如:
<goal name="project:deploy">
<copy
todir="${tomcat.webapps}/app">
<fileset
dir="${webroot}"/>
</copy>
</goal>
只不过target变成了goal而已
preGoal:在指定的goal之前执行相应的goal
比如:
<preGoal
name="goal1">可以是自定义的也可以是插件自带的
<attainGoal
name="goal2"/>
……
<attainGoal
name="……"/>
</preGoal>
即为在执行goal1之前,执行goal2
postGoal:在指定的goal之后...
四,使用maven的scm插件,连接cvs服务器
在project.xml中的 节点指定了cvsroot,cvsroot的格式是固定的,如果服务器用低版本的cvsnt,建立的cvsroot是有绝对路径的,比如:
scm:cvs:pserver:user:123456@192.168.82.217:E:/CVS/app
会被认为是不正确的。而且密码也不在里面给出(该插件似乎有username,password的属性,可在properties文件中给出,不过我尝试了没用,或许我用错了,也可能因为是beta版,在1.0.2的版本中是没有这个属性的)。
高版本的cvsnt才有虚拟路径,在maven中这样的路径才被认为是正确的:
scm:cvs:pserver:user@192.168.82.217:/cvs:app
这样要checkout的话必须先得登陆cvs。
这个插件在开发中一般是不会使用到的,由于我们要用cruisecontrol+maven实现daily
build所以才会用到。 如果你需要使用这个插件,你会发现你在用checkout-project的时候,还会遇到一些问题。
五,在eclipse中使用mevenide插件。
通过eclipse的help->software updates
->find and install->search for new features->new remote site
加入插件地址:http://mevenide.codehaus.org/release/eclipse/update/site.xml
选择需要的版本下载,重启工作台后即可以使用了,使用和配置比较简单。
不过可能会遇到找不到org.apache.xerces.jaxp.SAXParserFactoryImpl的问题,是因为在MAVEN_HOME\lib下缺少一个目录,下载一个1.0.2的版本就知道缺少什么文件了。不直接用1.0.2的原因是因为1.0.2在test:test的时候可能会发生有些class找不到的情况,解决的方法没有前者的快些。
还有个问题,上次有人问我怎样一下子把project.xml中dependency的jar加到eclipse的classpath中,想到elipse的maven
workshop插件,但使用起来也不是很好,在用overwrite classpath with POM时出错,也得用add dependency to
classpath(此方法根据配置中的local
repo,让你选择所需的jar包和version,在向project.xml中添加dependency时有用)一个一个加。其实可以用刚刚提到的maven
eclipse来重新生成eclipse工程,它会把project.xml中的dependency自动加到eclipse插件里。