用maven构建java project

来源:互联网 发布:我的世界枪械js设置 编辑:程序博客网 时间:2024/05/22 12:11

为什么要用maven

maven是一个用于项目代码管理的开源产品,主页http://maven.apache.org。在项目中使用maven的好处有:统一项目成员的开发环境,统一管理项目类库,就不必每人都手动添加项目开发需要的包了,设置项目间的继承、依赖关系,编译、打包、发布项目,生成项目信息站点,利用插件自动执行junit,checkstyle,pmd测试和检查,并生成报告在项目信息站点上。

maven的工作原理

如果以上种种都不够吸引你在项目中使用maven的话,那么可以就此打住,不必往下看了。下面要说的是maven的工作原理:maven主要通过每个项目制定的pom.xml文件来管理项目的各种信息和特性。pom是project obejct model的缩写,maven把每个项目看成一个对象,通过pom.xml来定义这个对象的属性。每个项目都有自己的pom.xml,这样项目间的继承和依赖在pom.xml就表现为对象的继承和依赖,这点特别适合大型项目的部署。maven还内置了一个super pom,所有的pom都继承自这个super pom,这样即使项目的pom.xml里看起来没有定义什么特性,这个项目也能执行基本的build逻辑。而当项目定义了自己的build逻辑时,就会自动覆盖父类pom的相应逻辑。

pom构造

一个基本的pom.xml文件模版如下:

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/maven-v4_0_0.xsd">

4.0.0

com.cdc

http://maven.apache.org/ref/current/maven-model/maven.html。

maven在项目中的使用

对pom model有了一定了解之后,我们就可以开始maven开发项目管理之旅了。

首先要安装配置maven。maven安装配置的文章网络上一搜一大把 ,这里我就不赘述了,最重要的是把.m2变量指定到本地的repository目录上就可以了。

构建项目目录

安装好maven后,我们就可以用mvn archetype:create命令在workspace下创建一个项目目录。如要创建一个名为myapp的项目名,它有一个名为com.mycompany.app的包,则应在dos下进入workspace目录,运行 mvn archetype:create -dgroupid=com.mycompany.app -dartifactid=myapp ,这就生成了一个项目目录,有如下内容:

+src

+main

+java

+com

+mycompany

+app

+test

+java

+com

+mycompany

+app

pom.xml

如果觉得这个目录结构太简单了,不能满足项目需要,可以使用appfuse插件生成更有针对性地目录结构。下面是生成各种配置类型的目录结构所使用的maven命令(要求2.0.6以上版本):

配置类型

命令

jsf basic

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-basic-jsf -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

spring mvc basic

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-basic-spring -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

struts 2 basic

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-basic-struts -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

tapestry basic

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-basic-tapestry -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

jsf modular

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-modular-jsf -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

spring mvc modular

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-modular-spring -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

struts 2 modular

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-modular-struts -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

tapestry modular

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-modular-tapestry -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

core

(仅后端)

mvn archetype:create -darchetypegroupid=org.appfuse.archetypes -darchetypeartifactid=appfuse-core -dremoterepositories=http://static.appfuse.org/releases-darchetypeversion=2.0 -dgroupid=com.mycompany.app -dartifactid=myproject

当然,appfuse的妙用肯定不止这些,它的代码生成工具可以生成绝大部分我们需要的代码,如 dao 类,service 类,增删改查的 web 页面、配置文件等,有兴趣的同学可以自己研究一下。

修改pom文件

自动生成的pom文件肯定是有一些未明确的地方,这就需要我们手动修改了,指定项目的其他信息,build规则,依赖包信息和下载地址等等。

首先我们看看,pom.xml都还提供了哪些用于描述项目信息的元素:

http://www.ibiblio.org/maven2和ttp://maven-plugins.sourceforge.net。如果本地仓库上没有,maven就会连接到这样的远程仓库的相应目录进行下载。这样就需要指定远程仓库的地址了:

internal

maven repository switchboard

default

http://109.52.20.29/internal

central

maven plugin repository mirror

http://www.ibiblio.org/maven2

default

sourceforge

sourceforge plugin repository mirror

http://maven-plugins.sourceforge.net

default

项目常用的包在远程仓库上一般都有,但是公司内部的包要想通过远程仓库让开发人员下载的话,就需要建立一个内网的repository,也根据名字和版本号放上要用的包及其pom.xml文件。安装第三方包的命令是:

mvn install:install-file -dgroupid=javax.transaction -dartifactid=jta -dversion=1.0.1b -dpackaging=jar -dfile=jta.jar

其中dfile指定目前这个包的存放路径,这样就会自动根据groupid,artifactid和version在本地repository下构建路径和pom.xml。

如果内网的远程仓库jar包比较全的话,就把它放在repositories节点下的第一个,毕竟内网的下载速度是要快些的嘛。

添加工程属性

mvn archetype:create命令生成的项目目录还不能称之为工程,因为这个目录下还缺少.project文件。如果是用eclipse开发的话,就在工程目录下执行mvneclipse: eclipse。上一步我们修改好这个目录下的pom.xml后,maven就可以根据这个文件定义的dependencies来生成.classpath和 .project文件了。到此项目的构建就算完成了,开发人员就可以用这个环境进行开发了。

生成项目站点

用mvn site命令可以根据项目的信息生成项目站点,其中就包括了我们之前在pom.xml里设置的项目相关信息和reporting元素定义的测试和检查的报告。maven 提供的针对如 junit , checkstyle , pmd 等的插件,都能够方便的进行测试和检查并能直接生成报告。具体使用可以在http://maven.apache.org/plugins/index.html 找到。

org.apache.maven.plugins

maven-site-plugin

org.apache.maven.plugins

maven-project-info-reports-plugin

true

org.apache.maven.plugins

maven-checkstyle-plugin

config/sun_checks.xml

org.apache.maven.plugins

maven-pmd-plugin

其他mvn 命令

开发过程中,可能用到的其他mvn 命令有:

lvalidate : 检查 project 里setting 的信息是否可用。

lcompile : 编译源代码。

ltest : 用junit测试编译好的 source code 。

lpackage: 把编译好的源代码打包。

lintegration-test : 根据环境打包,并进行集成测试。

lverify : 检查package 正确执行与否,可否使用,packaging 条件是否齐全。

linstall : 把package打好的包发布到本地 repository 。这样别的项目就可以使用这个包了。

ldeploy : 把package打好的包发布到远程仓库。这样其他开发人员就可以下载这个包了。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击