一个java项目中最困难的地方就是如何着手启动它。在启动项目之前,我们必须配置好所有的逻辑关系。比如,java源代码应该放在何处?单元测试应该在何处进行?依赖的jar包应该如何放置?如何构建项目,如何形成文档,如何测试和部署项目?在这种情况下,开发人员不同的处理选择将会影响项目的余下部分。您的选择可能会使你陷入困境,也可能会在将来证明您是一位java架构大师。我们假定后者是我们奋斗的目标,接下来就进入我们的正题。
构建一个java项目可以使用很多工具,其中包括ant。ant作为一款具有革命性的工具,一直是众多开发者使用工具中的首选,它能使开发人员摆脱使用大量make命令的苦海。对于那些不太熟悉make命令的人来说,他们有充足的理由来表明使用命令并不是构建java项目的最好工具,因为它不具备平台独立性并且不易使用。ant的出现解决了以上的问题,它使用了一个平台独立的工具,该工具能够解析xml配置文件,即build.xml。虽然ant由于其诸多的优点而备受欢迎,但它同样有一些缺点。build.xml文件由于采用了极其简短的描述方式,使得开发人员需要预先学习它的语法。虽然学习曲线不是很陡峭,但java开发人员更应该把时间放在开发上面。
maven是新一代的生力军,它的境遇正好和几年前的ant十分类似。maven1.0已经历了几年的时间,并且作为ant的替代品已被广大的开发人员所接收,但它并没有在很大程度使开发人员从ant的build.xml文件中解脱出来。maven1.0速度慢并且笨拙,使用起来的困难度并不亚于使用ant的项目。事实上,它的核心是基于ant实现的。在经过了几乎彻底的重写后,maven2.0诞生了。
版权声明:任何获得matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:chris hardin;mycj(作者的blog:http://blog.matrix.org.cn/page/mycj)
原文:http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html
matrix:http://www.matrix.org.cn/resource/article/44/44475_maven2.html
关键字:maven2
maven2.0的优点
maven2.0有许多很好功能,这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个java项目,并且想使该项目快速地开展下去,maven2.0能够在几分钟内达到您的要求。以下是maven2.0的一些优点:
--标准的项目布局和项目结构生成器
--标准的依赖管理机制
--多项目支持
--在开发者需要的时候及时地下载新的插件和功能部件
--生成最新项目信息的网站
--集成了源代码控制软件:cvs和subversion
以上列表展示的只是maven2.0特点中的一小部分。但这足以使maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道maven是个什么东西了,接下来让我们看看如何使用它。
入门
我们要做的第一件事情就是设置目录结构,但这并不需要让我们手动设置,maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的maven 2.0,您应该将maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn -version来测试您的安装。
既然已经安装上了工具,让我们看看创建一个简单的java项目的例子。maven使用原型来决定目录结构是如何展现的。maven自带了几个内建的原型,您也可以自定义原型。
mvn archetype:create -dgroupid=com.oreilly -dartifactid=my-app
您看,这就生成了我们的项目布局。
my-app
----src
----main
----java
----com
----oreilly
----test
----java
----com
----oreilly
对,就这么简单。这种目录结构可以通过创建一个新的原型来覆写,但并不推荐这么做,因为maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代码树,一个是java应用程序的源代码,另一个是单元测试代码。同时您也许会注意到,当第一次运行maven的时候,它会进行一些下载工作。当您开始调用工具时,maven会根据您使用的插件来更新自身的一些所需功能。maven默认会从ibiblio存储库中得到更新。您可以在maven安装目录下的conf目录中,或者项目自身中修改maven远程存储库的选择。
您会发现maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文件包含了一组指令,这些指令告诉maven如何构建项目和包含哪些其它的特殊指令(pom是“项目对象模型”的缩写)。在默认的情况下,maven包含了junit的依赖以此来鼓励单元测试。
<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.oreilly</groupid>
<artifactid>my-app</artifactid>
<packaging>jar</packaging>
<version>1.0-snapshot</version>
<name>maven quick start archetype</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>
<build>
<finalname>promotec</finalname>
</build>
<dependency>
<groupid>quartz</groupid>
<artifactid>quartz</artifactid>
<version>1.5.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupid>javax.activation</groupid>
<artifactid>activation</artifactid>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<repositories>
<repository>
<id>ibiblio</id>
<name>ibiblio</name>
<url>http://www.ibiblio.org/maven/</url>
</repository>
<repository>
<id>pl.netmirror</id>
<name>pl.net mirror</name>
<url>http://public.pl.netmirror.com/pub/maven/</url>
</repository>
</repositories>
<project>
<modelversion>4.0.0</modelversion>
<groupid>com.oreilly</groupid>
<version>1.0-snapshot</version>
<artifactid>my-app</artifactid>
<packaging>pom</packaging>
<modules>
<module>common</module>
<module>utilities</module>
<module>application</module>
<module>webapplication</module>
</modules>
</project>
<dependencies>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>common</artifactid>
<version>1.0-snapshot</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>common</artifactid>
<version>1.0-snapshot</version>
</dependency>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>utilities</artifactid>
<version>1.0-snapshot</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>common</artifactid>
<version>1.0-snapshot</version>
</dependency>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>utilities</artifactid>
<version>1.0-snapshot</version>
</dependency>
<dependency>
<groupid>com.oreilly</groupid>
<artifactid>application</artifactid>
<version>1.0-snapshot</version>
</dependency>
</dependencies>
<parent>
<groupid>com.oreilly</groupid>
<artifactid>my-app</artifactid>
<version>1.0-snapshot</version>
</parent>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
<reporting>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-project-info-reports-plugin</artifactid>
</plugin>
</plugins>
</reporting>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器