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生命周期中,那是更高级的话题,留作以后讨论。
分享到:
相关推荐
生命周期中的每个阶段对应至少一个插件的目标。当我们在命令行中执行如`mvn install`时,实际上是触发了默认生命周期的`install`阶段。在执行过程中,Maven会自动寻找与阶段匹配的插件目标,并按照顺序执行。 ### 4...
Maven插件是用来执行具体任务的工具,每个插件可以包含多个目标(Goal),每个目标对应着生命周期中的某个阶段。插件通常用来执行特定的任务,如编译Java源代码、运行单元测试、打包应用程序等。 - **maven-...
插件通过目标(Goals)来实现特定的任务,这些目标可以单独调用,也可以在生命周期的不同阶段中自动执行。 在压缩包内,我们可能会找到以下文件和目录: 1. `bin/`:包含了Maven的可执行脚本,如`mvn`和`mvn.cmd`...
插件在Maven生命周期中的作用至关重要,因为它们负责执行具体的任务。它们是可插拔的,这意味着可以根据项目的需要替换或增强插件。此外,Maven的生命周期和插件机制保证了所有使用Maven的项目遵循一致的构建标准,...
8. **插件管理**:Maven2插件允许添加和配置额外的Maven插件,以扩展Maven的功能,如生成站点文档、代码覆盖率报告等。 9. **问题检测**:Eclipse插件可以检查POM.xml文件的语法错误和潜在问题,提供修正建议。 在...
Maven插件是Maven生命周期中的执行单元,它们执行特定的任务,如编译源代码、打包项目、运行测试等。Maven仓库插件则是专门用于处理仓库操作的插件,包括下载依赖、上传构建的工件以及管理仓库配置。 ** Maven仓库...
4. **插件生命周期集成**: Maven插件可以与Maven的生命周期阶段关联,例如,可以在`compile`阶段之前或之后执行。使用`@phase`注解可以指定Mojo的生命周期阶段。 5. **参数传递**: Maven插件可以通过命令行参数...
Maven3 插件是 Maven 构建工具中的一个重要组成部分,它极大地扩展了 Maven 的功能,使得开发者能够自动化处理各种特定的构建任务。...在实际项目中,开发者应根据需要选择和定制适合的Maven插件。
Maven是Java开发中的一个项目管理工具,它极大地简化了构建、依赖管理和项目的生命周期。本资源“Maven学习必要插件”提供了一套预配置好的Maven环境,以便开发者可以快速投入到Maven的使用中。在本文中,我们将深入...
Eclipse是一款广泛使用的Java集成开发环境(IDE),而Maven插件则是将Maven的功能整合到Eclipse中,方便开发者在IDE内进行Maven项目操作。本文将详细介绍如何安装与配置Maven安装包和Eclipse Maven插件。 首先,...
在Java开发领域,Maven是广泛使用的项目管理工具,它帮助开发者构建、依赖管理和项目...开发者需要理解Maven的生命周期和插件机制,才能灵活地设计和实现自定义插件。同时,良好的文档和测试也是确保插件质量的关键。
Maven是一个强大的项目管理和构建工具,广泛用于Java应用的开发,它通过管理项目的依赖关系、构建流程以及生命周期,帮助开发者高效地构建和维护项目。 离线安装Eclipse Maven插件的过程主要包括以下步骤: 1. **...
【标题】"maven eclipse ...你可以创建新的Maven项目,管理依赖,执行构建操作,以及利用Maven的各种生命周期阶段和插件功能,提高你的开发效率。记住,定期更新Maven插件以获取最新的功能和修复,即使是在离线环境下。
在实际开发中,Eclipse Maven插件和SVN插件的结合使用对于Java开发者来说非常有益。m2e可以帮助管理项目依赖,构建和打包应用,而SVN插件则确保了团队成员之间的代码同步和历史追踪。这两个工具的集成,使得Eclipse...
Maven通过一个项目对象模型(Project Object Model,POM),依赖管理和标准化的构建生命周期来简化项目构建、报告和文档的生成。通过在POM中定义项目依赖,Maven可以自动下载所需的库,并构建项目。 2. MyEclipse...
在项目中右键选择“Run As” -> "Maven Build",如果能正常执行Maven生命周期中的命令(如clean、install等),说明插件已经成功安装。 7. **使用Maven插件**:在Eclipse中,你可以利用Maven插件进行各种操作,例如...
3. **构建和清理**:通过右键点击项目,选择“Run As” -> “Maven Build”,可以执行Maven的各种生命周期目标,如编译(compile)、测试(test)、打包(package)、安装(install)和部署(deploy)。同时,也可以...