`
juvenshun
  • 浏览: 1588878 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Maven中的插件和生命周期

阅读更多

Maven的核心是它的生命周期,生命周期什么都不做,因此Maven的安装文件很小。所有的事情都交给了插件来完成。比如说,Maven的default生命周期中定义了一个compile阶段,这个定义本身什么都不会做,真正编译代码的是Compiler插件,它的groupId是org.apache.maven.plugins,artifactId是maven-compiler-plugin。

 

如果你理解设计模式中的模板方法(Template Method)模式,那么这会变得很好理解。在模板方法模式中,父类定义了一些抽象方法,并且决定这些方法的调用顺序,子类只需要实现这些方法。比如沏茶这个用例,父类定义的抽象方法有:烧开水,洗茶杯,倒水,放茶叶,并且有一个沏茶方法来顺序调用这些方法。而子类会去实现如何烧开水,如何洗茶杯,如何倒水,如何放茶叶。实例化一个子类之后,调用沏茶方法,这些步骤就会依次执行了。同样的道理,在Maven中,生命周期定义了编译,测试,打包,部署等等阶段,而插件会去实现这些对应的阶段,如上面提到的Compiler插件实现了如何编译。

 

使用命令 mvn clean install 构建一个最简单的Maven项目,会看到类似如下的输出:

E:\simple-server\simple-server>mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building simple-server Maven Webapp
[INFO] task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] Deleting directory E:\simple-server\simple-server\target
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Compiling 3 source files to E:\simple-server\simple-server\target\classes
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] No sources to compile
[INFO] [surefire:test]
[INFO] No tests to run.
[INFO] [war:war]
[INFO] Packaging webapp
[INFO] Assembling webapp[simple-server] in [E:\simple-server\simple-server\target\simple-server]
[INFO] Processing war project
[INFO] Webapp assembled in[515 msecs]
[INFO] Building war: E:\simple-server\simple-server\target\simple-server.war
[INFO] [install:install]
[INFO] Installing E:\simple-server\simple-server\target\simple-server.war to C:\Documents and Settings\Administrator\.m2\repository\com\tnsoft\simple-server\1.0-SNAPSHOT\simple-server-1.0-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

 

该输出中加粗的地方,显示了在各个生命周期阶段中,很多插件执行的目标,它们分别是:

  • clean阶段,clean插件执行clean目标。
  • compile阶段,compiler插件执行compile目标。
  • process-test-resources阶段,resources插件执行testResources目标。
  • test-compile阶段,compiler插件执行testCompile目标。
  • test阶段,surefire插件执行test目标。
  • package阶段,war插件执行war目标。
  • install阶段,install插件执行install目标。

关于Maven主要插件的详细信息,请参考http://maven.apache.org/plugins/

此外,还可以使用如 mvn help:describe -Dfull -Dplugin=compiler 的命令查看插件的详细描述信息。

 

配置插件

插件可以被配置以完成一些自定义的行为,有一个对compiler的很常用的配置是:compiler插件默认是以Java 1.4的标准来编译源代码的,如果你用到了JAVA5的新特性,如泛型,那么Maven会报错,说不支持,此时,你需要配置compiler插件来支持Java 5。配置如下:

<project>
   [...]
   <build>
      [...]
     <plugins>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
               </configuration>
          </plugin>
     </plugins>
     [...]
  </build>
  [...]
</project>

 

这里配置了compiler插件的参数source和target。如果你运行了 mvn help:describe -Dfull -Dplugin=compiler 你会看到如下的解释:

...

[21] Name: source
Type: java.lang.String
Required: false
Directly editable: true
Description:
The -source argument for the Java compiler.

-----------------------------------------------
...

[23] Name: target
Type: java.lang.String
Required: false
Directly editable: true
Description:
The -target argument for the Java compiler.

-----------------------------------------------
....

 

help插件还描述了该插件有什么样的目标(goal)。

因此如何配置使用插件,你有两种参考,第一是直接看在线的文档,第二就是使用help插件来看你要配置插件的详细描述。

 

理解这些知识后,使用Maven插件应该不是件困难的事情了。当然,要想自己编写插件,并且将其绑定到Maven生命周期中,那是更高级的话题,留作以后讨论。

9
3
分享到:
评论
2 楼 lovefly_zero 2008-08-27  
我还是宁愿把缓冲区的高度调大点
1 楼 xl515331 2008-08-26  

顶了先


顺便奉送温馨小提示 一则

一般执行  mvn help:describe -Dfull -Dplugin=compiler 在屏幕上直接输出很多东西,这时

候看起来可能就没那么方便了.


可以把这个输出 写到文件中 就方便多了 可以这么干

mvn help:describe -Dfull -Dplugin=compiler > c:\complie_describe.txt


然后看起来 略微方便了点

相关推荐

    Maven3实战笔记04Maven的生命周期和插件

    Maven3实战笔记04——Maven的生命周期和插件。

    Maven的生命周期和插件

    NULL 博文链接:https://576017120.iteye.com/blog/1468915

    大话Maven生命周期

    Maven非常强大的重要原因是它有十分完善的生命周期模型 lifecycle 这个生命周期可以从两方面来理解 第一 顾名思义 运行Maven的每个步骤都由它来定义的 这种预定义的默认行为使得我们使用Maven变得简单 相比而言 Ant...

    Maven是一个项目管理工具,它包含了一个对象模型 一组标准集合,一个依赖管理系统 和用来运行定义在生命周期阶段中插件目标和逻辑

    Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,,这个pom.xml包我后面会叙述,不过已经学习过maven的 人... maven管理项目生命周期都是基于插件完成的

    chm版本Maven教程

    Maven 构建生命周期 Maven 构建配置文件 Maven存储库 Maven插件 Maven创建Java项目 使用Maven构建和测试Java项目 Maven外部依赖 Maven项目文档 Maven项目模板 Maven快照 Maven构建自动化 Maven依赖管理 Maven自动化...

    Maven的生命周期阶段.docx

    Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、...Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。

    Maven 默认插件以及功能.docx

    面是执行 mvn clean install 产生的执行日志,通过日志可以看到每个步骤都显示 plugin 名称,版本号,生命周期阶段,执行操作等。 maven-clean-plugin:2.5:clean (default-clean) maven-resources-plugin:2.6:...

    maven window下安装包

    第7章:生命周期和插件/7.5 插件配置/7.5.2 POM文件中进行插件参数设置 第7章:生命周期和插件/7.5 插件配置/7.5.3 POM文件中进行插件任务设置 第7章:生命周期和插件/7.6 获取插件信息/7.6.1 在线插件信息 第7章:...

    apache-maven-3.9.5-bin windows 64bit x86下载

    3、项目生命周期管理:Maven提供了一系列的构建阶段(如编译、测试、打包、部署等),你可以在pom.xml中配置这些阶段的行为,Maven会按照定义好的生命周期来执行相应的操作。 4、插件系统:Maven支持插件机制,你...

    maven课程讲义.doc

    关于maven的学习资料Maven是apache下的开源项目,项目管理工具,管理java项目。 1、项目对象模型 (Project Object Model) POM对象模型,每个maven工程中都有一个...5、maven 管理项目生命周期过程都是基于插件完成的

    Maven:构建和管理Java项目Maven:构建和管理Java项目

    maven ...强调 Maven 的生命周期和插件机制,以及如何使用插件扩展 Maven 的功能。 第三部分:Maven 的优势和应用 探讨 Maven 在项目开发中的优势和受欢迎程度。解释 Maven 的模块化和标准化特点,

    Maven生命周期和及插件原理用法详解

    主要介绍了Maven生命周期和及插件原理用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值的相关资料

    Maven3实战视频教程(14集)

    课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 ...Maven3_10_生命周期和插件简介 Maven3_11_插件基础 Maven3_12_插件的应用 Maven3_13_测试 Maven3_14_发布web项目 Maven3实战笔记 Maven配置

    rserve-maven-plugin:用于 Rserve 生命周期的 Maven 插件

    rserve-maven-插件用于 Rserve 生命周期的 Maven 插件支持 rserve:start rserve:stop 和 rserve:run mojos。 Start 将启动 Rserve 并以最少的输出退出到 maven 控制台,stop 将停止并退出,run 将阻止并将调试信息...

    Maven Book (ZH)_ Maven权威指南.pdf

    System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你 用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的...

    maven-3.1.1

    它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)...

    xjar-maven-plugin:XJar-Maven-Plugin是对XJar的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,以更便捷的方式集成XJar

    XJar-Maven-Plugin是对的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,从而更加便捷的方式集成了 。 GitHub: : 什么是XJar XJar是基于对JAR包内部资源的加密以及扩展ClassLoader来...

    apache-maven-3.1.1.zip

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期...

    apache-maven-3.5.4

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期...

Global site tag (gtag.js) - Google Analytics