Maven实战读书笔记(2)

Maven目录分析

通常在安装Maven时,都会设置M2_HOME这个环境变量,M2_HOME指代了Maven的安装目录,下面是目录结构:

bin

boot

lib

LICENSE.txt

NOTICE.txt

README.txt

bin目录是?

1、该目录包含了mvn运行的脚本

2、mvn是基于UNIX平台的shell脚本,mvn.bat是基于Windows平台的bat脚本,命令行输入任何一条mvn命令时,实际上时在调用这些脚本,然后执行Java命令,是的maven的运行需要java的环境

3、该目录还包含了mvnDebug和mvnDebug.bat两个文件,mvnDebug与mvn有什么区别呢?打开文件查看之,两者基本上是一样的,只是mvnDebug多了一条MAVEN_DEBUG_OPTS配置,起作用就是在运行Maven时开启debug,以便调试Maven本身

4、该目录还包含m2.conf文件,这是classworlds的配置文件

5、包含文件mvn、mvn.bat、 mvnDebug 、mvnDebug.bat、m2.conf

调试Maven本身?如何调试?

classworlds是干什么的?

boot目录是?

1、该目录只包含一个文件plexus-classworlds-2.2.3.jar

2、plexus-classwords是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置

3、Maven使用该框架加载自己的类库

4、参考http://classworlds.codehaus.org/

conf目录是?

1、该目录包含了一个非常重要的settings.xml

2、修改该文件,就能在机器上全局地定制Maven的行为

3、一般我们会将该文件复制到~/.m2/目录下(~表示当前用户目录),然后修改该文件,在用户范围定制Maven的行为

lib目录是?

1、该目录包含了所有Maven运行时需要的Java的类库

2、Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jar、maven-model-3.0.jar之类的文件

3、此外还包含了第三方依赖,如common-cli-1.2.jar、google-collection-1.0.jar等

对于Maven2来说lib目录有些不同

1、该目录只包含一个如maven-2.2.1-uber.jar的文件

2、原本各为独立JAR文件的Maven模块和第三方类库都被拆解后重新合并到这个jar文件中

3用户可以在这个jar文件中找到Maven内置的超级POM

LICENSE.txt文件是?

记录了Maven使用的软件许可证Apache.License Version 2.0

NOTICE.txt文件是?

记录了Maven包含的第三方软件

 

README.txt文件是?

包含了Maven的简要介绍,包括安装需求及如何安装简要指令等

非常有用的mvn help:system命令

1、该命令会打印出所有的Java系统属性环境变量

2、执行该命令Maven会下载maven-help-plugin,包括pom文件和jar文件,这些文件都被下载到了Maven本地仓库中

3、默认情况,可以到~/.m2/repository/org/apache/maven/plugins/maven-help-plugins/目录下找到刚才下载的maven-help-plugin的pom文件和jar文件

~/.m2目录

1、默认情况下,该文件夹下放置了Maven本地仓库.m2/repository

2、所有的Maven构建都被存储到该仓库中,以方便重用

4、默认情况,~/.m2目录下除了repository仓库之外就没有其他目录和文件,不过大多数Maven用户需要复制M2_HOME/conf/settings.xml文件到~/.m2/settings.xml,这是一条最佳实践

设置HTTP代理

有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的带来访问因特网。这种情况下,你需要为Maven配置HTTP代理,才能让它正常访问外部仓库,以下载所需要的资源

如何设置HTTP代理

1、首先检查代理服务器是否能正常的访问

2、代理服务器的IP可能是218.14.227.197 端口号为3128

编辑~/.m2/setting.xml文件,添加代理配置如下:

<setting>

...

<proxies>

<proxy>

<id>my-proxy</id>

<active>true</active>

<protocol>http</protocol>

<host>218.14.227.197</host>

<port>3128</port>

<!--

<username>XXX</username>

<password>XXX</password>

<nonProxyHosts>repository.mycom.com | *.google.com</nonProxyHosts>

-->

</proxy>

</proxies>

...

</setting>

配置说明:

1、proxies下面可以配置多个proxy元素,如果声明多个proxy元素,则默认情况下第一个被激活的proxy会生效

2、id为my-proxy的代理,active的值为true表示激活该代理,protocol表示使用代理协议为http,最重要的是正确的host和port,如果代理需要认证的话配置username和password,nonPoxyHost元素用来指定哪些主机名不需要代理,可以使用 "|" 符号来分个主机名,可以使用通配符*.google.com

Eclipse非常优秀的IDE

