(3)plugins 配置
用于指定使用的插件
...
maven-jar-plugin
2)extensions
是否加载 plugin 的 extensions,默认为 false
3)inherited
true/false,这个 plugin 是否应用到该 pom 的孩子 pom,默认为 true
...
3. 默认情况下,Maven 的本地资源库默认为 .m2 目录文件夹:
Unix/Mac OS X – ~/.m2
Windows – C:\Documents and Settings\{your-username}\.m2
4.1. 更新 Maven 的本地库
通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo
找到 {M2_HOME}\conf\setting.xml, 更新 localRepository 到其它名称。
{M2_HOME}\conf\setting.xml
| The path to the local repository maven will use to store artifacts.
| Default: ~/.m2/repository
-->
5. 当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。
6. 具体下载 jar 包的工作是你本地安装的 maven 程序去做的,Eclipse 的 maven 插件只是起调用本地 maven 软件的意思。
7. 你每次修改 pom.xml,Eclipse 的 maven 插件会唤醒本地 maven 软件去下载 jar 包。
8. 每次修改调整 pom.xml 时,Maven 将首先从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 。
9.maven 中央仓库的 PS:目录浏览功能被禁用,但是,当你建立 Maven 的项目,它仍然会从 "http://repo1.maven.org/maven/" 得到依赖, 您可以从 Maven 验证输出。
10. 默认情况下,Maven 从 Maven 中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在 Java.net 或 JBoss 的储存库远程仓库中能找到。
1. Java.net 资源库
添加 Java.net 远程仓库的详细信息在 "pom.xml" 文件。
pom.xml
注
旧的 "http://download.java.net/maven/2" 仍然可用, 但建议升级到最新储存库。
2. JBoss Maven 存储库
1. 添加 JBoss 远程仓库的详细信息在 "pom.xml" 文件中。
pom.xml
6. 当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库
7. 看看有什么不同?那么到底在 Maven 发生了什么?当建立一个 Maven 的项目,pom.xml 文件将被解析,如果看到 log4j 的 Maven 坐标,然后 Maven 按此顺序搜索 log4j 库:
在 Maven 的本地仓库搜索 log4j
在 Maven 中央存储库搜索 log4j
在 Maven 远程仓库搜索 log4j(如果在 pom.xml 中定义)
Maven 依赖库管理是一个非常好的工具,为您节省了大量的工作。
如何找到 Maven 坐标?
访问 Maven 中心储存库,搜索下载您想要的 jar。
10. 这里有 2 个案例,需要手动发出 Maven 命令包括一个 jar 到 Maven 的本地资源库。
要使用的 jar 不存在于 Maven 的中心储存库中。
您创建了一个自定义的 jar ,而另一个 Maven 项目需要使用。
PS,还是有很多 jar 不支持 Maven 的。
案例学习
例如,kaptcha,它是一个流行的第三方 Java 库,它被用来生成 "验证码" 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中。
在本教程中,我们将告诉你如何安装 "kaptcha" jar 到 Maven 的本地资源库。
1. mvn 安装
下载 "kaptcha",将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C 盘。发出下面的命令:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
示例:
D:\>mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file]
[INFO] Installing c:\kaptcha-2.3.jar to
D:\maven_repo\com\google\code\kaptcha\2.3\kaptcha-2.3.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue May 12 13:41:42 SGT 2014
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------
现在,"kaptcha" jar 被复制到 Maven 本地存储库。
2. pom.xml
安装完毕后,就在 pom.xml 中声明 kaptcha 的坐标。
kaptcha
3. 完成
构建它,现在 "kaptcha" jar 能够从你的 Maven 本地存储库检索了。
10. 一个标准的 pom.xml 被生成。这个 POM 文件类似于 Ant build.xml 文件,它描述了整个项目的信息,一切从目录结构,项目的插件,项目依赖,如何构建这个项目等。
11. 默认的 pom.xml 太简单了,很多时候,你需要添加编译器插件来告诉 Maven 使用哪个 JDK 版本是用来编译项目。(默认 JDK1.4,这的确太旧了点)
12.maven 是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的 jdk 版本编译的话,它就会用 maven-compiler-plugin 默认的 jdk 版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了 jdk1.7 的新特性,但是 maven 在编译的时候使用的是 jdk1.6 的版本,那这一段代码是完全不可能编译成. class 文件的。为了处理这一种情况的出现,在构建 maven 项目的时候,第一步就是配置 maven-compiler-plugin 插件。
compiler 插件能解决:
1:maven 2.1 默认用 jdk 1.3 来编译,maven 3 貌似是用 jdk 1.5,如果项目用的 jdk 1.6 也会有问题,compiler 插件可以指定 JDK 版本为 1.6。
2:windows 默认使用 GBK 编码,java 项目经常编码为 utf8,也需要在 compiler 插件中指出,否则中文乱码可能会出现编译错误。
pom 增加插件配置
maven-compiler-plugin
20. 灰度发布:
原来灰度发布就是保持两份不同的版本,让一小撮用户先在新版本上尝鲜,等这部分小白鼠用户稳定了,在把绝大部分的用户迁移到新版本上来。别的先不说,就针对之前我们部门那么多领导提出来的问题,一一解答下:
22. 这里打断一下,最近这几年您听说过淘宝升级么?如果没有记错,最近的一次淘宝发公告要暂停业务进行系统升级是 2008 年,之后再也没有听说过淘宝通过半夜停业务的方式来做系统升级的事情了。您听说过 QQ 升级么,事实上 QQ 从最开始的只能有 500 个好友到现在支持上亿的好友,经历过大大小小上千次的升级,从来没有停业务这一说法,为什么啊?因为互联网产品有一个特点,为了减少甚至避免系统升级对用户使用造成影响,在升级的过程中都采用了灰度发布的策略。
24. 要导入这个项目到 Eclipse 中,需要生成一些 Eclipse 项目的配置文件。
最新版本的 Eclipse 已经可以自动生成没有 Eclipse 配置文件的工程的,为他们生成配置文件了,
25.maven 的 dependency,具体怎么写 exclusion。
spring-core
commons-logging
26. 还通过 Spring 监听器 ContextLoaderListener 集成了 Spring 框架。
27.Syntax error, annotations are only 改 jdk 版本,
Syntax error, annotations are only available if source level is 5.0
在 Myeclipse 编辑代码时,有时候遇到上面这种问题,主要是使用的 jdk 版本过低,可以通过如下配置解决。
鼠标右键点击报错的项目,然后选择最下面的 properties,也可以鼠标左键点击项目后,通过快捷键 alt + 回车打开,
然后将会看到下面这个界面,点击 Java Compiler,
这个时候选择看到图中的,默认 jdk 为 1.4,低于错误代码中说的 1.5, 点击下拉框选择 5.0 及以上的版本,并点击下方的 OK 保存,如果有提示,点击 yes。
28.java 程序用 maven 打包的时默认没有加入依赖的 jar 包的,这是需要修改下 pom 文件,加入如下 plugin
29.java 程序用 maven 打包的时默认没有加入依赖的 jar 包的,这是需要修改下 pom 文件,加入如下 plugin
30.java 程序用 maven 打包的时默认没有加入依赖的 jar 包的,这是需要修改下 pom 文件,加入如下 plugin
35.POM 代表项目对象模型。它是工作在 Maven 的基本单位。这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。
36.POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取 POM,得到所需要的配置信息,然后执行目标。
37. 创建一个 POM 之前,我们应该先决定项目组(groupId),它的名字(artifactId)和版本,因为这些属性在项目仓库是唯一标识的。
38. 构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:
阶段 处理 描述
准备资源 资源复制 资源复制可以进行定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建 JAR/WAR 包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地 / 远程 Maven 仓库安装程序包
39.maven 构建项目生命周期:
构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:
阶段 处理 描述
准备资源 资源复制 资源复制可以进行定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建 JAR/WAR 包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地 / 远程 Maven 仓库安装程序包
40. 注意:maven install 步骤,是将你项目自己的 jar 包发布到本地仓库和远程仓库
41. 当运行 Maven 构建,那么 Maven 会自动下载所有依赖的 jar 到本地存储库中。
42.Maven 本地存储库,默认情况下创建在 %USER_HOME% 目录。要覆盖默认位置,可在 Maven 的 settings.xml 文件中修改 %M2_HOME%conf 目录指向另一个路径。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
当运行 Maven 命令,Maven 会下载依赖到您的自定义路径。
43. 中央储存库
Maven 中央存储库是由 Maven 社区提供的资源库。它包含了大量的常用程序库。
当 Maven 没有在本地存储库找到任何依赖,就会开始搜索在中央存储库,它会使用下列网址: http://repo1.maven.org/maven2/
中央仓库的关键概念:
此系统信息库由 Maven 社区管理
它不要求配置
搜索时需要互联网接入
44. 远程仓库
有时,Maven 不能从依赖中央存储库找到上述库,那么它停下构建过程并输出错误消息到控制台。为了防止这种情况,Maven 提供远程仓库概念,这是开发商的自定义库包含所需的库文件或其他项目 jar 文件。
有时,Maven 不能从依赖中央存储库找到上述库,那么它停下构建过程并输出错误消息到控制台。为了防止这种情况,Maven 提供远程仓库概念,这是开发商的自定义库包含所需的库文件或其他项目 jar 文件。
例如,使用以下提到的 pom.xml,Maven 会从远程仓库下载依赖项(不在中央存储库中提供)。
- 4.0.0
- com.companyname.projectgroup
- project
- 1.0
- com.companyname.common-lib
- common-lib
- 1.0.0
- companyname.lib1
- http://download.companyname.org/maven2/lib1
- companyname.lib2
- http://download.companyname.org/maven2/lib2
当我们执行 Maven 构建命令,Maven 依赖库按以下顺序进行搜索:
Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:
一个插件通常提供了一组目标,可使用以下语法来执行:
- mvn [plugin-name]:[goal-name]
例如,一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译
- mvn compiler:compile
Maven 提供以下两种类型插件:
类型 | 描述 |
---|---|
构建插件 | 在生成过程中执行,并在 pom.xml 中的 <build/> 元素进行配置 |
报告插件 | 在网站生成期间执行,在 pom.xml 中的 <reporting/> 元素进行配置 |
以下是一些常见的插件列表:
插件 | 描述 |
---|---|
clean | 编译后的清理目标,删除目标目录 |
compiler | 编译 Java 源文件 |
surefile | 运行 JUnit 单元测试,创建测试报告 |
jar | 从当前项目构建 JAR 文件 |
war | 从当前项目构建 WAR 文件 |
javadoc | 产生用于该项目的 Javadoc |
antrun | 从构建所述的任何阶段运行一组 Ant 任务 |
来源: http://www.bubuko.com/infodetail-2004006.html