Maven常用插件配置详解

1. <!-- 全局属性配置 -->   
2. <properties>   
3.     <project.build.name>tools</project.build.name>   
4.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   
5. </properties>   

project.build.name: 用来定义war包名称
project.build.sourceEncoding: 用来定义资源文件的编码格式

下面开始讲解常用的maven插件配置

一、编译插件

1. <!-- 编译插件 -->   
2. <plugin>   
3.     <groupId>org.apache.maven.plugins</groupId>   
4.     <artifactId>maven-compiler-plugin</artifactId>   
5.     <configuration>   
6.         <source>1.6</source>   
7.         <target>1.6</target>   
8.         <encoding>${project.build.sourceEncoding}</encoding>   
9.     </configuration>   
10. </plugin>   

source: 源代码编译版本;
target: 目标平台编译版本;
encoding: 字符集编码。

二、设置资源文件的编码方式

1. <!-- 设置资源文件的编码方式 -->   
2. <plugin>   
3.     <groupId>org.apache.maven.plugins</groupId>   
4.     <artifactId>maven-resources-plugin</artifactId>   
5.     <version>2.4.3</version>   
6.     <executions>   
7.         <execution>   
8.             <phase>compile</phase>   
9.         </execution>   
10.     </executions>   
11.     <configuration>   
12.         <encoding>${project.build.sourceEncoding}</encoding>   
13.     </configuration>   
14. </plugin>   

xml、properties文件都是资源文件,编码的时候遇到中文总要进行转码!用什么编码?UTF-8,那就记得强制 ${project.build.sourceEncoding}

三、自动拷贝jar包到target目录

1. <!-- 依赖插件 -->   
2. <plugin>   
3.     <groupId>org.apache.maven.plugins</groupId>   
4.     <artifactId>maven-dependency-plugin</artifactId>   
5.     <version>2.6</version>   
6.     <executions>   
7.         <execution>   
8.             <id>copy-dependencies</id>   
9.             <phase>compile</phase>   
10.             <goals>   
11.                 <goal>copy-dependencies</goal>   
12.             </goals>   
13.             <configuration>   
14.                 <!-- ${project.build.directory}为Maven内置变量,缺省为target -->   
15.                 <outputDirectory>${project.build.directory}/lib</outputDirectory>   
16.                 <!-- 表示是否不包含间接依赖的包 -->   
17.                 <excludeTransitive>false</excludeTransitive>   
18.                 <!-- 表示复制的jar文件去掉版本信息 -->   
19.                 <stripVersion>true</stripVersion>   
20.             </configuration>   
21.         </execution>   
22.     </executions>   
23. </plugin>   

在部署war包时,需要将项目依赖的jar包,也打到war包中,因此就会用到上述插件

四、生成源代码jar包

1. <!-- 源代码打包插件 -->   
2. <plugin>   
3.     <artifactId>maven-source-plugin</artifactId>   
4.     <version>2.1</version>   
5.     <configuration>   
6.         <!-- <finalName>${project.build.name}</finalName> -->   
7.         <attach>true</attach>   
8.         <encoding>${project.build.sourceEncoding}</encoding>   
9.     </configuration>   
10.     <executions>   
11.         <execution>   
12.             <phase>compile</phase>   
13.             <goals>   
14.                 <goal>jar</goal>   
15.             </goals>   
16.         </execution>   
17.     </executions>   
18. </plugin>   

该插件主要用于在打jar包时,把源代码也打成jar包

五、将项目打成jar包

1. <!-- jar包插件 -->   
2. <plugin>   
3.     <groupId>org.apache.maven.plugins</groupId>   
4.     <artifactId>maven-jar-plugin</artifactId>   
5.     <version>2.4</version>   
6.     <configuration>   
7.         <archive>   
8.             <manifest>   
9.                 <!-- 告知 maven-jar-plugin添加一个 Class-Path元素到 MANIFEST.MF文件,以及在Class-Path元素中包括所有依赖项 -->   
10.                 <addClasspath>true</addClasspath>   
11.                 <!-- 所有的依赖项应该位于 lib文件夹 -->   
12.                 <classpathPrefix>lib/</classpathPrefix>   
13.                 <!-- 当用户使用 lib命令执行JAR文件时,使用该元素定义将要执行的类名 -->   
14.                 <mainClass>com.zhengtian.tools.service.phone.MobilePhoneTool</mainClass>   
15.             </manifest>   
16.         </archive>   
17.     </configuration>   
18. </plugin>   

