- <!-- 全局属性配置 -->
- <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插件配置
一、编译插件
- <!-- 编译插件 -->
- <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: 字符集编码。
二、设置资源文件的编码方式
- <!-- 设置资源文件的编码方式 -->
- <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目录
- <!-- 依赖插件 -->
- <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包
- <!-- 源代码打包插件 -->
- <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包
- <!-- 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包,详情见链接 http://zheng12tian.iteye.com/blog/1765626
六、将项目打成war包
- <!-- 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常用的部署方式介绍: 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 /${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、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)可以用<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目录外
(参考: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的目录时候用到的<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 directory;
- private String[] includes;
- private String[] excludes;
- 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中
- <!-- 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>
path: 是指项目部署到tomcat后的项目名称
url: 是指tomcat的manager访问地址
server: 这个是tomcat服务名称设置,需要配置maven的settings.xml文件,在servers节点中手动配置server,如下所示:
- <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命令关闭服务器。
参考:http://cargo.codehaus.org/Maven2+plugin
- <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,如下所示:
十、有时候插件检查不通过,需要人为的忽略对有些插件的检查
- <!-- 插件管理 -->
- <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的两种方法:http://blog.csdn.net/lslxdx/article/details/7245695)
参见:http://markmail.org/message/c3igpnp7dvkajsrl
- <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>
相关推荐
maven学习笔记maven学习笔记maven学习笔记
本学习笔记将深入探讨Maven的核心概念,包括Maven插件、安装步骤、中央仓库以及自定义本地仓库的设置。 ### Maven核心概念 1. **项目对象模型(POM)**:POM是Maven的核心,它包含了项目的基本信息,如项目名称、...
** Maven基础入门 ** Maven是一个Java项目管理工具,它主要负责构建、依赖管理和项目信息管理。...在`maven_study_01`的学习笔记中,你可以找到更多关于Maven的基础知识和实践案例,帮助你快速上手并掌握这一工具。
maven的setting配置文件详解。。。。
maven学习笔记整理
【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...
**Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...
了解如何配置和使用各种常用插件,如maven-surefire-plugin(用于单元测试)和maven-jar-plugin(用于打包成JAR)。 7. **多模块项目**:在大型项目中,理解如何组织和管理多个相互依赖的子项目,以及如何通过聚合...
通常,学习Maven时,你需要了解如何编写pom.xml文件、理解生命周期和构建阶段、以及如何配置Maven插件。 **三、安装Maven** 1. 在Linux(Ubuntu)环境下,首先移除旧版Maven(如果有): ``` sudo apt-get remove...
** Maven学习笔记详解 ** Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM)来管理项目的依赖关系,构建过程以及配置信息。Maven...
【mybatis_maven学习笔记】 在Java开发领域,MyBatis和Maven是两个不可或缺的工具,它们分别在数据访问层和项目构建方面扮演着重要角色。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,...
**Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...
在本文中,我们将深入探讨Maven的核心功能、常用插件以及如何配置和使用这些插件。 1. **Maven核心功能** Maven通过Project Object Model (POM)来描述项目,POM是一个XML文件,包含了项目的配置信息,如依赖、构建...
### 个人Maven学习笔记 #### 为什么使用Maven? 在软件开发过程中,尤其是在使用Java进行后端开发时,项目通常会依赖大量的第三方库或框架。如果没有统一的管理工具,这些依赖很容易出现版本冲突的问题,增加了...
### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...
【标题】:“201205_Maven学习笔记1.rar”揭示了关于Maven的深入学习内容,这个压缩包包含了一系列文档,旨在帮助开发者更好地理解和应用Maven这一强大的Java项目管理和构建工具。 【描述】:尽管描述部分是空的,...
内容概要:maven学习笔记,适合刚接触maven的人能让你快速入门。 适用人群:大学生或者初基础maven的人 使用场景及目标:idea集成maven,用来下载依赖包
【Maven学习笔记】 Maven是一个强大的项目管理和构建工具,主要应用于Java开发领域。它能够自动管理项目的依赖关系,帮助开发者解决因jar包版本冲突、依赖管理混乱等问题带来的困扰。Maven通过制定一套规范化的项目...