WEBAPP开发之maven常用插件配置详解
白羽 2019-01-02 来源 :网络 阅读 461 评论 0

摘要:本文将带你了解WEBAPP开发maven常用插件配置详解,希望本文对大家学WEBAPP有所帮助。

    本文将带你了解WEBAPP开发maven常用插件配置详解,希望本文对大家学WEBAPP有所帮助。


              


 

常用插件配置详解
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>  


source: 源代码编译版本;  
target: 目标平台编译版本;  
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包,详情见链接 //zheng12tian.iteye.com/blog/1765626   

六、将项目打成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: 强制字符集编码  
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常用的部署方式介绍: //blog.csdn.net/yangxueyong/article/details/6130065   

配置描述:当你的pom文件中把你的当前项目的packaging配置为war后,maven会使用该插件将当前项目生成war文件,但是有时候我们不想要war文件,只想让maven生成当前项目的网站目录结构,尤其是在调试的时候,因为生成war文件的同时,会生成当前项目的网站目录结构,这样一来,浪费了打包的时间和磁盘的空间!

maven使用war插件生成war文件所用的目标(goal)为war,从帮助文档中可以看出,war插件还有一个目标(goal)是exploded,即,只生成目录结构,而不生成war文件。

参见://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到网站的目录结构中去:

[html]  view plain copy

 

<plugin>  

    <artifactId>maven-war-plugin</artifactId>  

    <configuration>  

        <warSourceExcludes>js/参考/**</warSourceExcludes>  

    </configuration>  

</plugin>  


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

参见:

1、//www.wsria.com/archives/1335

2、//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文件中对插件进行全局配置了。

[html]  view plain copy

 

<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目录外

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

还会删除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类只有如下成员变量:

(参见://search.maven.org/remotecontent?filepath=org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1-source-release.zip)

[java]  view plain copy

 

private File directory;  

  

private String[] includes;  

  

private String[] excludes;  

  

private boolean followSymlinks;  


相关阅读:

1、Maven   clean plugin - delete additional directories

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

 

八、利用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>//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>  


path: 是指项目部署到tomcat后的项目名称  
url: 是指tomcat的manager访问地址  
server: 这个是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包到服务器的部署及服务器的启动和关闭等工作,方便,快速!

[html]  view plain copy

 

<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命令关闭服务器。

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

 

 

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>//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 </   



本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程