在将项目打成jar包时,有时会需要将项目打成可以直接运行的jar包,因此就需要将项目依赖的jar包也打入jar包中,此时需要在Eclipse上安装例外一个插件,用来打可执行jar包,详情见链接 http://zheng12tian.iteye.com/blog/1765626

六、将项目打成war包

1. <!-- war插件 -->   
2. <plugin>   
3.     <groupId>org.apache.maven.plugins</groupId>   
4.     <artifactId>maven-war-plugin</artifactId>   
5.     <version>2.1.1</version>   
6.     <configuration>   
7.         <!-- <warName>${project.build.name}</warName> -->   
8.     </configuration>   
9. </plugin>   

encoding: 强制字符集编码
warName: 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常用的部署方式介绍: http://blog.csdn.net/yangxueyong/article/details/6130065

配置描述:当你的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/ finalNamewebappcopysrc/main/webappjsjQuerysrc/main/webappjscopytarget/ {finalName}目录中,这时候就需要对exploded目标(goal)进行资源过滤了——不把没用的资源copy到网站的目录结构中去:

1. <plugin>   
2.     <artifactId>maven-war-plugin</artifactId>   
3.     <configuration>   
4.         <warSourceExcludes>js/参考/**</warSourceExcludes>   
5.     </configuration>   
6. </plugin>   

说明:上面的配置,使用了war插件的warSourceExcludes参数,该参数是一个String类型,需要把被排除的路径或文件使用逗号(comma)间隔开。
参见:

1、http://www.wsria.com/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)可以用标签(tag)配置,但是在该插件在命令行下单独由mvn命令调用,那么这个参数该如何使用pom文件配置呢?比如,在一个J2EE项目中,想使用mvn clean命令清除target里的内容的同时,也清除tomcat/webapp下的相应目录,该怎么办呢?这就需要在pom文件中对插件进行全局配置了。

1. <plugin>   
2.     <artifactId>maven-clean-plugin</artifactId>   
3.     <configuration>   
4.         <verbose>true</verbose>   
5.         <filesets>   
6.             <fileset>   
7.                 <directory>c:/a</directory>   
8.             </fileset>   
9.       </filesets>   
10.     </configuration>   
11. </plugin>   

插件的配置分为局部配置和全局配置,本文中对antrun和resource插件的配置是局部配置,对clean插件的配置是全局配置,能看出差别吧?
局部配置的标签(tag)放在标签(tag)里边,而全局配置的标签(tag)则放在标签(tag)里边,因为全局配置里根本就没有标签(tag),因为全局配置针对的是该插件的全部目标(goal)配置的!

本例中,删除的是C:/a目录,即,当用户在该maven项目中执行mvn clean后,除了删除clean插件默认的project.build.directory, project.build.outputDirectory,project.build.testOutputDirectory, 和 project.reporting.outputDirectory目录外

(参考:http://maven.apache.org/plugins/maven-clean-plugin/clean-mojo.html#filesets),

还会删除C:/a目录。

注意,该配置仅针对本项目有效,即,用户在当前项目下使用mvn clean时,会删除C:/a目录;当用户在其他没有如此配置clean插件的maven项目中执行mvn clean时,不会删除C:/a目录。

设置fileset的目录时候用到的标签不能乱用,比如

,否则maven没法识别,因为maven使用pom设置插件参数(parameter)的时候用的是设置java bean的方式,之所以用标签,是因为在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

1. private File directory;   
2.    
3. private String[] includes;   
4.    
5. private String[] excludes;   
6.    
7. private boolean followSymlinks;   

相关阅读:
1、Maven clean plugin - delete additional directories

http://maven.40175.n5.nabble.com/Maven-clean-plugin-delete-additional-directories-td122794.html

八、利用tomcat-maven-plugin插件将项目自动打包并部署到tomcat中

1.  <!-- tomcat插件 -->   
2.     <plugin>   
3.         <groupId>org.codehaus.mojo</groupId>   
4.         <artifactId>tomcat-maven-plugin</artifactId>   
5.         <configuration>   
6.             <server>tomcat6-manager</server>   
7.             <path>/${project.build.name}</path>   
8.             <url>http://localhost:8080/manager</url>   
9.             <username>admin</username>   
10.             <password>admin</password>   
11.         </configuration>   
12.         <executions>   
13.             <execution>   
14.                 <phase>deploy</phase>   
15.                 <goals>   
16.                     <goal>deploy</goal>   
17.                 </goals>   
18.             </execution>   
19.         </executions>   
20.     </plugin>   
21. </plugins>   

path: 是指项目部署到tomcat后的项目名称
url: 是指tomcat的manager访问地址
server: 这个是tomcat服务名称设置,需要配置maven的settings.xml文件,在servers节点中手动配置server,如下所示:

1. <server>   
2.     <id>tomcat6-manager</id>   
3.     <username>admin</username>   
4.     <password>admin</password>   
5. </server>   

九、利用cargo-maven2-plugin插件将项目自动打包并部署到tomcat中
配置描述:使用maven做web项目时,cargo插件可以帮助你完成WAR包到服务器的部署及服务器的启动和关闭等工作,方便,快速!

1. <plugin>   
2.     <groupId>org.codehaus.cargo</groupId>   
3.     <artifactId>cargo-maven2-plugin</artifactId>   
4.     <version>1.2.0</version>   
5.     <configuration>   
6.         <container>   
7.             <containerId>${server_name}</containerId>   
8.             <home>${server_home}</home>   
9.         </container>   
10.         <configuration>   
11.             <type>existing</type>   
12.             <home>${server_home}</home>   
13.             <properties>   
14.                 <cargo.servlet.port>8088</cargo.servlet.port>   
15.             </properties>   
16.         </configuration>   
17.     </configuration>   
18. </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命令关闭服务器。

参考:http://cargo.codehaus.org/Maven2+plugin

1. <plugin>   
2.                 <!-- 指定插件名称及版本号 -->   
3.                 <groupId>org.codehaus.cargo</groupId>   
4.                 <artifactId>cargo-maven2-plugin</artifactId>   
5.                 <version>1.2.3</version>   
6.                 <!-- 插件的Tomcat6.x配置 -->   
7.                 <configuration>   
8.                     <!-- 容器的配置 -->   
9.                     <container>   
10.                         <!-- 指定服务器版本 -->   
11.                         <containerId>tomcat6x</containerId>   
12.                         <!-- 指定服务器的安装目录 -->   
13.                         <home>E:\Program Files\tomcat-6.0.32</home>   
14.                     </container>   
15.                     <!-- 具体的配置 -->   
16.                     <configuration>   
17.                         <!-- 部署模式:existing、standalone等 -->   
18.                         <type>existing</type>   
19.                         <!-- Tomcat的位置,即catalina.home -->   
20.                         <home>E:\Program Files\tomcat-6.0.32</home>   
21.                         <!-- 配置属性 -->   
22.                         <properties>   
23.                             <!-- 管理地址 -->   
24.                             <cargo.tomcat.manager.url>http://localhost:8080/manager</cargo.tomcat.manager.url>   
25.                             <!-- Tomcat用户名 -->   
26.                             <cargo.remote.username>admin</cargo.remote.username>   
27.                             <!-- Tomcat密码 -->   
28.                             <cargo.remote.password>admin</cargo.remote.password>   
29.                             <!-- <cargo.jvmargs> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 </cargo.jvmargs> -->   
30.                         </properties>   
31.                     </configuration>   
32.                 </configuration>   
33.             </plugin>   

username和password: 是指tomcat的tomcat-users.xml文件中配置的,文件路径为E:\Program Files\tomcat-6.0.32\conf\tomcat-users.xml,如下所示:

1. <role rolename="manager"/>    
2. <user password="admin" roles="manager" username="admin"/>    

十、有时候插件检查不通过,需要人为的忽略对有些插件的检查

1. <!-- 插件管理 -->   
2. <pluginManagement>   
3.     <plugins>   
4.         <plugin>   
5.             <groupId>org.eclipse.m2e</groupId>   
6.             <artifactId>lifecycle-mapping</artifactId>   
7.             <version>1.0.0</version>   
8.             <configuration>   
9.                 <lifecycleMappingMetadata>   
10.                     <pluginExecutions>   
11.                         <!-- 忽略2.0以上版本的maven-dependency-plugin的检查 -->   
12.                         <pluginExecution>   
13.                             <pluginExecutionFilter>   
14.                                 <groupId>org.apache.maven.plugins</groupId>   
15.                                 <artifactId>maven-dependency-plugin</artifactId>   
16.                                 <versionRange>[2.0,)</versionRange>   
17.                                 <goals>   
18.                                     <goal>copy-dependencies</goal>   
19.                                 </goals>   
20.                             </pluginExecutionFilter>   
21.                             <action>   
22.                                 <ignore />   
23.                             </action>   
24.                         </pluginExecution>   
25.                     </pluginExecutions>   
26.                 </lifecycleMappingMetadata>   
27.             </configuration>   
28.         </plugin>   
29.     </plugins>   
30. </pluginManagement>   

十一、maven-resources-plugin

配置描述:把web项目的输出copy到tomcat的webapp下

1. <plugin>   
2.     <groupId>org.apache.maven.plugins</groupId>   
3.     <artifactId>maven-resources-plugin</artifactId>   
4.     <version>2.5</version>   
5.     <executions>   
6.         <execution>   
7.             <id>deploy-website</id>   
8.             <phase>package</phase>   
9.             <goals>   
10.                 <goal>copy-resources</goal>   
11.             </goals>   
12.             <configuration>   
13.                 <outputDirectory>${server_home}/webapps/${project.build.finalName}</outputDirectory>   
14.                 <resources>   
15.                     <resource>   
16.                         <directory>${project.build.directory}/${project.build.finalName}</directory>   
17.                     </resource>   
18.                 </resources>   
19.             </configuration>   
20.         </execution>   
21.     </executions>   
22. </plugin>   

十二、maven-antrun-plugin

配置描述:在maven中使用antrun调用bat文件

(我这里调用的是tomcat的startup.bat文件,但是没有成功启动tomcat,提示说环境变量没配置,可我双击运行startup.bat将就可以运行,奇怪了……)

(现在知道原因了:antrun运行的bat文件,实际上是在 basedirbattomcatstartup.batbatbat {basedir}目录下不存在!

解决方法:使用令一个bat文件,如mystartup.bat运行startup.bat,注意在运行startup.bat之前,需要在mystartup.bat文件中把目录切换到startup.bat所在的目录,搞定!

具体做法,参见:使用Maven的antrun插件启动Tomcat的两种方法:http://blog.csdn.net/lslxdx/article/details/7245695

参见:http://markmail.org/message/c3igpnp7dvkajsrl

1. <plugin>   
2.     <artifactId>maven-antrun-plugin</artifactId>   
3.     <executions>   
4.       <execution>   
5.         <id>start-server</id>   
6.         <phase>package</phase>   
7.         <configuration>   
8.           <tasks>   
9.                <exec   
10.                  executable="${server_home}/bin/startup.bat"   
11.                  >   
12.                </exec>   
13.           </tasks>   
14.         </configuration>   
15.         <goals>   
16.           <goal>run</goal>   
17.         </goals>   
18.       </execution>   
19.     </executions>   
20. </plugin>   
21.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值