- 浏览: 3502872 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
本文主要阐述 Maven2 的新特性,这些新特性可以大大地缩短了开发管理中的工作量,使得开发人员将精力集中在实际的业务问题上。
Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,当时从 Ant 移情 Maven
的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种
Report。这种方式为项目的构建带来了极大的方便,尤其是 Report 的。试想对于产生的
Junit-Report、JavaDoc、CheckStyle、PMD 等报告,如果没有一个统一的入口,每次切换目录是多么令人厌烦的事情!
Maven 无疑是相当成功的,这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven
取得成功的原因很简单:在简化构建脚本的同时,功能并没有缩水,反而有所增强;提供汇集项目信息的工具,并以相当友好的方式呈现;丰富的插件简化了工作。
如此有力的工具出现,自然是争相使用。
新特性
如今 Maven2 已经推出,Maven 的官方网站称,Maven2 相对于 Maven1 是一个相当大的转变,甚至不惜牺牲兼容性来达到这一目的。(为了 Maven1 的用户着想,Maven1 仍在继续他的使命。)如此大的变动到底换来了什么样的结果?
1. 更快、更简单
比起 Maven1
那不急不慢的运行速度,Maven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色(当然,下载不算)。除此之外,"简化工作,使用业界公认的最佳实
践"也是是 Maven2 的另一大主题,其他的新特性无处不在体现 Maven2 为简化工作而做出的努力。
2. 更少的配置文件
Maven1 和 Maven2 主要配置文件的对比:
Maven1:project.xml、maven.xml、project.properties和build.properties。
Maven2:pom.xml和settings.xml。
POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升级为4。对于项目,一般只需要pom.xml就行了。
在Maven2中不需要也不提倡使用maven.xml,原因如下:
plugin的易用性的增强。
散布于maven.xml中的内容难以在不同项目间共享,也不利于维护。在Maven2中建议使用自定义的plugin来封装这些内容。
如果仍期望能够使用类似maven.xml的功能,如<preGoal>,请参考Inserting non-standard build steps using preGoals and postGoals。
在Maven2中,配置使用settings.xml,它取代了原有的project.properties和build.properties。配置在Maven2中存在两种级别:
用户级,针对操作系统登录用户而言。一般在$home/.m2/,对于windows用户,就是目录:C:\Documents and Settings\用户名\.m2\settings.xml。
全局级:一般在%M2_HOME%/conf/settings.xml,M2_HOME是Maven2的根目录环境变量名。
在settings.xml中可以配置,如本地Repository、proxy等等,关于settings.xml的结构可以从Maven的官方网站上获取。
3. Plugin语言更换
在Maven2中,编写plugin的语言由jelly变更为Java和BeanShell。Java在速度上更有优势,而且开发人员的熟悉程度更高。对于其他的流行脚本,如groovy,Maven的官方网站的意见是,等待其更成熟时再考虑
。
4. 提供预定义的目录模板
好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
项目根/ pom.xml src/ main/ 项目主体目录 java 源代码目录 resources 所需 资源目录 fileters 资源过滤文件目录 assembly config 配置文件目录 test/ main/ java resources fileters site 与site相关的资源文件 target/ 输出目录 classes 项目主题输出目录 test-classes 测试输出目录 site 项木site输出目录 |
使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例:
src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
这些动作在 Maven1 中,是需要在 maven.xml
中使用<preGoal>或<postGoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src和
test都使用resources,方便构建和测试,这种方式本就已是前人的经验。通过使用Maven2,使这个经验在开发团队中得到普及。
创建标准目录模板,可以通过如下命令:
1 |
mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons |
groupId和artifactId的含义与Maven1中的含义一样,参数artifactId的值会作为项目根目录的名字。除了建立相应的目录之外,Maven2还会创建缺省的pom.xml。
Maven2也考虑到:不同类型的项目需要拥有不同的目录结构。如创建web项目,可以使用命令:
1 2 3 4 |
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp |
5. 生命周期的引入
在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:
validate,验证工程是否正确,所有需要的资源是否可用。
compile,编译项目的源代码。
test-compile,编译项目测试代码。
test,使用已编译的测试代码,测试已编译的源代码。
package,已发布的格式,如jar,将已编译的源代码打包。
integration-test,在集成测试可以运行的环境中处理和发布包。
verify,运行任何检查,验证包是否有效且达到质量标准。
install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
如果要执行项目编译,那么直接输入:mvn
compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行
mvn test时,会先运行mvn test-compile,然后才是mvn test。
6. 新增Dependency Scope
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
compile,缺省值,适用于所有阶段,会随着项目一起发布。
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
<scope>的使用举例:
1 2 3 4 5 6 7 8 |
<dependency> <groupId>hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> |
7. 传递依赖,简化依赖管理
在Maven1中,需要把依赖所需要的包也一并列出。这对于使用类似如Hibernate的用户来说所操的心太多了,而且也不方便。在Maven2中实现
了传递依赖,如此对于Hibernate所依赖的包,Maven2会自动下载,开发人员只需关心Hibernate即可。
注意:只有得到Maven支持的依赖,通常是plugin形式出现,才能获得这个特性。而且对于一些老的plugin,可能由于时间的关系不支持传递依
赖。如至少在Maven 2.0.1中,对于Hibernate 2.1.2,仍然需要显式列出Hibernate 2.1.2所依赖的包。
发表评论
-
maven常见问题问答
2012-05-05 11:34 89411.前言 Maven,发音是[`meivin ... -
SWOT分析模型
2011-10-20 08:50 2323SWOT分析模型(SWOT Analysis) SWO ... -
时间盒策略--让你必胜的15种秘诀
2011-04-26 23:34 2330简单地说,时间盒是我 ... -
猎人和猎狗的故事
2011-03-07 09:28 2370有一天,猎人带着一 ... -
项目进度计划管理中五种时间
2011-03-03 00:15 2378在大多数复杂的建设项目进度计划管理中,一般都记录五种时间 ... -
PSP个人软件过程
2011-02-05 00:57 4291个人软件过程(Personal Software ... -
eclipse和UML工具EA的连接方法
2010-06-24 19:15 7429选择了好久UML工具,在rose、eclipseUML、EA等 ... -
领导者需要警惕的六大日常决策陷阱
2010-06-09 14:39 2099决策是每个经理人最重 ... -
净室软件工程及发展
2010-05-16 22:23 1757净室软件工程及发展 本文转载自软件工程专 ... -
用“看板图”实现敏捷项目的可视化
2009-10-03 23:10 2636社区 Agile 主题 协 ... -
Mylyn 2.0,集成任务和自动上下文管理
2009-09-26 18:51 3177虽然软件系统、框架和工具可以无限制地发展,但开发人员实际处 ... -
如何组织一个高效的开发团队?
2009-09-26 18:28 1777引言 俗语云:“ ... -
采用 XP 方法使软件项目获得更大成功
2009-09-26 18:08 1621使用面向对象编程变得 ... -
User Story 概览—承上启下的重要一环
2009-09-26 18:06 2683软件开发是一个从捕获客户需求到编码实现的过程。在我们传统的印象 ... -
顿悟测试驱动开发
2009-09-26 15:18 1620很早就听闻过测试驱动 ... -
User Story 在敏捷开发过程中的应用
2009-09-26 15:11 30891 ... -
用JIRA、CVS、XPlanner、WIKI来进行项目管理
2009-09-26 04:35 2193从版本管理的角度来 ... -
项目管理软件与IT项目经理人
2009-09-26 04:33 1965本文综合介绍了项目管理软件的特征,CA-SuperProjec ... -
信息系统建设项目风险评估方法
2009-02-22 20:52 2005评估这个词并不陌 ... -
svn备份策略
2009-01-12 13:56 9405(本文例子基于 ...
相关推荐
总的来说,Apache Maven 3.9.0是一个功能强大的Java项目构建工具,它的标准化和自动化特性极大地提高了开发效率。通过理解Maven的工作原理、配置POM.xml文件以及熟练使用Maven命令,开发者可以更高效地管理项目和...
例如,早期的版本可能只支持Maven 2,而较新的版本则可能支持Maven 3及更高。选择哪个版本取决于你的Maven环境以及对新特性的需求。通常,推荐使用与当前Maven版本兼容的最新稳定版。 5. 使用注意事项: - 在生产...
对于大型项目,Maven的模块化特性尤为有用,一个项目可以被划分为多个子模块,每个子模块都有自己的pom.xml文件,而顶层的pom.xml作为聚合模块,管理所有子模块。这种结构便于管理复杂的依赖关系和构建顺序。 在...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java应用...其绿色版的特性使得在各种环境下快速使用Maven成为可能,大大提升了开发的便捷性。同时,通过合理的配置和插件利用,可以满足各种复杂项目的需求。
Maven 3.6.0是该工具的一个稳定版本,提供了许多改进和新特性。 在Maven 3.6.0中,用户可以体验到更快的构建速度和更高的稳定性。这个版本优化了内部算法,减少了不必要的网络请求,从而提升了整体性能。此外,它还...
这个版本可能包括性能优化、新的特性、对新Java版本的支持以及对其他构建工具和库的兼容性增强。通常,每个新版本都会在错误修复、用户体验和功能扩展上有所提升。 在解压"apache-maven-3.9.0-bin.tar.gz"后,你会...
Maven 3.5.4引入了一个重要的特性,即支持JAR签名验证,这有助于确保下载的库未被篡改。 2. **Maven 3.3.9**: Maven 3.3.9是在2016年发布的,也是Maven 3.x系列的一个重要版本。它在前一版本的基础上优化了性能,...
同时,Maven的继承和聚合特性使得大型项目可以有效地组织和管理多个子模块。 总结起来,"apache-maven-3.5.4-bin"压缩包包含的是一个完整的Maven 3.5.4发行版,它提供了一整套工具和框架,帮助Java开发者实现项目...
2. **依赖管理**:Maven能够自动管理项目所依赖的库,只需在POM文件中声明依赖,Maven就会自动下载并管理这些依赖,避免了手动管理jar文件的麻烦。 3. **生命周期与插件**:Maven有一套预定义的生命周期,如clean、...
这是Maven的一个稳定版本,发布于2019年,提供了许多新特性和性能改进。解压后,你会看到以下主要文件和目录: 1. **bin** 目录:包含了Maven的可执行脚本,如`mvn`和`mvn.cmd`,分别用于Unix/Linux和Windows系统。...
**Maven 3.8.5 的新特性与改进** 1. **性能提升**: Maven 3.8.5 对缓存机制进行了优化,提升了依赖解析速度,使得构建过程更快。 2. **错误修复**: 该版本修复了之前版本中的一些已知问题,提高了稳定性。 3. **...
这些改进可能包括性能优化、错误修复、新特性的添加等,以提高开发者的生产力。对于Java开发者而言,掌握Maven的使用是必不可少的技能,因为它可以帮助我们构建出更加规范、易于维护的项目,同时减轻项目管理的负担...
Maven 3.5.3 版本的更新可能包括性能优化、bug修复和新特性的添加。具体更新内容可以通过官方发布文档查看。对于开发者来说,升级到最新稳定版本可以确保利用到最新的改进和增强,同时减少已知问题的影响。 在实际...
9. **聚合与继承**:Maven 的聚合(aggregation)特性允许在一个项目中包含多个模块,而继承(inheritance)则允许子项目共享父项目的配置和依赖。 10. **版本控制与发布**:Maven 可以与版本控制系统如 Git 集成,...
3.5.3是Maven的一个稳定版本,而3.6.0则带来了更多的改进和新特性。这两个版本都适用于Windows和Linux操作系统,满足了不同用户平台的需求。 在Windows环境下,通常使用`.zip`文件,可以直接解压后运行;而在Linux...
2. **动态部署**:在开发阶段,Maven Jetty Plugin能够自动检测源代码的改动,并自动重新加载,使得开发过程更加流畅。 3. **配置灵活性**:Maven插件的特性使得配置Jetty变得简单。可以通过修改POM.xml文件中的...
10. **Maven Archetypes**:Maven还提供了一系列的archetypes,即模板项目,开发者可以根据需要选择一个archetype快速创建一个新的Maven项目。 通过了解和掌握这些知识点,开发人员能够高效地使用Apache Maven ...
Apache Maven 3.8.5 版本可能包含了性能优化、新的特性、对旧版本问题的修复以及对Java新版本的支持。具体更新内容可以在Maven的官方发布日志中查看。升级到最新版本通常可以获取更好的稳定性和兼容性。 在实际使用...
标签“apache-maven-3.0”提示我们这与Maven 3.x系列有关,这是一个重要的版本,因为它引入了许多改进和新特性,如更高效的依赖管理、更好的插件管理和支持新的Java版本。 压缩包子文件的文件名称列表中,有两个...
总之,Apache Maven 3.8.4是Java开发的重要工具,它的标准化工作流、自动化特性以及强大的依赖管理能力,使得开发者可以更专注于代码编写,而非构建过程。通过理解和利用Maven的这些功能,可以大大提高开发效率和...