maven中的plugins 和maven jar pluginnManagement有什么区别

3374人阅读
maven-site-plugin是一个负责为Java项目生成静态HTML网站的插件。这个插件非常的有用,里面可以嵌入各种插件,比如用来对代码检查bug的findbugs,检查代码风格的checkstyle,生成testng测试报告的surefire等。先来看一下关于这个插件的配置的一个例子:
CheckStyle
请注意,checkstyle可以接受一个定制的规则文件,比如我这里的叫my_checkstyle.xml。这是从eclipse中导出的。
其实自己编辑这份xml文档也可以,语法规则还是很简单的。
有一个Maven插件可以帮助我对Java代码进行格式化,这个插件不属于maven-site-plugin管理,但是很有用。看我下面的配置:
这个插件需要一个从Eclipse导出的代表当前Eclipse编码风格的xml文件(你也可以手动编辑):
maven-java-formatter-plugin 对于我可是帮了大忙,我不用Eclipse开发,每次只要执行mvn clean compile,就会自动格式化我的Java代码。然后稍作修改,就满足CheckStyle的规则了。原来还用过一个叫做jalopy,那东西现在要付钱了,免费版本我记得并不好用。
Javadoc plugin
现在聊聊生成Java文档。maven-javadoc-plugin可以根据注释,自动生成文档。但是如果你还想要在文档里面看到UML静态结构图,需要制定使用UmlGraph.在我的Ubuntu下面,需要事先做一些准备工作:
1.下载UmlGraph 并安装,可以参考这里的文档:
&(javadoc tool已经在安装jdk的时候装好了)
2.apt-get install graphviz
3.apt-get install plotutils
要想使用surefire-report-plugin产生报告,还需要在site-plugin之外配置一个maven-surefire-plugin,里面指定了testng.xml,因为我用TestNG开发测试程序。
现在执行一下mvn clean site
会编译,测试,扫描代码,生成html文件.最后通过浏览器打开target/site/下面的project-reports.html。仔细看看,Java社区多么规范,Maven多么方便啊。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7062707次
积分:61841
积分:61841
排名:第34名
原创:250篇
转载:2619篇
评论:666条
(36)(92)(17)(25)(37)(63)(7)(74)(67)(95)(177)(114)(86)(40)(43)(71)(14)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(141)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)
先将我用到的自定义变量贴过来,防止插件中出现一些变量,大家不理解
Java代码&&
&!--&全局属性配置&--&&& &properties&&& &&&&&project.build.name&tools&/project.build.name&&&
&&&&&project.build.sourceEncoding&UTF-8&/project.build.sourceEncoding&&&
&/properties&&&
project.build.name:
&用来定义war包名称&
project.build.sourceEncoding:
&用来定义资源文件的编码格式&
下面开始讲解常用的maven插件配置&
一、编译插件
Java代码&&
&!--&编译插件&--&&& &plugin&&& &&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-compiler-plugin&/artifactId&&&
&&&&&configuration&&& &&&&&&&&&source&1.6&/source&&&
&&&&&&&&&target&1.6&/target&&&
&&&&&&&&&encoding&${project.build.sourceEncoding}&/encoding&&&
&&&&&/configuration&&& &/plugin&&&
源代码编译版本;&
目标平台编译版本;&
encoding:
字符集编码。&
二、设置资源文件的编码方式
Java代码&&
&!--&设置资源文件的编码方式&--&&& &plugin&&& &&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-resources-plugin&/artifactId&&&
&&&&&version&2.4.3&/version&&&
&&&&&executions&&& &&&&&&&&&execution&&& &&&&&&&&&&&&&phase&compile&/phase&&& &&&&&&&&&/execution&&& &&&&&/executions&&& &&&&&configuration&&& &&&&&&&&&encoding&${project.build.sourceEncoding}&/encoding&&&
&&&&&/configuration&&& &/plugin&&&
xml、properties文件都是资源文件,编码的时候遇到中文总要进行转码!用什么编码?UTF-8,那就记得强制
&encoding&${project.build.sourceEncoding}&/encoding&
三、自动拷贝jar包到target目录
Java代码&&
&!--&依赖插件&--&&& &plugin&&& &&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-dependency-plugin&/artifactId&&&
&&&&&version&2.6&/version&&&
&&&&&executions&&& &&&&&&&&&execution&&& &&&&&&&&&&&&&id&copy-dependencies&/id&&& &&&&&&&&&&&&&phase&compile&/phase&&& &&&&&&&&&&&&&goals&&& &&&&&&&&&&&&&&&&&goal&copy-dependencies&/goal&&&
&&&&&&&&&&&&&/goals&&& &&&&&&&&&&&&&configuration&&& &&&&&&&&&&&&&&&&&!--&${project.build.directory}为Maven内置变量,缺省为target&--&&&
&&&&&&&&&&&&&&&&&outputDirectory&${project.build.directory}/lib&/outputDirectory&&&
&&&&&&&&&&&&&&&&&!--&表示是否不包含间接依赖的包&--&&& &&&&&&&&&&&&&&&&&excludeTransitive&false&/excludeTransitive&&&
&&&&&&&&&&&&&&&&&!--&表示复制的jar文件去掉版本信息&--&&& &&&&&&&&&&&&&&&&&stripVersion&true&/stripVersion&&&
&&&&&&&&&&&&&/configuration&&& &&&&&&&&&/execution&&& &&&&&/executions&&& &/plugin&&&
在部署war包时,需要将项目依赖的jar包,也打到war包中,因此就会用到上述插件&
四、生成源代码jar包
Java代码&&
&!--&源代码打包插件&--&&& &plugin&&& &&&&&artifactId&maven-source-plugin&/artifactId&&&
&&&&&version&2.1&/version&&&
&&&&&configuration&&& &&&&&&&&&!--&&finalName&${project.build.name}&/finalName&&--&&&
&&&&&&&&&attach&true&/attach&&&
&&&&&&&&&encoding&${project.build.sourceEncoding}&/encoding&&&
&&&&&/configuration&&& &&&&&executions&&& &&&&&&&&&execution&&& &&&&&&&&&&&&&phase&compile&/phase&&& &&&&&&&&&&&&&goals&&& &&&&&&&&&&&&&&&&&goal&jar&/goal&&& &&&&&&&&&&&&&/goals&&& &&&&&&&&&/execution&&& &&&&&/executions&&& &/plugin&&&
该插件主要用于在打jar包时,把源代码也打成jar包&
五、将项目打成jar包
Java代码&&
&!--&jar包插件&--&&& &plugin&&& &&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-jar-plugin&/artifactId&&&
&&&&&version&2.4&/version&&&
&&&&&configuration&&& &&&&&&&&&archive&&& &&&&&&&&&&&&&manifest&&& &&&&&&&&&&&&&&&&&!--&告知&maven-jar-plugin添加一个&Class-Path元素到&MANIFEST.MF文件,以及在Class-Path元素中包括所有依赖项&--&&&
&&&&&&&&&&&&&&&&&addClasspath&true&/addClasspath&&&
&&&&&&&&&&&&&&&&&!--&所有的依赖项应该位于&lib文件夹&--&&&
&&&&&&&&&&&&&&&&&classpathPrefix&lib/&/classpathPrefix&&&
&&&&&&&&&&&&&&&&&!--&当用户使用&lib命令执行JAR文件时,使用该元素定义将要执行的类名&--&&&
&&&&&&&&&&&&&&&&&mainClass&com.zhengtian.tools.service.phone.MobilePhoneTool&/mainClass&&&
&&&&&&&&&&&&&/manifest&&& &&&&&&&&&/archive&&& &&&&&/configuration&&& &/plugin&&&
在将项目打成jar包时,有时会需要将项目打成可以直接运行的jar包,因此就需要将项目依赖的jar包也打入jar包中,此时需要在Eclipse上安装例外一个插件,用来打可执行jar包,详情见链接
六、将项目打成war包
Java代码&&
&!--&war插件&--&&& &plugin&&& &&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-war-plugin&/artifactId&&&
&&&&&version&2.1.1&/version&&&
&&&&&configuration&&& &&&&&&&&&!--&&warName&${project.build.name}&/warName&&--&&&
&&&&&/configuration&&& &/plugin&&&
encoding:
强制字符集编码&
war包名字——platform.war&
webappDirectory:
产生war前,用于存放构建war包的目录——target/platform。&
warSourceDirectory:
我把web工程搞成了eclipse下的WTP类型。我不喜欢maven产生的webapp目录,更喜欢WebContent!&
需要注意的是:
采用上述插件部署项目的话,使用
clean package tomcat:redeploy
命令。使用该命令前,需要先启动tomcat,实际上是为了让tomcat启动manager项目,实现动态部署&
此部署方式虽然也是动态部署的范畴,但是每次修改文件后,需要手动再次重新部署,才会加载更改。&
如果想让tomcat自动扫描项目的改动,自动加载,那么需要将maven工程的java全部编译的webapp目录下,然后将jar包和资源文件也打到webapp目录。最后在$CATALINA_HOME/conf /Catalina/localhost中添加一个xml文件,修改docbase为webapp目录。&
Tomcat常用的部署方式介绍:
配置描述:当你的pom文件中把你的当前项目的packaging配置为war后,maven会使用该插件将当前项目生成war文件,但是有时候我们不想要war文件,只想让maven生成当前项目的网站目录结构,尤其是在调试的时候,因为生成war文件的同时,会生成当前项目的网站目录结构,这样一来,浪费了打包的时间和磁盘的空间!
maven使用war插件生成war文件所用的目标(goal)为war,从帮助文档中可以看出,war插件还有一个目标(goal)是exploded,即,只生成目录结构,而不生成war文件。
参见:http://maven.apache.org/plugins/maven-war-plugin/plugin-info.html
可以在当前目录下直接使用mvn war:exploded,就能生成当前项目的网站目录结构。
使用mvn war:exploded生成网站目录结构的时候,war插件会把src/main/webapp目录下的内容全部copy到target/${finalName}目录下,但是,有时候webapp里的一些资源部需要copy,比如我会在src/main/webapp的js目录下放很多jQuery的插件,其中包括插件的帮助文档;但是我可能只会用到其中一部分插件。所以在生成网站目录结构的时候,我根本不需要把src/main/webapp的js目录下的所以文件都copy到target/${finalName}目录中,这时候就需要对exploded目标(goal)进行资源过滤了——不把没用的资源copy到网站的目录结构中去:
&plugin&&&
&&&&&artifactId&maven-war-plugin&/artifactId&&&
&&&&&configuration&&&
&&&&&&&&&warSourceExcludes&js/参考/**&/warSourceExcludes&&&
&&&&&/configuration&&&
&/plugin&&&
说明:上面的配置,使用了war插件的warSourceExcludes参数,该参数是一个String类型,需要把被排除的路径或文件使用逗号(comma)间隔开。
1、/archives/1335
2、http://maven.apache.org/plugins/maven-war-plugin/exploded-mojo.html#warSourceDirectory
七、在打包时,需要清空一些指定的目录
配置描述:maven提供了很多有用插件,如mvn clean使用到的maven-clean-plugin,mvn compile使用到的maven-compile-plugin等,这些插件可以通过pom文件绑定到maven三个生命周期(life-cycle)的各阶段(phase)上,也可以在命令行(如Windows下的cmd)中单独由mvn命令调用,如mvn clean,可以调用maven-clean-plugin的clean目标(goal)。对于绑定到各阶段(phase)运行的插件的参数(parameter)可以用&configuration&标签(tag)配置,但是在该插件在命令行下单独由mvn命令调用,那么这个参数该如何使用pom文件配置呢?比如,在一个J2EE项目中,想使用mvn
clean命令清除target里的内容的同时,也清除tomcat/webapp下的相应目录,该怎么办呢?这就需要在pom文件中对插件进行全局配置了。
&plugin&&&
&&&&&artifactId&maven-clean-plugin&/artifactId&&&
&&&&&configuration&&&
&&&&&&&&&verbose&true&/verbose&&&
&&&&&&&&&filesets&&&
&&&&&&&&&&&&&fileset&&&
&&&&&&&&&&&&&&&&&directory&c:/a&/directory&&&
&&&&&&&&&&&&&/fileset&&&
&&&&&&&/filesets&&&
&&&&&/configuration&&&
&/plugin&&&
插件的配置分为局部配置和全局配置,本文中对antrun和resource插件的配置是局部配置,对clean插件的配置是全局配置,能看出差别吧?
局部配置的&configuration&标签(tag)放在&execution&标签(tag)里边,而全局配置的&configuration&标签(tag)则放在&plugin&标签(tag)里边,因为全局配置里根本就没有&execution&标签(tag),因为全局配置针对的是该插件的全部目标(goal)配置的!
本例中,删除的是C:/a目录,即,当用户在该maven项目中执行mvn clean后,除了删除clean插件默认的project.build.directory,&project.build.outputDirectory,project.build.testOutputDirectory,
和&project.reporting.outputDirectory目录外
(参考:),
还会删除C:/a目录。
注意,该配置仅针对本项目有效,即,用户在当前项目下使用mvn clean时,会删除C:/a目录;当用户在其他没有如此配置clean插件的maven项目中执行mvn clean时,不会删除C:/a目录。
设置fileset的目录时候用到的&directory&标签不能乱用,比如&dir&,否则maven没法识别,因为maven使用pom设置插件参数(parameter)的时候用的是设置java bean的方式,之所以用&directory&标签,是因为在org.apache.maven.plugin.clean.Fileset.java中,Fileset类只有如下成员变量:
(参见:http://search.maven.org/remotecontent?filepath=org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1-source-release.zip)
private&File&&&
&& private&String[]&&&
&& private&String[]&&&
&& private&boolean&followS&&
相关阅读:
1、Maven clean plugin - delete additional directories
八、利用tomcat-maven-plugin插件将项目自动打包并部署到tomcat中
Java代码&&
&&!--&tomcat插件&--&&& &&&&&plugin&&& &&&&&&&&&groupId&org.codehaus.mojo&/groupId&&&
&&&&&&&&&artifactId&tomcat-maven-plugin&/artifactId&&&
&&&&&&&&&configuration&&& &&&&&&&&&&&&&server&tomcat6-manager&/server&&&
&&&&&&&&&&&&&path&/${project.build.name}&/path&&&
&&&&&&&&&&&&&url&http://localhost:8080/manager&/url&&&
&&&&&&&&&&&&&username&admin&/username&&& &&&&&&&&&&&&&password&admin&/password&&& &&&&&&&&&/configuration&&& &&&&&&&&&executions&&& &&&&&&&&&&&&&execution&&& &&&&&&&&&&&&&&&&&phase&deploy&/phase&&& &&&&&&&&&&&&&&&&&goals&&& &&&&&&&&&&&&&&&&&&&&&goal&deploy&/goal&&& &&&&&&&&&&&&&&&&&/goals&&& &&&&&&&&&&&&&/execution&&& &&&&&&&&&/executions&&& &&&&&/plugin&&& &/plugins&&&
是指项目部署到tomcat后的项目名称&
是指tomcat的manager访问地址&
这个是tomcat服务名称设置,需要配置maven的settings.xml文件,在servers节点中手动配置server,如下所示:&
Java代码&&
&server&&& &&&&&id&tomcat6-manager&/id&&& &&&&&username&admin&/username&&& &&&&&password&admin&/password&&& &/server&&&
九、利用cargo-maven2-plugin插件将项目自动打包并部署到tomcat中
配置描述:使用maven做web项目时,cargo插件可以帮助你完成WAR包到服务器的部署及服务器的启动和关闭等工作,方便,快速!
&plugin&&&
&&&&&groupId&org.codehaus.cargo&/groupId&&&
&&&&&artifactId&cargo-maven2-plugin&/artifactId&&&
&&&&&version&1.2.0&/version&&&
&&&&&configuration&&&
&&&&&&&&&container&&&
&&&&&&&&&&&&&containerId&${server_name}&/containerId&&&
&&&&&&&&&&&&&home&${server_home}&/home&&&
&&&&&&&&&/container&&&
&&&&&&&&&configuration&&&
&&&&&&&&&&&&&type&existing&/type&&&
&&&&&&&&&&&&&home&${server_home}&/home&&&
&&&&&&&&&&&&&properties&&&
&&&&&&&&&&&&&&&&&cargo.servlet.port&8088&/cargo.servlet.port&&&
&&&&&&&&&&&&&/properties&&&
&&&&&&&&&/configuration&&&
&&&&&/configuration&&&
&/plugin&&&
注意,如果你的tomcat服务器的端口使用的不是默认的8080(如本例中的8088),则需要使用cargo.servlet.port参数将cargo的监听端口也配置到tomcat的那个监听端口(如本例中的8088),否则使用mvn cargo:run启动的服务器会在120000毫秒(120秒)后自动关闭!
mvn cargo:start命令完成WAR包部署后,启动服务器,然后会将服务器立即关掉;
mvn cargo:run命令完成WAR包部署后,启动服务器,直到你Ctrl+C将服务器关掉;
mvn cargo:stop命令关闭服务器。
Java代码&&
&plugin&&& &&&&&&&&&&&&&&&&&!--&指定插件名称及版本号&--&&& &&&&&&&&&&&&&&&&&groupId&org.codehaus.cargo&/groupId&&&
&&&&&&&&&&&&&&&&&artifactId&cargo-maven2-plugin&/artifactId&&&
&&&&&&&&&&&&&&&&&version&1.2.3&/version&&&
&&&&&&&&&&&&&&&&&!--&插件的Tomcat6.x配置&--&&& &&&&&&&&&&&&&&&&&configuration&&& &&&&&&&&&&&&&&&&&&&&&!--&容器的配置&--&&& &&&&&&&&&&&&&&&&&&&&&container&&& &&&&&&&&&&&&&&&&&&&&&&&&&!--&指定服务器版本&--&&& &&&&&&&&&&&&&&&&&&&&&&&&&containerId&tomcat6x&/containerId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&!--&指定服务器的安装目录&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&home&E:\Program&Files\tomcat-6.0.32&/home&&&
&&&&&&&&&&&&&&&&&&&&&/container&&& &&&&&&&&&&&&&&&&&&&&&!--&具体的配置&--&&& &&&&&&&&&&&&&&&&&&&&&configuration&&& &&&&&&&&&&&&&&&&&&&&&&&&&!--&部署模式:existing、standalone等&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&type&existing&/type&&&
&&&&&&&&&&&&&&&&&&&&&&&&&!--&Tomcat的位置,即catalina.home&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&home&E:\Program&Files\tomcat-6.0.32&/home&&&
&&&&&&&&&&&&&&&&&&&&&&&&&!--&配置属性&--&&& &&&&&&&&&&&&&&&&&&&&&&&&&properties&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&!--&管理地址&--&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&cargo.tomcat.manager.url&http://localhost:8080/manager&/cargo.tomcat.manager.url&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!--&Tomcat用户名&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cargo.remote.username&admin&/cargo.remote.username&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!--&Tomcat密码&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cargo.remote.password&admin&/cargo.remote.password&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!--&&cargo.jvmargs&&-Xdebug&-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787&&/cargo.jvmargs&&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&/properties&&& &&&&&&&&&&&&&&&&&&&&&/configuration&&& &&&&&&&&&&&&&&&&&/configuration&&& &&&&&&&&&&&&&/plugin&&&
username和password:
是指tomcat的tomcat-users.xml文件中配置的,文件路径为E:\Program Files\tomcat-6.0.32\conf\tomcat-users.xml,如下所示:&
Java代码&&
&role&rolename=&manager&/&&&&
&user&password=&admin&&roles=&manager&&username=&admin&/&&&&
十、有时候插件检查不通过,需要人为的忽略对有些插件的检查
Java代码&&
&!--&插件管理&--&&& &pluginManagement&&& &&&&&plugins&&& &&&&&&&&&plugin&&& &&&&&&&&&&&&&groupId&org.eclipse.m2e&/groupId&&&
&&&&&&&&&&&&&artifactId&lifecycle-mapping&/artifactId&&&
&&&&&&&&&&&&&version&1.0.0&/version&&&
&&&&&&&&&&&&&configuration&&& &&&&&&&&&&&&&&&&&lifecycleMappingMetadata&&&
&&&&&&&&&&&&&&&&&&&&&pluginExecutions&&& &&&&&&&&&&&&&&&&&&&&&&&&&!--&忽略2.0以上版本的maven-dependency-plugin的检查&--&&&
&&&&&&&&&&&&&&&&&&&&&&&&&pluginExecution&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&pluginExecutionFilter&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&artifactId&maven-dependency-plugin&/artifactId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&versionRange&[2.0,)&/versionRange&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&goals&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&goal&copy-dependencies&/goal&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/goals&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&/pluginExecutionFilter&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&action&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ignore&/&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/action&&& &&&&&&&&&&&&&&&&&&&&&&&&&/pluginExecution&&&
&&&&&&&&&&&&&&&&&&&&&/pluginExecutions&&& &&&&&&&&&&&&&&&&&/lifecycleMappingMetadata&&&
&&&&&&&&&&&&&/configuration&&& &&&&&&&&&/plugin&&& &&&&&/plugins&&& &/pluginManagement&&&
十一、maven-resources-plugin
配置描述:把web项目的输出copy到tomcat的webapp下
&plugin&&&
&&&&&groupId&org.apache.maven.plugins&/groupId&&&
&&&&&artifactId&maven-resources-plugin&/artifactId&&&
&&&&&version&2.5&/version&&&
&&&&&executions&&&
&&&&&&&&&execution&&&
&&&&&&&&&&&&&id&deploy-website&/id&&&
&&&&&&&&&&&&&phase&package&/phase&&&
&&&&&&&&&&&&&goals&&&
&&&&&&&&&&&&&&&&&goal&copy-resources&/goal&&&
&&&&&&&&&&&&&/goals&&&
&&&&&&&&&&&&&configuration&&&
&&&&&&&&&&&&&&&&&outputDirectory&${server_home}/webapps/${project.build.finalName}&/outputDirectory&&&
&&&&&&&&&&&&&&&&&resources&&&
&&&&&&&&&&&&&&&&&&&&&resource&&&
&&&&&&&&&&&&&&&&&&&&&&&&&directory&${project.build.directory}/${project.build.finalName}&/directory&&&
&&&&&&&&&&&&&&&&&&&&&/resource&&&
&&&&&&&&&&&&&&&&&/resources&&&
&&&&&&&&&&&&&/configuration&&&
&&&&&&&&&/execution&&&
&&&&&/executions&&&
&/plugin&&&
十二、maven-antrun-plugin
配置描述:在maven中使用antrun调用bat文件
(我这里调用的是tomcat的startup.bat文件,但是没有成功启动tomcat,提示说环境变量没配置,可我双击运行startup.bat将就可以运行,奇怪了……)
(现在知道原因了:antrun运行的bat文件,实际上是在${basedir}上运行bat文件里的内容,而tomcat的startup.bat文件在运行时会调用同目录下的其他bat文件,而这些bat文件在${basedir}目录下不存在!
解决方法:使用令一个bat文件,如mystartup.bat运行startup.bat,注意在运行startup.bat之前,需要在mystartup.bat文件中把目录切换到startup.bat所在的目录,搞定!
具体做法,参见:使用Maven的antrun插件启动Tomcat的两种方法:)
&plugin&&&
&&&&&artifactId&maven-antrun-plugin&/artifactId&&&
&&&&&executions&&&
&&&&&&&execution&&&
&&&&&&&&&id&start-server&/id&&&
&&&&&&&&&phase&package&/phase&&&
&&&&&&&&&configuration&&&
&&&&&&&&&&&tasks&&&
&&&&&&&&&&&&&&&&exec&&
&&&&&&&&&&&&&&&&&executable=&${server_home}/bin/startup.bat&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&/exec&&&
&&&&&&&&&&&/tasks&&&
&&&&&&&&&/configuration&&&
&&&&&&&&&goals&&&
&&&&&&&&&&&goal&run&/goal&&&
&&&&&&&&&/goals&&&
&&&&&&&/execution&&&
&&&&&/executions&&&
&/plugin&&&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13941次
排名:千里之外
转载:30篇
(1)(1)(2)(1)(8)(5)(2)(3)(8)(1)206072人阅读
maven(3)
什么是pom?&&& pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
快速察看:&project&& &modelVersion&4.0.0&/modelVersion&&!--maven2.0必须是这样写,现在是maven2唯一支持的版本--&& &!-- 基础设置 --&& &groupId&...&/groupId&& &artifactId&...&/artifactId&& &version&...&/version&& &packaging&...&/packaging&
&&&name&...&/name&
&&&url&...&/url&& &dependencies&...&/dependencies&& &parent&...&/parent&& &dependencyManagement&...&/dependencyManagement&& &modules&...&/modules&& &properties&...&/properties&& &!--构建设置 --&& &build&...&/build&& &reporting&...&/reporting&& &!-- 更多项目信息 --&& &name&...&/name&& &description&...&/description&& &url&...&/url&& &inceptionYear&...&/inceptionYear&& &licenses&...&/licenses&& &organization&...&/organization&& &developers&...&/developers&& &contributors&...&/contributors&& &!-- 环境设置--&& &issueManagement&...&/issueManagement&& &ciManagement&...&/ciManagement&& &mailingLists&...&/mailingLists&&& &scm&...&/scm&& &prerequisites&...&/prerequisites&& &repositories&...&/repositories&& &pluginRepositories&...&/pluginRepositories&& &distributionManagement&...&/distributionManagement&& &profiles&...&/profiles&&/project&
基本内容:
POM包括了所有的项目信息
groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
artifactId:项目的通用名称
version:项目的版本
packaging:打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par
name:用户描述项目的名称,无关紧要的东西,可选
url:应该是只是写明开发团队的网站,无关紧要,可选
classifer:分类
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。
POM关系:主要为依赖,继承,合成
依赖关系:
&dependencies&&&& &dependency&&&&&&
&groupId&junit&/groupId&&&&&&
&artifactId&junit&/artifactId&&&&&&
&version&4.0&/version&&&&&&
&type&jar&/type&&&&&& &scope&test&/scope&&&&&&
&optional&true&/optional&&&& &/dependency&
&& &&dependency&
&& & & &&groupId&com.alibaba.china.shared&/groupId&
&& & & &&artifactId&alibaba.apollo.webx&/artifactId&
&& & & &&version&2.5.0&/version&
&& & & &&exclusions&
&& & & & &&exclusion&
&& & & & & &&artifactId&org.slf4j.slf4j-api&/artifactId&
&& & & & & &&groupId&com.alibaba.external&/groupId&
&& & & & &&/exclusion&
&& & & & &....
&& & & &&/exclusions&
&/dependencies&
其中groupId, artifactId,
version这三个组合标示依赖的具体工程,而且 这个依赖工程必需是maven中心包管理范围内的,如果碰上非开源包,maven支持不了这个包,那么则有有三种 方法处理:
1.本地安装这个插件install plugin
例如:mvn install:intall-file -Dfile=non-maven-proj.jar -DgroupId=som.group -DartifactId=non-maven-proj -Dversion=1
2.创建自己的repositories并且部署这个包,使用类似上面的deploy:deploy-file命令,
3.设置scope为system,并且指定系统路径。
dependency里属性介绍:
type:默认为jar类型,常用的类型有:jar,ejb-client,test-jar...,可设置plugins中的extensions值为true后在增加 新的类型,
scope:是用来指定当前包的依赖范围,
optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。
exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion.
exclusion:是将B从依赖树中删除,如上配置,alibaba.apollo.webx不想使用com.alibaba.external&&,但是alibaba.apollo.webx是集成了com.alibaba.external,r所以就需要排除掉.
如果一个工程是parent或者aggregation(即mutil-module的)的,那么必须在packing赋值为pom,child工程从parent继承的包括:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration
parent的使用方法如下:
&parent& &&& &groupId&org.codehaus.mojo&/groupId& &&&
&artifactId&my-parent&/artifactId& &&&
&version&2.0&/version& &&&
&relativePath&../my-parent&/relativePath& & &/parent&
relativePath是可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前.
dependencyManagement:是用于帮助管理chidren的dependencies的。例如如果parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以集中管理 依赖的详情
modules:对于多模块的project,outer-module没有必需考虑inner-module的dependencies,当列出modules的时候,modules的顺序是不重要的,因为maven会自动根据依赖关系来拓扑排序,
modules例子如下 :
&module&my-project&/module&
&module&other-project&/module&
properties:是为pom定义一些常量,在pom中的其它地方可以直接引用。
定义方式如下:
&properties&
&& & &&file.encoding&UTF-8&/file_encoding&
&& & &&java.source.version&1.5&/java_source_version&
&& & &&java.target.version&1.5&/java_target_version&
&/properties&
使用方式 如下 :
${file.encoding}
还可以使用project.xx引用pom里定义的其它属性:如$(project.version}&
build设置:
defaultGoal:默认的目标,必须跟命令行上的参数相同,如:jar:jar,或者与时期parse相同,例如install
directory:指定build target目标的目录,默认为$(basedir}/target,即项目根目录下的target
finalName:指定去掉后缀的工程名字,例如:默认为${artifactId}-${version}
filters:用于定义指定filter属性的位置,例如filter元素赋值filters/filter1.properties,那么这个文件里面就可以定义name=value对,这个name=value对的值就可以在工程pom中通过${name}引用,默认的filter目录是${basedir}/src/main/fiters/
resources:描述工程中资源的位置&
&resource& &&&&&&&
&targetPath&META-INF/plexus&/targetPath& &&&&&&&
&filtering&false&/filtering& &&&&&&&
&directory&${basedir}/src/main/plexus&/directory& &&&&&&&
&includes& &&&&&&&&& &include&configuration.xml&/include&
&&&&&&& &/includes& &&&&&&& &excludes& &&&&&&&&&
&exclude&**/*.properties&/exclude& &&&&&&& &/excludes&
&&&&& &/resource&
targetPath:指定build资源到哪个目录,默认是base directory
filtering:指定是否将filter文件(即上面说的filters里定义的*.property文件)的变量值在这个resource文件有效,例如上面就指定那些变量值在configuration文件无效。
directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
includes:指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件。
excludes:指定不包含在内的patterns,如果inclues与excludes有冲突,那么excludes胜利,那些符合冲突的样式的文件是不会包含进来的。
testResources:这个模块包含测试资源元素,其内容定义与resources类似,不同的一点是默认的测试资源路径是${basedir}/src/test/resources,测试资源是不部署的。
plugins配置:
&plugin& &&&&&&&
&groupId&org.apache.maven.plugins&/groupId& &&&&&&&
&artifactId&maven-jar-plugin&/artifactId& &&&&&&&
&version&2.0&/version& &&&&&&&
&extensions&false&/extensions& &&&&&&&
&inherited&true&/inherited& &&&&&&& &configuration&
&&&&&&&&& &classifier&test&/classifier& &&&&&&&
&/configuration& &&&&&&& &dependencies&...&/dependencies&
&&&&&&& &executions&...&/executions& &&&&& &/plugin&
extensions:true or false, 决定是否要load这个plugin的extensions,默认为true.
inherited:是否让子pom继承,ture or false 默认为true.
configuration:通常用于私有不开源的plugin,不能够详细了解plugin的内部工作原理,但使plugin满足的properties
dependencies:与pom基础的dependencies的结构和功能都相同,只是plugin的dependencies用于plugin,而pom的denpendencies用于项目本身。在plugin的dependencies主要用于改变plugin原来的dependencies,例如排除一些用不到的dependency或者修改dependency的版本等,详细请看pom的denpendencies.
executions:plugin也有很多个目标,每个目标具有不同的配置,executions就是设定plugin的目标,
&execution& &&&&&&&&&&& &id&echodir&/id& &&&&&&&&&&&
&goals& &&&&&&&&&&&&& &goal&run&/goal& &&&&&&&&&&&
&/goals& &&&&&&&&&&& &phase&verify&/phase& &&&&&&&&&&&
&inherited&false&/inherited& &&&&&&&&&&& &configuration&
&&&&&&&&&&&&& &tasks& &&&&&&&&&&&&&&& &echo&Build Dir:
${project.build.directory}&/echo& &&&&&&&&&&&&& &/tasks&
&&&&&&&&&&& &/configuration& &&&&&&&&& &/execution&&
goals:里面列出一系列的goals元素,例如上面的run goal
phase:声明goals执行的时期,例如:verify
inherited:是否传递execution到子pom里。
configuration:设置execution下列表的goals的设置,而不是plugin所有的goals的设置
pluginManagement配置:
pluginManagement的作用类似于denpendencyManagement,只是denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin。与pom build里的plugins区别是,这里的plugin是列出来,然后让子pom来决定是否引用。
&pluginManagement&&
&&&&& &plugins& &&&&&&& &plugin&
&&&&&&&&& &groupId&org.apache.maven.plugins&/groupId&
&&&&&&&&& &artifactId&maven-jar-plugin&/artifactId&
&&&&&&&&& &version&2.2&/version& &&&&&&&&&
&executions& &&&&&&&&&&& &execution& &&&&&&&&&&&&&
&id&pre-process-classes&/id& &&&&&&&&&&&&&
&phase&compile&/phase& &&&&&&&&&&&&& &goals&
&&&&&&&&&&&&&&& &goal&jar&/goal& &&&&&&&&&&&&&
&/goals& &&&&&&&&&&&&& &configuration& &&&&&&&&&&&&&&&
&classifier&pre-process&/classifier& &&&&&&&&&&&&&
&/configuration& &&&&&&&&&&& &/execution& &&&&&&&&&
&/executions& &&&&&&& &/plugin& &&&&& &/plugins&
&&& &/pluginManagement& 子pom引用方法: 在pom的build里的plugins引用:
&&& &plugins& &&&&& &plugin& &&&&&&&
&groupId&org.apache.maven.plugins&/groupId& &&&&&&&
&artifactId&maven-jar-plugin&/artifactId& &&&&& &/plugin&
&&& &/plugins&
build里的directories:
&sourceDirectory&${basedir}/src/main/java&/sourceDirectory& &&&
&scriptSourceDirectory&${basedir}/src/main/scripts&/scriptSourceDirectory&
&testSourceDirectory&${basedir}/src/test/java&/testSourceDirectory&
&&& &outputDirectory&${basedir}/target/classes&/outputDirectory&
&testOutputDirectory&${basedir}/target/test-classes&/testOutputDirectory&
这几个元素只在parent build element里面定义,他们设置多种路径结构,他们并不在profile里,所以不能通过profile来修改
build 里面的Extensions:
它们是一系列build过程中要使用的产品,他们会包含在running bulid&s
classpath里面。他们可以开启extensions,也可以通过提供条件来激活plugins。简单来讲,extensions是在build过程被激活的产品
&&& &extensions& &&&&& &extension& &&&&&&&
&groupId&org.apache.maven.wagon&/groupId& &&&&&&&
&artifactId&wagon-ftp&/artifactId& &&&&&&&
&version&1.0-alpha-3&/version& &&&&& &/extension& &&&
&/extensions&&
reporting设置:
reporting包含site生成阶段的一些元素,某些maven plugin可以生成reports并且在reporting下配置。例如javadoc,maven site等,在reporting下配置的report plugin的方法与build几乎一样,最不同的是build的plugin goals在executions下设置,而reporting的configures goals在reporttest。
excludeDefaults:是否排除site generator默认产生的reports
outputDirectory,默认的dir变成:${basedir}/target/site
report sets:设置execution goals,相当于build里面的executions,不同的是不能够bind a report to another phase,只能够是site
&reporting& &&& &plugins& &&&&& &plugin& &&&&&&&
... &&&&&&& &reportSets& &&&&&&&&& &reportSet&
&&&&&&&&&&& &id&sunlink&/id& &&&&&&&&&&& &reports&
&&&&&&&&&&&&& &report&javadoc&/report& &&&&&&&&&&&
&/reports& &&&&&&&&&&& &inherited&true&/inherited&
&&&&&&&&&&& &configuration& &&&&&&&&&&&&& &links&
&&&&&&&&&&&&&&&
&link&/j2se/1.5.0/docs/api/&/link&
&&&&&&&&&&&&& &/links& &&&&&&&&&&& &/configuration&
&&&&&&&&& &/reportSet& &&&&&&& &/reportSets& &&&&&
&/plugin& &&& &/plugins& & &/reporting&
reporting里面的厄reportSets和build里面的executions的作用都是控制pom的不同粒度去控制build的过程,我们不单要配置plugins,还要配置那些plugins单独的goals。
更多项目信息:
name:项目除了artifactId外,可以定义多个名称description: 项目描述url: 项目urlinceptionYear:创始年份
Licenses&licenses&& &license&&&& &name&Apache 2&/name&&&& &url&http://www.apache.org/licenses/LICENSE-2.0.txt&/url&&&& &distribution&repo&/distribution&&&& &comments&A business-friendly OSS license&/comments&& &/license&&/licenses&
列出本工程直接的licenses,而不要列出dependencies的licenses
配置组织信息:& &organization&&&& &name&Codehaus Mojo&/name&&&& &url&http://mojo.codehaus.org&/url&& &/organization&
很多工程都受到某些组织运行,这里设置基本信息
配置开发者信息:
例如:一个开发者可以有多个roles,properties是&&developers&&&& &developer&&&&&& &id&eric&/id&&&&&& &name&Eric&/name&&&&&& &email&eredmond@codehaus.org&/email&&&&&& &url&http://eric.propellors.net&/url&&&&&& &organization&Codehaus&/organization&&&&&& &organizationUrl&http://mojo.codehaus.org&/organizationUrl&&&&&& &roles&&&&&&&& &role&architect&/role&&&&&&&& &role&developer&/role&&&&&& &/roles&&&&&& &timezone&-6&/timezone&&&&&& &properties&&&&&&&& &picUrl&/prv4t&/picUrl&&&&&& &/properties&&&& &/developer&& &/developers&
issueManagement:bug跟踪管理系统,定义defect tracking system缺陷跟踪系统,比如有(bugzilla,testtrack,clearquest等).
&&&issueManagement&&&&& &system&Bugzilla&/system&&&&& &url&http://127.0.0.1/bugzilla/&/url&&& &/issueManagement&&
Repositories:pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用 的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。
repositories:要成为maven2的repository artifact,必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactId-version.pom&BASE_REPO可以是本地,也可以是远程的。repository元素就是声明那些去查找的repositories&默认的central Maven repository在http://repo1.maven.org/maven2/
&repositories&&&&& &repository&&&&&&& &releases&&&&&&&&& &enabled&false&/enabled&&&&&&&&& &updatePolicy&always&/updatePolicy&&&&&&&&& &checksumPolicy&warn&/checksumPolicy&&&&&&& &/releases&&&&&&& &snapshots&&&&&&&&& &enabled&true&/enabled&&&&&&&&& &updatePolicy&never&/updatePolicy&&&&&&&&& &checksumPolicy&fail&/checksumPolicy&&&&&&& &/snapshots&&&&&&& &id&codehausSnapshots&/id&&&&&&& &name&Codehaus Snapshots&/name&&&&&&& &url&http://snapshots.maven.codehaus.org/maven2&/url&&&&&&& &layout&default&/layout&&&&& &/repository&&& &/repositories&&
release和snapshots:是artifact的两种policies,pom可以选择那种政策有效。&enable:本别指定两种类型是否可用,true or false&updatePolicy:说明更新发生的频率always 或者 never 或者 daily(默认的)或者 interval:X(X是分钟数)&
checksumPolicy:当Maven的部署文件到仓库中,它也部署了相应的校验和文件。您可以选择忽略,失败,或缺少或不正确的校验和警告。
layout:maven1.x与maven2有不同的layout,所以可以声明为default或者是legacy(遗留方式maven1.x)。
插件仓库:
pluginRepositories:与Repositories具有类似的结构,只是Repositories是dependencies的home,而这个是plugins 的home。
distributionManagement :管理distribution和supporting files。&
downloadUrl:是其他项目为了抓取本项目的pom&s artifact而指定的url,就是说告诉pom upload的地址也就是别人可以下载的地址。&status:这里的状态不要受到我们的设置,maven会自动设置project的状态,有效的值:none:没有声明状态,pom默认的;converted:本project是管理员从原先的maven版本convert到maven2的;partner:以前叫做synched,意思是与partner repository已经进行了同步;deployed:至今为止最经常的状态,意思是制品是从maven2 instance部署的,人工在命令行deploy的就会得到这个;verified:本制品已经经过验证,也就是已经定下来了最终版。&repository:声明deploy过程中current project会如何变成repository,说明部署到repository的信息。&&&& &repository&&&&&&& &uniqueVersion&false&/uniqueVersion&&&&&&& &id&corp1&/id&&&&&&& &name&Corporate Repository&/name&&&&&&& &url&scp://repo1/maven2&/url&&&&&&& &layout&default&/layout&&&&& &/repository&&&&& &snapshotRepository&&&&&&& &uniqueVersion&true&/uniqueVersion&&&&&&& &id&propSnap&/id&&&&&&& &name&Propellors Snapshots&/name&&&&&&& &url&sftp://propellers.net/maven&/url&&&&&&& &layout&legacy&/layout&&&&& &/snapshotRepository&&id, name::唯一性的id,和可读性的name&uniqueVersion:指定是否产生一个唯一性的version number还是使用address里的其中version部分。true or false&url:说明location和transport protocol&layout:default或者legacy
profiles:pom4.0的一个新特性就是具有根据environment来修改设置的能力
它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。那么结构如下:&& &profiles&&&&& &profile&&&&&&& &id&test&/id&&&&&&& &activation&...&/activation&&&&&&& &build&...&/build&&&&&&& &modules&...&/modules&&&&&&& &repositories&...&/repositories&&&&&&& &pluginRepositories&...&/pluginRepositories&&&&&&& &dependencies&...&/dependencies&&&&&&& &reporting&...&/reporting&&&&&&& &dependencyManagement&...&/dependencyManagement&&&&&&& &distributionManagement&...&/distributionManagement&&&&& &/profile&&& &/profiles&&Activation:&触发这个profile的条件配置如下例:(只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。&&&& &profile&&&&&&& &id&test&/id&&&&&&& &activation&&&&&&&&& &activeByDefault&false&/activeByDefault&&&&&&&&& &jdk&1.5&/jdk&&&&&&&&& &os&&&&&&&&&&& &name&Windows XP&/name&&&&&&&&&&& &family&Windows&/family&&&&&&&&&&& &arch&x86&/arch&&&&&&&&&&& &version&5.1.2600&/version&&&&&&&&& &/os&&&&&&&&& &property&&&&&&&&&&& &name&mavenVersion&/name&&&&&&&&&&& &value&2.0.3&/value&&&&&&&&& &/property&&&&&&&&& &file&&&&&&&&&&& &exists&${basedir}/file2.properties&/exists&&&&&&&&&&& &missing&${basedir}/file1.properties&/missing&&&&&&&&& &/file&&&&&&& &/activation&&
激活profile的方法有多个:setting文件的activeProfile元素明确指定激活的profile的ID,在命令行上明确激活Profile用-P flag 参数&查看某个build会激活的profile列表可以用:mvn help:active-profiles&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:267109次
积分:1018
积分:1018
排名:千里之外
原创:11篇
转载:12篇
评论:44条
(2)(5)(12)(1)(1)(1)(1)

我要回帖

更多关于 maven plugin 的文章

 

随机推荐