`
angelbill3
  • 浏览: 255597 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Maven技术书之《Maven实战》阅读整理

 
阅读更多
Maven是一个实用且优秀的构建工具,我之于Maven只能算入门,通过阅读许晓斌的《Maven实战》让我对Maven有了整理的认识以及更深入的了解。

本文是阅读笔记,包括列出了重要的资源链接。本文没有太多的实际内容,只是很宽泛的记录了关于Maven的知识库。

-------------------------------------------------------------------------
以下是我本人的书评
书是前几年就买了的,但是跟很多人一样,对于maven的学习,可能都是直接网上查下,怎么download,然后下载eclipse插件m2e,快速上手。对于Maven并没有形成系统的知识库。本书的内容涵盖入门篇、进阶篇以及高级篇,比如hello world的例子、maven插件编写、archetype编写等等。总之很全面。同时也介绍了很多maven的优秀插件。

特超所值的一本书,比起在网上搜集maven入门的资料(博客),倒不如花一天时间看《Maven实战》来学习Maven这个Java世界中的实用工具!

-------------------------------------------------------------------------

Apache Maven主页: https://maven.apache.org

书目录列表:
1. Maven简介
2. Maven的安装和配置
3. Maven使用入门
4. 背景案例
5. 坐标和依赖(Coordinate and Dependency)
6. 仓库(Repository)
7. 生命周期和插件(lifecycle and plugin)
8. 聚合与继承(aggregate and inherit)
9. 使用Nexus创建私服
10. 使用Maven进行测试
11. 使用Hudson进行持续集成
12. 使用Maven构建Web应用
13. 版本管理
14. 灵活的构建
15. 生成项目站点(site生命周期介绍)
16. m2eclipse(eclipse的插件)
17. 编写Maven插件
18. Archetype
-------------------------------------------------------------------------


1-4章为基本知识,以及利用“Hello world”入门(结合IDE)。

POM.xml,(POM:project Object Model)
settings.xml:用户目录下的:~/.m2/settings.xml

-------------------------------------------------------------------------
5-8章算是进阶章,介绍了重要的概念:坐标、依赖、仓库、生命周期、插件、聚合及继承。

构成唯一坐标的元素: groupId、artifactId、version、packaging、classifier

第5章: 依赖相关:
dependencies: dependency: groupId, artifactId, version, type, scope, optional, exclusions.
其中:
scope配置了目标依赖jar与项目classpath的关系。见下表:
Scopecompilertestruntimeexample
compilerYYY
test--Y--JUnit
providedYY--servlet-api
runtime--YYJDBC related jars
systemYY--需要指定属性systemPath


optional: if true,依赖不会被传递,只会对当前项目有效。默认false。
exclusions: 排除特定的依赖。

附加一个properties: 定义全局变量

Useful mvn command:
> mvn dependency: list
> mvn dependency: tree
> mvn dependency: analyze

第6章: 仓库相关:
配置repositories: id, name, url, releases, snapshots
部置至远程仓库方法
介绍了镜像mirrors: id, name, url, mirrorOf

【重要】仓库搜索服务:
1. Sonatype Nexus: http://repository.sonatype.org


2. Jarvana: http://www.jarvana.com/jarvana
3. MVNbrower: http://www.mvnbroser.com
4. MVNrepository: http://mvnrepository.com


第7章: 生命周期和插件
独立的生命周期: clean、default(核心)、site

每个生命周期过都包含了好多个阶段(phase)
具体戳: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Maven的核心仅仅定义了抽象的生命周期,具体的任务是交由插件完成的,插件以独立的构件形式存在。

plugin: 插件绑定、自定义绑定等。
在线插件信息: http://maven.apache.org/plugins/index.html

插件仓库

第8章: 聚合和继承
packaging = pom

聚合的核心配置: modules

继承:
parent: groupId, artifactId, version, relativePath
可继承的POM元素列表(几十个): groupId, version, dependencies... 等。

在父pom中使用dependencyManagement声明依赖的版本(version),起到统一管理version的作用,从而降低依赖冲突。

scope = import,导入目标pom并合并到当前dependencyManagement中。

插件管理元素: pluginManagement

  • 聚合: 目的是为了方便快速构建项目。
  • 继承: 目的是为了消除重复配置。


Maven的核心设计理念: 约定优于配置(conversion over configuration)。

反应堆(reactor): 指所有模块组成的一个构建结构。
构建顺序: 模块间的依赖关系是有向非循环的。

操作反应堆的命令行: -am, -amd -also-make-dependents, -pl, --projects <arg>, -rf -resume-from <arg>

-------------------------------------------------------------------------

第9章是关于创建私服的,当前市场上主要有三种管理私服的工具:
  • Apache - Archiva
  • JFrog - Artifactory
  • Sonatype - Nexus

Nexus ['neksəs],是连接的意思。下载页面: http://nexus.sonatype.org/downloads/

安装方式(Nexus是java web app):
  • Bundle方式安装Nexus
  • WAR方式安装Nexus

Login: admin/admin123

Type:
  • Hosted Repository(宿主仓库): Id, Name
  • Proxy Repository(代理仓库): Remote Storage Location
  • Repository Group(仓库组)

提供搜索Maven中央库的功能。

配置Maven: setting.xml: 定义<profile>, 激活<activeProfile>
创建一个匹配任何仓库的镜像: 使Maven下所有的下载都通过Nexus:mirrorOf = *

部置构件至Nexus: Artifact upload功能。

权限管理: admin, deployment, anonymous

更高级的内容:
  • 为项目分配独立的仓库
  • 调度任务


-------------------------------------------------------------------------

第10章后,我称之为高级篇~ 作者写的满满的都是干货。

10. 使用Maven进行测试
本章主要围绕以下插件(plugin)讲解:
  • maven-surefire-plugin(内置插件)
  • cobertura-maven-plugin(测试覆盖率插件)
  • maven-jar-plugin(将test代码打包)


Maven的重要职责之一就是自动运行单元测试,它通过maven-surefire-plugin与主流的单元测试框架JUnit3、JUnit4以及TestNG集成。(两大主流的单元测试框架: JUnit http://www.junit.org/和TestNG(Test Next Generation) http://testng.org/

介绍测试运行器(Test Runner): maven-surefire-plugin
surefire: sure-fire,拆开来看就很好理解,是一定会发生,一定会成功的意思。

内置绑定: 生命周期阶段需要绑定到某个插件的目标才能完成真正的工作,test阶段(phase)正是与maven-surefile-plugin的test目标相绑定了。

目标类: src/test/java/下的: Test*.java, *Test.java, *TestCase.java

跳过测试:
>mvn package -DskipTests : 跳过运行测试代码
>mvm package -Dmaven.test.skip = true : 此参数同时控制了maven-compire-plugin和maven-surefire-plugin两个插件的行为,可以同时跳过测试代码的编译和运行。

同时,maven-compire-plugin能动态指定要运行的测试用例(使用command)和包含、排除测试用例(config pom)。

测试报告: 文本格式和XML格式(JUnit)。
测试覆盖率报告: 测试覆盖率是衡量项目代码质量的一个重要的参考指标。Cobertuna是一个优秀的开源测试覆盖率统计工具(http://cobertura.sourceforge.net/),maven通过插件cobertura-maven-plugin与之集成。

介绍与TestNG的集成: TestNG较JUnit的一大优势在于它支持测试组的概念。

重用测试代码: 优秀的程序员会像对待产品代码一样细心维护测试代码。在命令行运行mvn package的时候,maven会将项目的主代码及资源文件打包,默认的打包行为是不会包含测试代码的。
配置插件maven-jar-plugin将两个目标(goal)即jar和test-jar绑定。


11. 使用Hudson进行持续集成

Subversion是是当前最流行的版本控制工具(其它的还有CVS, Git, Mercurial等),而当前优秀的持续集成工具有很多,如开源的Husson、CruiseControl,商业的Bamboo、Teamcity等。目前最流行的开源持续集成工具正是Hudson。

持续集成流程如下图所示:


介绍Hudson
官网: http://hudson-ci.org/,下载hudson.war,具体使用Hudson不作展开。


12. 使用Maven构建Web应用

以上章节讨论的打包方式为JAR,本章开始介绍使用Maven打包WAR。即: packaging = war

需要熟悉Maven构建出来的Web目录。

POM元素finalName: 用来标识项目生成的主构件的名称。

相关插件介绍:
使用jetty-maven-plugin进行测试: 配置该插件后,并运行(mvn jetty:run),jetty-maven-plugin会启动Jetty,并且默认监听本地的8080端口,并将当前项目部署到容器中,同时它还会根据用户配置扫描代码改动。

使用Cargo实现自动化部署: Cargo是一组帮助用户操作Web容器的工具,它能够帮助用户实现自动化部署,通过插件cargo-maven2-plugin提供与Maven的集成,Maven用户可以使用该插件将Web项目部署到Web容器中。同时,Cargo也可以部署应用至远程正在运行的Web容器中。

13. 版本管理
  • 版本管理(Version Management): 项目整体版本的演变过程管理,如1.0-SNAPSHOT到1.0,再到1.1-SNAPSHOT。
  • 版本控制(Version Control): 是指借助版本控制工具(如Subversion)追踪代码的每一个变更。

关于版本控制的标签(Tag),使用标签就可以明确地将某个源码版本(也就是项目状态)从主干中标记出来,放到单独的位置。

自动化版本发布,Maven插件maven-release-plugin的介绍。

用来帮助提高安全性的技术——GPG(GnuPG)的介绍,及介绍插件maven-gpg-plugin

14. 灵活的构建
本章的标题的名字起的太宽泛,主要是讲项目构建过程中常常需要面对的问题就是不同的平台环境差异,这可能是操作系统的差异、开发平台和测试平台的差异、不同客户之间的差异等。这了应对这些差异,Maven提供了属性(properties)、资源过滤(resource filter)以及profile三大特性。Maven用户可以在POM和资源文件中使用Maven属性表示那些可能变化的量,通过不同profile中的属性值和资源过滤特性为不同环境执行不同的构建。

Maven属性
Maven的属性,通过properties元素定义,属性分类(6类): 内置属性、POM属性、自定义属性、Setting属性、Java系统属性、环境变量属性。其中内置属性主要有${basedir} 表示项目根目录(pom.xml所在目录),${version} 表示项目版本。

资源过滤
插件maven-resource-plugin: 处理资源文件。
插件maven-war-plugin: 处理web项目中的web资源文件(如src/main/webapp/*.css)。

profile
根据具体的需要,可以在以下位置声明profile:
pom.xml, 用户settings.xml, 全局settings.xml, profiles.xml

介绍了激活profile的方法。

15. 生成项目站点

Maven3中使用插件maven-site-plugin生成站点,配置plugin的信息(groupId, artifactId等)后,在项目上运行mvn site就能直接生成一个最简单的站点。(由于site生命周期中的site阶段(phase)绑定到了maven-site-plugin的site目标(goal)上)。

复习: site生命周期(maven三大生命周期之一,第7章介绍),有四个阶段,分别是pre-site, site, post-site, site-deploy。

关于项目信息如(关于、持续集成、依赖、依赖管理等)在Maven3中是由插件maven-project-info-reports-plugin生成。

项目报告插件介绍: 配置在project--reporting--plugins元素下面,

  • 插件maven-javadoc-plugin,使用JDK的javadoc工具生成javaDoc文档。
  • 插件maven-jxr-plugin会以Web页面的形式将Java源代码展现出来。
  • 插件maven-checksyle-plugin,使用CheckStyle工具来帮助Java开发人员遵循编码规[*]范,能根据一套规则自动检查Java代码,使得团队能够方便地定义自己的编码规范。
  • 插件maven-pmd-plugin,使用PMD工具分析Java源代码,寻找代码中的问题,包括潜在的bug、可优化代码、重复代码以及过于复杂的表达式。
  • 插件maven-changelog-plugin能够基于版本控制系统中就近的变更记录生成三份变更报告。
  • 插件cobertura-maven-plugin生成测试覆盖率报告(前面介绍过)。

自定义站点外观。
国际化。

部署站点至服务器上: 为了方便团队和用户得到必要的项目信息。使用mvn clean site-deploy命令,site-deploy目标的工作就是部署maven站点。


16. m2eclipse
官方站点: http://m2eclipse.sonatype.org/

执行maven command: console--> maven console。
通过eclipse浏览本地及远程仓库的内容,打开view: Maven Repositories

添加依赖: 右击pom.xml,选择Maven -- Add Dependency,添加依赖。另一种方法是: m2eclipse的POM编辑器,打开pom.xml文件,有Dependencies的Tab,可以用来添加、删除、编辑依赖。

POM编辑器Tab之Dependency Hierarchy可以显示依赖层次。
POM编辑器Tab之Effective POM,可以查看项目的完整的POM信息(只读)。

下载依赖源码: 右击pom.xml -- Maven -- Download Source,为当前项目的依赖下载源码包。


17. 编写Maven插件
复习: Maven的任何行为都是由插件完成的,包括项目的清理、编译、测试以及打包等操作都有其对应的Maven的插件。每个插件拥有一个或者多个目标,用户可以直接从命令行运行这些插件目标,或者选择将目标绑定到Maven的生命周期。

插件下载: Apache, Codehaus, Googlecode, Sourceforge, Github。一般情况下不需要自己手动编写Maven插件,除非有特殊的需求。

本章介绍了编写Maven插件的步骤及案例。


18. Archetype
Archetype的意思是: 原型。在Maven里,可以使用Maven Archetype快速生成项目骨架,Archetype可以理解成Maven项目的模版

通过插件maven-archetype-plugin来完成以上生成项目骨架的需求。
> mvn archetype: generate, 需要输入: groupId, artifactId, version, package。

常用的archetype:
  • maven-archetype-quickstart: 最常用的Archetype。
  • maven-archetype-webapp: 生成最简单的Maven war项目模版。


高级: 编写一个Archetype。
分享到:
评论

相关推荐

    maven讲解实战

    通过阅读《Maven实战-Linux公社www.Linuxidc.com整理.pdf》这份文档,可以深入理解Maven在实际项目中的应用和最佳实践。 总的来说,Maven是Java开发中的一把利器,它通过标准化的构建流程和强大的依赖管理功能,...

    eclipse使用maven整理文档.rar_captured7ne_eclipse mavenhelper_maven

    【标题】"eclipse使用maven整理文档"涵盖了在Eclipse集成开发环境中使用Maven进行项目管理和文档生成的实践知识。Maven是一个强大的Java项目管理工具,它通过配置文件(pom.xml)来管理项目的构建、依赖关系和文档...

    Head first java 设计模式源码 我将其整理成maven工程导入即可使用

    本项目基于《Head First Java》一书中的设计模式,将源码整理成了Maven工程,使得学习和实践这些模式变得更加便捷。对于开发者而言,了解和掌握这些模式能提升代码质量,提高代码可读性和可维护性。 1. Maven工程的...

    smart-doc官方maven插件smart-doc-maven-plugin-master.zip

    《Smart Doc Maven插件详解与应用实践》 在软件开发过程中,文档的编写与管理是一项不可或缺的任务,尤其对于Java开发者而言,清晰、详尽的API文档有助于团队成员之间的沟通和项目的维护。Smart Doc是一款强大的...

    这个一个SSM+shiro+maven+bootstrap的项目实战,经典的图书管理系统。.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何...收取的费用仅用于收集和整理资料耗费时间的酬劳

    mavenflink.rar flink整理的依赖包,方便实用

    《Flink技术精要:基于mavenflink.rar的实战指南》 Apache Flink是一款流行的开源流处理框架,被广泛应用于大数据实时处理、分析和计算领域。本文将围绕标题中的"mavenflink.rar"这一资源,深入探讨Flink的核心概念...

    ssm.zip=ssm+maven导出表格数据

    【标题】"ssm.zip=ssm+maven导出表格数据" 涉及到的主要技术是Spring、Struts和MyBatis(SSM)框架的整合,以及使用Maven进行项目管理和构建,同时提到了数据导出的功能,通常这意味着将数据库中的数据转化为Excel或...

    《毕业设计》-校友录网站 校友交流平台 基于javaWeb,由Maven构建管理

    个人花大量时间整理出的真实毕业设计实战成果,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关...

    《springcloud&学习资料》--基于springboot+springcloud+maven的在线考试系统.zip

    个人花大量时间整理出的实战资料,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关资源哦~ 个人...

    Netty重点内容总结及实战.pdf

    上述知识总结是根据提供的文件内容整理得出,旨在帮助对Netty有兴趣的开发者能够从实战出发,更深层次地理解和掌握Netty的网络编程模型和工作原理。对于具备Java背景的技术人员而言,Netty不仅能够提升开发能力,还...

    java爬虫抓取网页数据教程(20210809124656).pdf

    根据提供的文件信息,文档标题为“java爬虫抓取网页数据教程”,此文件属于IT技术类教程,特别关注于Java编程语言在编写网络爬虫方面的应用。在这份教程中,将会涉及到使用HttpClient工具在Java环境中抓取网页数据的...

    java-concurrent-programming:《实战Java高并发程序设计》笔记和二进制整理

    《实战Java高并发程序设计》笔记和源码笔记《实战Java高并发程序设计》中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了笔者精心制作相关笔记并整理...

    我的java开发笔记(技术,经验)

    通过阅读这些技术文章,你可以不断巩固和拓宽自己的知识面;通过解答面试问题,你可以了解行业对Java开发者技能的要求,更好地规划自己的学习路径;通过研读笔记,你可以借鉴他人的经验,避免走弯路。 总之,这份...

    Java爬虫实战教程:CSDN文章爬取与解析技巧.zip

    在本Java爬虫实战教程中,我们将探讨如何利用Java技术来爬取并解析CSDN(China Software Developer Network)网站上的文章。CSDN作为中国最大的开发者社区,提供了丰富的技术文章,是学习和分享编程知识的重要平台。...

    java毕业设计&课设-分布式苗杀系统企业级实战(视频+源码).doc

    接下来,我们将基于这些信息深入挖掘并整理出相关的技术知识点。 ### 一、分布式秒杀系统概述 分布式秒杀系统是一种在分布式环境下实现商品快速抢购的技术方案。其主要目的是为了应对高并发场景下用户对特定商品的...

    达内java笔记,精挑细选(达内助教整理)

    - **实战篇**:基于Maven的项目构建、使用Tomcat服务器部署应用、数据库设计与SQL操作、RESTful API设计等。 - **面试指南**:常见面试题解析,包括Java基础、J2EE框架、设计模式等。 这份笔记是学习J2EE的宝贵资源...

    尚硅谷2018新年学习大礼包重新整理版 资源下载

    【标题】:“尚硅谷2018新年学习大礼包重新整理版 资源下载”这一标题揭示了这是一个关于IT学习资源的集合,特别强调了是2018年新年时推出的,并且经过了重新整理,意味着内容可能更加精炼且符合当时的技术趋势。...

    马士兵jvm调优笔记.docx

    - **Survivor区**:当Eden区满后,还存活的对象会被移动到Survivor区之一。 - **老年代**:存放的是生命周期较长的对象。当对象在Survivor区中经历了若干次GC后仍然存活,则会被转移到老年代。 - **栈**:每个线程...

Global site tag (gtag.js) - Google Analytics