用户可以通过两种方式调用Maven插件目标。
maven命令中,带冒号的方式是指定要执行的插件目标。不带冒号的方式是执行生命周期。
第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定
这样用户在命令行只是输入生命周期阶段而已。
例如:Maven默认将maven-compiler-plugin插件的compile目标与compile生命周期阶段绑定,
因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。
第二种方式是直接在命令行指定要执行的插件目标。
例如:mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。
插件目标(goal)可以附着在生命周期阶段上。随着Maven沿着生命周期的阶段移动,它会执行附着在特定阶段上的目标。每个阶段可能绑定了零个或者多个目标。
二、查看介绍
例如:org.apache.maven.plugins:maven-antrun-plugin
mvn help:describe -Dplugin=antrun -Ddetail (插件的介绍)
mvn help:describe -Dplugin=antrun -Dgoal=run -Ddetail(插件目标的介绍)
autrun为插件的命令名,如archetype:generate中的archetype
插件的prefix属性
maven有默认的插件版本,如果要覆盖默认的插件,可以在pom中,重新定义插件版本。
War plugin主要负责web工程的打包。
War plugin主要从以上三个地方获取资源,然后进行打包,分别为:
src/main/webapp:
主要是web app的一些资源文件,如图片,javascript,css,jsp,velocity模板等,同时最重要的WEB-INF/web.xml也在这个目录下,这些文件将会被打包至WEB-INF目录下。
target/classes:
项目的class 和resource 文件,将会被打包至WEB-INF/classes 目录下。target/classes目录下的文件都来自于src/main/java和src/main/resources下。
项目的依赖:
项目依赖的jar包将会被全部拷贝到WEB-INF/lib 目录下。
接下来进行打包,顺序为:
首先将所有的资源打包到webappDirectory 目录,然后在此目录上生成war 文件,这个目录和war 文件都会在target 目录下,文件名分别为xxx-1.0.0 和xxx-1.0.0.war 这样的命名规范。
在打包的过程中有一个小问题,就是如果对webapp 下的某些文件进行resource filter,如淘宝的不少项目里面会在web.xml中设置一些占位符,这些占位符要求在打包的过程中进行替换,这样才能保证程序的顺利运行。
这里我们需要介入一个webResources的概念,webResources主要是声明要进行resource filter的资源,filter文件就是在resource filter 章节介绍的全局filter 文件。
如下图,我们对象WEB-INF 目录下的所有xml 文件进行过滤,同时要设置下过滤后的资源存放的目标路径(相对于war 的根目录),也就是targetPath:
web工程的项目结构