《Maven实战》章节试读

当前位置:首页 > 计算机网络 > 软件工程/开发项目管理 > Maven实战章节试读

出版社:机械工业出版社
出版日期:2010年12月
ISBN:9787111321545
作者:许晓斌
页数:361页

《Maven实战》的笔记-第二章 - 第二章

2.1 在Windows上安装Maven

1.检查JDK安装
2.下载Maven http://maven.apache.org/download.html
3.将压缩包解压到目录
4.配置环境变量,变量名为M2_HOME,变量值为Maven的安装目录
5.在Path变量值的末尾加上%M2_HOME%\bin;
6.在CMD窗口下,运行mvn -version 查看Maven的安装情况
2.7.3 不要使用IDE内嵌的Maven
IDE集成Maven时,会安装上一个内嵌的Maven,与本地安装的可能不是一个版本,容易造成构建行为的不一致,这是我们所不希望看到的。因此应当将IDE中的Maven配置成本地的。

《Maven实战》的笔记-第139页

这里举了一个ANT的配置文件来说明"约定优于配置"的问题。其中,连java source目录地址都要手工配置,确实是以前用ant感觉每次都重复手工配置的一个典型例子。

《Maven实战》的笔记-第一章 - 第一章

1.1何为Maven
Maven 主要服务于基于java平台的项目构建、依赖管理和项目信息管理。
何为构建
我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工作上,这就是构建。
Maven 不仅是构建工具,还是一个依赖管理工具盒项目信息管理工具。

《Maven实战》的笔记-第八章 聚合与继承 - 第八章 聚合与继承

Maven的聚合特性能够把项目的各个模块聚合在一起构建,而Maven的继承特性则能帮助抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性。
聚合只要是为了方便快速构建项目,继承是为了消除重复配置。
Maven提倡“约定优于配置”,这是Maven最核心的设计理念之一。
为什么要使用约定而不是自己更灵活的配置呢?
原因之一是,使用约定可以大量减少配置。

《Maven实战》的笔记-第143页 - 8.5 约定优于配置

这里提到maven有超级POM的概念,所有的其他POM都继承这个POM的内容,并可以进行重写。
所以maven里约定的所谓的src/java等目录,其实并不是写死的,而是通过这种方式继承下去的

《Maven实战》的笔记-第8. 9.10章 - 第8. 9.10章

对于一些构件,书中的版本比较老下载速度非常非常慢。这时候可以选用一些较新的构件。maven官方库的构件看在此查看 http://search.maven.org/#browse 。

《Maven实战》的笔记-第147页 - 继承,聚合

约定优于配置,说的真好。
看maven项目分模块的结构,与osgi的分插件的依赖关系有点类似,无论maven还是osgi都没有深入了解,还要继续努力。

《Maven实战》的笔记-第147页 - 聚合与继承

##聚合与继承
聚合
: 当我们构建了几个项目(作为模块)时, 我们需要一次构建整个项目, 这时候就需要创建一个额外的 aggregator 模块, 其本身作为 Maven 项目, 拥有一个特殊的 pom<!-- ............some ordinary code -->
<packaging>pom</packaging>
<name>abcdef aggregator</name>
<modules>
<module>first-module</module>
<module>second-moudle</module>
</modules>当打包类型为 pom 时,该项目就成为一个特殊的Maven项目, 在 modules 标签下声明其聚合的模块
继承
: 我们可以构建一个只有 pom 的 Maven 项目,用于给其他项目的 pom 继承,以此消除重复
同样,要将打包类型设为 pom<!-- ................. -- >
<packaging>pom</packaging>
<!-- some config -- >在另一个文件中,就可以通过继承来继承其中的依赖配置<parent>
<!-- maven坐标 -->
<relativePath>...<relativePath>
</parent>假如希望子 pom 自己选择使用父 pom 的哪些依赖,那么就需要使用< dependencyManagement>标签在这个标签内的所有依赖,不将依赖本身赋予子 pom, 只将依赖'配置'赋予子 pom, 若子 pom 未声明其中的依赖,这些依赖就不会被引入,若声明了其中的依赖,则 version 可以略去,使用父pom配置的version.

《Maven实战》的笔记-第141页

超级POM

《Maven实战》的笔记-第三章 Maven使用入门 - 第三章 Maven使用入门

以Hello World为例,我们使用Maven archetype来创建项目的骨架。
mvn archetype:generate
Define value for property 'groupId': : com.go.hello
Define value for property 'artifactId': : hello-world
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': com.go.hello: : com.go.hello.hellowoeld
Confirm properties configuration:
groupId: com.go.hello
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.go.hello.hellowoeld
Y: : Y
Archetype可以帮助我们迅速地构建起项目的骨架。

《Maven实战》的笔记-第138页 - 聚合和继承的关系

