Picses' sky

Picses' sky
posts - 43, comments - 29, trackbacks - 0, articles - 24

浅尝MAVEN[zz]

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插件里。


只有注册用户登录后才能发表评论。


网站导航: