使用Maven开发Java项目
来源:互联网 发布:中南大学网络教育答案 编辑:程序博客网 时间:2024/05/01 16:41
其实使用maven已经很久了,从早期的1.0.1到现在的2.0.6,其实对于一般项目开发,常用的也就是创建项目(Create)、构建(Build)、测试(Test)、发布(Release)。本文并不是关于maven如何使用的详细介绍,而只是在实际项目开发中的一些常用活动以及相关插件的使用总结,如果你对于maven尚不了解,可以先在官方网站[Maven'site]逛逛,如果你想进一步学习,可以到这里[Maven: The Definitive Guide]。这里所说的maven是指2.x版本,如果你正在使用的是1.x,请参考《Maven: A Developer's Notebook》。但是推荐使用2.0,至于详细的特性比较,可以参考[MAVEN Feature Comparisons]。
1) 创建项目
首先,你得为你的项目起一个响亮一点的名字,既能体现项目的意义,又非常好记。我比较喜欢用花和动物的名字来命名,也可以是某个地名或人名。这里假设为rose,火红的玫瑰。下面的命令,将会创建一个项目的代码框架。其中groupId和artifactId,可以根据实际需要来命名。mvn archetype:create /
-DarchetypeGroupId=org.apache.maven.archetypes /
-DgroupId=com.rainboyan.rose /
-DartifactId=rose
运行成功后,将会创建目录如下:
rose
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- rainboyan
| `-- rose
| `-- App.java
`-- test
`-- java
`-- com
`-- rainboyan
`-- rose
`-- AppTest.java
打开pom.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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.rainboyan.app</groupId> <artifactId>rose</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>rose</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
虽然还没开始写任何代码,但是别急,应该首先来检查一下是否可用。我们开始测试一下,键入mvn compile编译项目,mvn test运行测试,mvn package项目打包,如果不出意外的话,将会BUILD SUCCESSFUL。显然这还不是我们想要的,对于Web应用来说,我们需要打包成war或者ear。
2) 构建
添加build<build> <defaultGoal>package</defaultGoal> <finalName>${artifactId}-${version}</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> </build>
如果你使用的JDK是1.5以上版本,可以修改编译插件的设置。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
作为一个项目开发,依赖第三方库是少不了的,尤其是借助第三方开源软件,而这也正是maven强大的功能之一,就是依赖管理。你只需要设置所需第三方jar的名称和版本即可,maven会自动下载到本地,你也可以建立自己的仓库(rspository),这在小组开发中,是非常有必要的。此外,随着项目的进一步开发,依赖库可以很方便的升级,而不用像以前那样手动替换并且还提心吊胆。
下面就是添加依赖库:
<dependencies>
<!-- test framework -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
Maven有很多Respository站点:如ibiblio.org和sunsite.dk等。
3) 测试
项目建立起来后,就可以编码了,但是依照测试驱动开发的原则(TDD),我们应该先编写测试案例,接着运行测试,编写代码,再测试,再编码,直到完成一个小的迭代。使用maven来运行测试非常简单。一个mvn test就搞定。这样会运行所有的测试案例,如果你只想运行其中一个或几个类,你可以过滤要测试的类,除了配置外,简单一些就直接设置属性test。如下所示: <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/TestCircle.java</exclude>
<exclude>**/TestSquare.java</exclude>
</excludes>
</configuration>
</plugin>
直接-D设置需要测试的类名
mvn test -Dtest=UserTest
或者
mvn test -Dtest=User*
4) 版本控制
对于一个项目开发来说,没有一个版本控制工具,就像软件没有UNDO一样,尤其在一个团队中,没有版本控制,将会变得混乱不堪,每个成员变得畏首畏尾,小心翼翼。对于版本控制软件,你可以选择VSS、CVS、Subversion。目前大部分开源项目都已经从CVS迁移到Subersion了,从相应的工具和文档手册,都应有尽有,使用非常方便。我选择的是Subversion,自己搭建个Subversion服务器。有兴趣的可以参考我以前的文章。这里假定你已经安装了Subersion客户端。首先要配置pom.xml,说明代码存放的位置。[snvhost]应该是实际的svn主机地址。
<scm>
<connection>
scm:svn:http://[snvhost]/rose/trunk</connection>
<developerConnection>
scm:svn:http://[snvhost]/repos/rose/trunks</developerConnection>
<url>http://[snvhost]/rose/trunk</url>
</scm>
接着,进入工作目录,签出源代码。
svn co http://[snvhost]/rose/trunk rose
在实际工作中,你也可以使用一些IDE插件,如Subeclipse(eclipse的Subversion插件),或者TortoiseSVN(Subversion的客户端)。
maven提供了scm的插件来进行操作,目前该插件支持的版本控制工具有:
支持的SCM命令有:
常用的命令有,mvn scm:update和mvn scm:diff。
5) 报告
目前maven支持的reporting主要有changelog,changes,checkstyle,clover,doap,docck,javadoc,jxr,pmd,project-info-reports,surefire-report。其中常有的checkstyle,pmd是用来代码检查的(主要是静态检查),clover是用来生成代码测试覆盖率报告的。javadoc是生成doc文档。如果想生成报告,则需要添加相应的reporting配置。具体如下:<reporting>
<plugins>
<plugin>
<artifactId>maven-changes-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-jxr-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<links>
<link>http://java.sun.com/j2ee/1.5/docs/api</link>
</links>
</configuration>
</plugin>
</plugins>
</reporting>
你可以用站点命令来生成所有的报告,也可以只生成指定的报告。
mvn site
mvn checkstyle:checkstyle
6) 发布
项目开发到一定阶段,就需要发布某个版本,可以是source或者binary,也可以是docs,jars等。maven提供了assembly插件来完成这项工作。发布的文件格式支持zip,tar.gz,tar.bz2,jar,dir,war等等。1) binary发布,你需要在src/assemble目录下创建bin.xml配置文件,用来说明需要包含哪些文件。文件内容大致如下:
<assembly>
<id>bin</id>
<formats>
<format>tar.gz</format>
<format>tar.bz2</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<outputDirectory>${artifactId}-${version}</outputDirectory>
<includes>
<include>README*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
<include>CHANGLOG*</include>
</includes>
</fileSet>
<fileSet>
<outputDirectory>${artifactId}-${version}</outputDirectory>
<directory>target</directory>
<includes>
<include>*.war</include>
</includes>
</fileSet>
</fileSets>
</assembly>
2) source发布,用来发布源码。你同样需要在src/assemble目录下创建src.xml配置文件,文件内容大致如下:
<assembly>
<id>src</id>
<formats>
<format>tar.gz</format>
<format>tar.bz2</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<outputDirectory>${artifactId}</outputDirectory>
<directory>/</directory>
<excludes>
<exclude>**/target/**</exclude>
</excludes>
</fileSet>
</fileSets>
</assembly>
当然,在最后,你得告诉maven该插件的配置文件存放的位置,因此需要在pom.xml中这样写。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>${project.artifactId}-${project.version}</finalName>
<descriptors>
<descriptor>src/assemble/src.xml</descriptor>
<descriptor>src/assemble/bin.xml</descriptor>
</descriptors>
</configuration>
</plugin>
- 使用Maven开发Java项目
- 使用Eclipse基于Maven使用Java开发WordCount程序项目
- idea使用maven构建java和scala项目开发spark
- 项目开发之使用 maven
- java maven项目开发常识
- 使用maven生成java项目
- 使用Maven构建Java项目
- 使用Maven构建Java项目
- 使用Maven创建Java项目
- 使用maven构建java项目
- 使用Maven创建Java项目
- 使用Maven构建Java项目
- 使用Maven管理Java项目
- 使用Maven构建Java项目
- 使用 Maven 构建 Java 项目
- 使用Maven构建Java项目
- 使用Maven创建Java项目
- 使用Maven创建Java项目
- 委托与事件
- QString 转换成普通字符串打印
- Linux下架设VPN服务器[指南]
- 获取IP/计算机名
- 如何优化C语言代码(转)
- 使用Maven开发Java项目
- MyISAM比InnoDB快是误传
- DirectShow响应事件
- 推荐最近读的几本不错的书
- tabIndex的用途
- 电脑上打开chm文件时系统提示:不能打开文件:mk:@MSITStore:(文件路径)的解决方法!!
- Qt显示汉字方法
- 业务流转与表单的集成
- 传输层协议