看到这里,发现一个以前理解的误区:
以前一直以为maven就有一个“父子模块”的功能,父亲通过<modules>指定子模块,来实现一次构建多个模块。子模块通过<parent>来指定父模块,并且从父模块继承一些配置。
今天看了这一节,才发现”聚合“和”继承“在maven的设计中是独立的2个概念,只不过实际工程中,往往是一个父模块既充当”聚合主体”,又充当“被继承者”

《Maven实战》的笔记-第九章 使用Nexus创建私服 - 第九章 使用Nexus创建私服

通过建立自己的私服,就可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构件等,从而高效的使用Maven。
有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:Apache基金会的Archiva、JFrog的Artifactory和Sonatype的Nexus。

《Maven实战》的笔记-第244页

快照版和发布版的转换

《Maven实战》的笔记-第33页 - 第三章 Maven使用入门

现在(2015-01)没有出现不能编译注解的情况。现在的编译插件,默认的至少到了1.5了吧。为了证实这个配置的作用,将 代码清单中3-5中配置:
<source>1.5</source>
<target>1.5</target>
改成:
<source>1.3</source>
<target>1.3</target>
后,出现了书上描述的情况。

《Maven实战》的笔记-第35页 - 第三章 Maven使用入门

书中配置的shade版本是1.2.1。在运行的时候发现shade插件下了好久都没下来。于是到maven的官网的插件文档(http://maven.apache.org/plugins/index.html)上查看shade插件的最新版本.是2.3。于是俺就配置了个2.2。比较快就下载下来了。看来1.2.1还是too old, too simple~

《Maven实战》的笔记-第31页 - 第三章 Maven使用入门

1. 在书中作者的配置的junit 版本是4.7, 运行mvn clean test后,发现中间没有下载4.7的过程。于是抱着试一试的心态改成4.8。就有了下载4.8的过程。然后改成4.7发现又可以下载了。 奇怪。
2. 本来打算不用插件手动试下效果,但HelloWorldTest类编译时找不到HelloWorld类,就算去掉test部分,将HelloWorld打包install到m2的库中,然后再将test部分放过来,编译时还是提示找不到HelloWorld类。用eclipse新建一个maven工程其他文件都是一样的,竟然没有这个问题。 奇怪。

《Maven实战》的笔记-第五章 坐标和依赖 - 第五章 坐标和依赖

Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId,artifactId,version,packaging,classifier。
“Maven是从哪里下载构件的呢?”
Maven内置了一个中央仓库的地址,包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。
groupId:定义当前Maven项目隶属的实际项目。
artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目
名称作为artifactId的前缀。
version:该元素定义Maven项目当前所处的版本。
packaging:该元素定义Maven项目的打包方式。
classifier:该元素用来帮助定义构建输出的一些附属构件。注意,不能直接定义项目的
classifier,因为附属构件不是项目直接生成的,而是由附件的插件帮助生成。
上述5个元素中,groupId,artifactId,version是必须定义的,
packaging是可选的(默认为jar),
classifier是不能直接定义的。

《Maven实战》的笔记-第六章 仓库 - 第六章 仓库

Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。
实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,并使用它们。
路径与坐标的大致对应关系为groupId/artifactId/version/artifactId-version.packageing
对于Maven来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,
发现需要的构件之后,下载到本地仓库再使用。
Maven仓库分类图
本地仓库
每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。
对于Maven来说,每个用户只有一个本地仓库,但可以配置访问很多远程仓库。
中央仓库
Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。
中央仓库包含了这个世界上绝大多数流行的开源Java构件,一般来说,一个简单Maven项目所
需要的依赖构件都能从中央仓库下载到。
私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。私服可以帮助你:
节省自己的外网带宽
加速Maven构建
部署第三方构件
提高稳定性,增强控制
降低中央仓库的负荷


《Maven实战》的笔记-第141页

《Maven实战》的笔记-第七章 生命周期和插件 - 第七章 生命周期和插件

Maven拥有三套相互独立的生命周期,它们分别为clean、default和斯特。
clean生命周期的目的是清理项目
default生命周期的目的是构建项目
site生命周期的目的是建立项目站点
命令行与生命周期
mvn clean:该命令调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的
pre-clean和clean阶段。
mvn test:该命令调用default生命周期的test阶段。实际执行的阶段为default生命周期的
validate、initialize等,直到test的所有阶段。
mvn clean install:该命令调用clean生命周期的clean阶段和default生命周期的install阶
段。实际执行的阶段为clean生命周期的pre-clean和clean阶段,以
及 default 生命周期的validate至install的所有阶段。
mvn clean deploy site-deploy:该命令调用clean生命周期的clean阶段,default生命周
期的deploy阶段,以及site生命周期的site-deploy阶段。
实际执行的阶段为clean生命周期的pre-clean、clean阶
段,default生命周期的所有阶段,以及site生命周期的
所有阶段。


 Maven实战下载 更多精彩书评


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024