Eclipse是一款非常优秀的IDE,除了基本的语法标亮、代码补齐、XML编辑等基本功能外,最新版本的Eclipse还能很好地支持重构,并且集成JUnit、CVS、Mylyn等各种流行工具,可惜Eclipse默认没有集成对Maven的支持,幸运的是,由Maven之父Jason Van Zyl创立的Sonatype公司建立了m2eclipse项目,这是Eclipse下的一款十分强大的Maven插件,

可以访问http://m2eclipse.sonatype.org/了解更多该项目的信息

 

安装m2eclipse

1、使用Eclipse Marketplace搜索m2eclipse下载Maven Integration for Eclipse(Luna and newer) 1.5

2、m2eclipse的核心模块就是Maven Integration for Eclipse

3、m2eclipse使用的开源许可证是Eclipse Public License v1.0

4、除了核心组件之外,m2eclipse还提供了一组额外的组件,主要是为了方便与其他工具如Subversion进行集成,这些组件的安装地址为http://m2eclipse.sonatype.org/sites/m2e-extras

简单介绍一下这些组件的用途

重要的:

1、Maven SCM handler for Subclipse (Optional):Subversion是非常流行的版本管理工具

该模块能够帮助我们直接从Subversion服务器签出Maven项目,不过前提是需要首先安装Subclipse (http://subclipse.tigris.org/)

2、Maven SCM Integration (Optional): Eclipse环境中Maven与SCM集成核心的模块。它利用各种SCM工具如SVN实现Maven项目的签出和具体化等操作

不重要的:

3、Maven issue tracking configurator for Mylyn 3.x (Optional):该模块能够帮助我们使用POM中的缺陷跟踪系统信息链接Mylyn至服务器

4、Maven SCM handler for Team/CVS (Optional):该模块帮助我们从CVS服务器签出Maven项目,如果还在使用CVS,就需要安装它

5、Maven Integration for WTP (Optional):使用该模块可以让Eclipse自动读取POM信息并配置WTP项目

6、M2Eclipse Extensions Development Support (Optional): 用来支持扩展m2eclipse,一般用户不会用到

7、Project configurators for commonly used maven plugins (temporary):一个临时的组件,用来支持一些Maven插件与Eclipse的集成,建议安装。

以上的这些模块在http://m2eclipse.sonatype.org/sites/m2e-extras已经找不到了,如果想要安装指定的插件,自己在Eclipse marketplace自己搜索吧

如何在Eclipse中验证某个插件是否正确安装?

1、首先,单击菜单栏中的Help

2、然后选择About Eclipse,在弹出的对话框中,单击Installation Details按钮,会得到一个对话框

3、在Installed Software标签中,检查该模块是否在这个列表中

一个非常常见的错误

在安装Maven的时候,经常会出现一个这样的错误:

09-10-6 上午01时14分49秒:Eclipse is running in a JRE, but a JDK is reuqired

Some Maven plugins may not work when importing projects or updating or updating source folders

这是因为Eclipse默认是运行在JRE上的,而m2eclipse的一些功能要求使用JDK。

解决方法之一:将Eclipse默认运行的JRE改成我们自己安装的JDK

安装NetBeans Maven插件

Maven安装的最佳实践

1、设置MAVEN_OPTS环境变量

2、配置用户范围settings.xml

3、不要使用IDE内嵌的Maven

设置MAVEN_OPTS环境变量干什么?

1、运行mvn命令实际上执行的是Java的命令,Java命令可用的参数也可以用在mvn命令

2、通常需要设置MAVEN_OPTS的值为-Xms138m -Xms512m,因为Java默认的最大可用内存往往不能满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点需要占用大量的内存,如果没有该配置,则很容易得到java.lang.OutOfMemeoryError

注意:尽量不要修改mvn.bat或者mvn这两个Maven执行脚本,如果要升级Maven时不得不再次修改,一来麻烦,二来容易忘记,同理也不要去修改任何Maven安装目录下的文件

settings.xml文件的一些说明

1、Maven用户可以选择配置 M2_HOME/conf/settings.xml或者~/.m2/settings.xml,前者是全局范围的,整台机器上的所有用户都会直接受到该配置的影响,而后者是用户范围的,只有当前用户才会受到该配置的影响

2、推荐使用用户范围的settings.xml,主要是为了避免无意识地影响到系统中的其他用户,如果有切实的需求,需要统一系统中所有用户的setting.xml配置,当然应该使用全局范围的setting.xml

3、配置用户范围的settings.xml文件还便于Maven的升级,直接修改conf目录下的settings.xml会导致Maven升级不便,每次升级到新版本的Maven,都需要复制settings.xml文件,如果使用~/.m2目录下的settings.xml,就不会影响到Maven安装文件,升级时就不需要触动settings.xml文件

为什么不要使用IDE内嵌的Maven

无论Eclipse还是NetBeans,当集成Maven时,都会安装上一个内嵌的Maven,这个内嵌的Maven通常会比较新,但不一定很稳定,而且往往也会和在命令行使用的Maven不是同一个版本

使用IDE内嵌的Maven会出现两个潜在的问题

1、较新版本的Maven存在很多不稳定因素,容易造成一些难以理解的问题

2、除了IDE,也经常还会使用命令行的Maven,如果版本不一致,容易造成构建行为的不一致,这是我们所不希望看到的。

所以应该在IDE中配置Maven插件时使用与命令行一致的Maven

时间: 2024-11-05 23:30:49

Maven实战读书笔记(2)的相关文章

Maven实战读书笔记(15)

关于灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建. 例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在的环境并使用正确的配置 还有一种常见的情况是,项目开发了大量的集成测试,这些测试运行起来非常耗时,不适合在每次构建项目的时候都运行,因此需要一种手段能让我们在特定的时候才激活这些集成测试,Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤 Maven属性

Maven实战读书笔记(8)

何为Maven的生命周期? 1.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期 2.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤 3.Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,实际的任务(如编译源代码)都是交由插件来完成的 Maven的这种思想与设计模式的模板方法非常相似 模板方法模式在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样

Maven实战读书笔记(3)

POM是什么? 1.像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml 2.POM (Project Object Model, 项目对象模型) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等 如何编写一个Hello World的POM? 新建一个名为pom.xml的文件,输入内容如下: <?xml version="1.0" encoding="UTF-8"?> <project xm

Maven实战读书笔记(13)

WAR 1.基于Java的Web应用,其标准的打包方式是WAR 2.WAR与JAR类似,不过它包含更多的内容,如JSP文件.Servlet.Java类.web.xml配置文件.依赖JAR包.静态web资源(如HTML.CSS.JavaScript文件)等 一个典型的WAR文件的目录结构 - war / + META-INF / + WEB-INF / | + classes / | | + ServletA.class | | + config.properties | | + ... | |

maven实战读书笔记(1)

Maven这个词的中文翻译是? 可以翻译为"知识的积累",也可以翻译为"专家"或"内行" Maven是啥?干什么的? 1.一个跨平台的项目管理工具 2.Apache组织的一个颇为成功的开源项目 3.Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息管理 4.适合小型的开源类项目.大型的企业级应用 5.适合传统的瀑布式开发.流行的敏捷模式开发 跨平台是指?Maven是跨平台的 无论是Windows.Linux或者Mac上,都可以使用

Maven实战读书笔记(14)

什么是版本管理? 版本管理是指项目整体版本的演变过程管理,如从1.0-SNAPSHOT到1.0再到1.1-SNAPSHOT 什么是版本控制? 版本控制是指借助版本控制工具(如Subversion)追踪代码的每一个变更 什么时候可以将快照版本更新为发布版本 1.所有自动化测试应当全部通过 2.项目没有配置任何快照版本的依赖 3.项目没有配置任何快照版本的插件 4.项目所包含的代码已经全部提交到版本控制系统中 Maven的版本号定义约束 可能有个版本号是这样的,1.3.4-beta-2 Maven的

Maven实战读书笔记(12)- Nexus

Nexus 简介 安装Nexus Nexus的仓库与仓库组 Nexus的索引与构件搜索 配置Maven从Nexus下载构件 部署构件至Nexus Nexus的权限管理 Nexus的调度任务 其他私服软件 小结

Maven实战读书笔记(6)

Maven的坐标和依赖是?构件的逻辑表示方式和物理表示方式是? 1.坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式 2.文件是Maven构件的物理表示方式 3.Maven通过仓库来统一管理这些文件 那么,构件是什么东东? 1.任何一个依赖.插件或者项目构建的输出,都可以称为构件 2.依赖log4j-1.2.15.jar是一个构件 3.插件maven-compiler-plugin-2.0.2.jar是一个构件 4.account-email项目构建完成后输出account-email-

Maven实战读书笔记(18)

代码行统计插件的POM <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"> <m

Maven实战读书笔记(7)

远程仓库的认证 1.一般来说,远程仓库无须认证就可以访问 2.但有时候出于安全考虑,需要提供认证信息,为了防止非法的仓库访问,管理员为每个仓库提供了一组用户名及密码 3.这时为了让Maven访问仓库内容,就需要配置认证信息 如何配置认证信息? 1.配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中 2.这是因为POM往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机.因此,在settings.x