最近经常使用Maven管理工程,于是总结一下使用过的Maven pom.xml配置。我本地使用的Maven版本是apache-maven-3.0.3。工程为普通java application打成jar包形式部署,web工程配置在后面也会做简要介绍。
一、基本配置
<!-- pom.xml文件以project为根节点 -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 声明pom.xml文件所支持的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 全局性项目唯一标识,通常使用完全限定的包名来和其它项目区分 -->
<groupId>front</groupId>
<!-- 在给定的groupId内唯一的产品标识,也是输出的工程名 -->
<artifactId>front</artifactId>
<!-- 此项目输出的artifactId的当前版本 -->
<version>1.0</version>
<!-- 输出类型:jar、war、ear... -->
<packaging>jar</packaging>
二、构建配置
<!-- 项目本地构建文件列表,可以改变文件构建过程 -->
<profiles>
<profile>
<!-- 开发环境配置 -->
<id>dev</id>
<!-- 默认执行开发环境配置 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 各属性配置,在配置文件中直接使用${}占位即可 -->
<log.level>TRACE</log.level>
<!-- ... -->
</properties>
</profile>
<profile>
<!-- 线上环境配置 -->
<id>prod</id>
<properties>
<log.level>DEBUG</log.level>
<!-- ... -->
</properties>
</profile>
</profiles>
使用方法:mvn clean package -Pdev 或者 -Pprod (执行不同的构建配置)进行打包。
详情可以参见我的另一篇blog:
结合Commons Configuration和Maven进行工程配置管理 http://shensy.iteye.com/blog/1747408
三、常量
<!-- 定义一些常量,在项目其他地方可以使用 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- ... -->
</properties>
四、依赖管理
<!-- 此项目所有的依赖列表 -->
<dependencies>
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>x.x.x</version>
<scope>xx</scope>
</dependency>
<!-- ... -->
</dependencies>
五、<build></build>标签内元素
1、资源resources
<!-- resource的列表,用于包括所有的资源 -->
<resources>
<resource>
<!-- 资源所在的位置 -->
<directory>${project.basedir}/src/main/resources</directory>
<!-- 是否替换资源中的属性placehold:${} -->
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.basedir}/bin</directory>
<targetPath>${project.build.directory}/bin</targetPath>
<filtering>true</filtering>
</resource>
</resources>
2、插件plugins
<plugins>
<!-- 资源插件:用于资源文件管理 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<!-- 资源文件编码 -->
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- 编译插件 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- 源代码jdk编译版本 -->
<source>1.6</source>
<!-- 目标平台jdk编译版本 -->
<target>1.6</target>
<!-- 字符集编码 -->
<encoding>UTF-8</encoding>
<!--编译参数,详见javac命令,此处为控制是否执行注释处理和/或编译.-->
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
<!-- 依赖管理 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<!-- 将所有依赖的jar都拷贝出来 -->
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<!-- jar打包管理 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 往Manifest.MF文件中添加ClassPath -->
<addClasspath>true</addClasspath>
<!-- classpath前缀 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 主程序入口 -->
<mainClass>com.xxx.rest.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- 自定义打包管理 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<!-- 将maven-assembly-plugin继承到标准的maven打包过程中,
在运行maven-package时就会执行maven-assembly-plugin的操作,
从而实现我们需要的自定义打包. -->
<executions>
<execution>
<id>distro-assembly</id>
<phase>verify</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- 指定maven-assembly-plugin的配置文件 -->
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<!-- 测试插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>
<!-- 测试覆盖率插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<formats>
<format>xml</format>
</formats>
<check></check>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 源码包:当使用一个第三方依赖的时候,有时候会希望在IDE中直接进入该依赖的源码查看其实现的细节,如果该依赖将源码包发布到了Maven仓库,那么像Eclipse就能通过m2eclipse插件解析下载源码包并关联到你的项目中,十分方便. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
生成Javadoc包:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
3、finalname
<finalName>front</finalName>
4、关于自定义打包管理插件maven-assembly-plugin:
将maven-assembly-plugin继承到标准的maven打包过程中,在运行maven-package时就会执行maven-assembly-plugin的操作,从而实现我们需要的自定义打包.上文中将maven-assembly-plugin插件配置文件位置定义在
src/main/assembly/assembly.xml
中,assembly.xml详细配置如下:
基本配置:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>dist</id>
<!-- 打包的最终格式 -->
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
filesets配置:
<fileSets>
<fileSet>
<!-- ${project.build.directory}/lib打到lib下 -->
<directory>${project.build.directory}/lib</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>**/**</include>
</includes>
</fileSet>
<fileSet>
<!-- ${project.build.directory}下的jar打到当前路径下,不包含*-sources.jar -->
<directory>${project.build.directory}</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<excludes>
<exclude>*-sources.jar</exclude>
</excludes>
</fileSet>
<fileSet>
<!-- bin下的sh文件打到bin路径下 -->
<directory>${project.build.directory}/bin</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
<!-- 最大文件权限 -->
<fileMode>0777</fileMode>
<!-- unix结束符 -->
<lineEnding>unix</lineEnding>
</fileSet>
<fileSet>
<!-- classes下的*.properties,*.xml文件打到conf路径下 -->
<directory>${project.build.directory}/classes</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
<!-- unix结束符 -->
<lineEnding>unix</lineEnding>
</fileSet>
</fileSets>
使用maven-assembly-plugin打包完成后,target路径下回生成一个zip文件,然后就可以直接将zip包上传并解压缩直接部署了。
六、关于web工程[以下节选自网络]:
web配置与jar不同,默认配置package为war。如果需要自定义配置,需要修改插件配置。
任何一个Maven项目都需要定义POM元素packaging(如果不写则默认值为jar)。
该元素决定了项目的打包方式。实际的情形中,如果你不声明该元素,Maven会帮你生成一个JAR包;如果你定义该元素的值为war,那你会得到一个WAR包;如果定义其值为POM(比如是一个父模块),那什么包都不会生成。
Maven为jar项目调用了maven-jar-plugin,为war项目调用了maven-war-plugin,换言之,packaging直接影响Maven的构建生命周期。了解这一点非常重要,特别是当你需要自定义打包行为的时候,你就必须知道去配置哪个插件。
一个常见的例子就是在打包war项目的时候排除某些web资源文件,这时就应该配置maven-war-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<excludes>
<exclude>**/*.jpg</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
参考资料:
http://maven.apache.org/guides/getting-started/index.html Maven Getting Started Guide
http://maven.apache.org/plugins/index.html Maven官方常用插件一栏
http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin Maven实战系列(七)——常用Maven插件介绍
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package Maven实战(九)——打包的技巧
http://www.iteye.com/topic/1127097 深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤
http://snowolf.iteye.com/blog/953735
http://www.blogjava.net/aoxj/archive/2009/01/16/251615.html
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
分享到:
相关推荐
### Java 生态中的 Maven 与 Gradle:项目管理之道 #### Java 语言概览 Java 作为一种被广泛采用的编程语言,在多个领域中都发挥着关键作用。它由 Sun Microsystems(现已被 Oracle 收购)在 1995 年首次推出。...
【标题】:“Maven工程”是一个广泛使用的Java项目管理和构建工具,它简化了构建过程,通过依赖管理和项目对象模型(POM)的概念,使得开发者能够更有效地管理项目的构建、报告和文档。 【描述】:Maven是Apache...
- [二、基于IDEA的Maven工程创建](#二基于IDEA的Maven工程创建) - [2.1梳理Maven工程GAVP属性](#21梳理Maven工程GAVP属性) - [2.2 Idea构建Maven JavaSE工程](#22-Idea构建Maven-JavaSE工程) - [2.3 Idea构建...
3. **依赖管理**:Maven的核心功能之一就是管理项目依赖。在逆向工程过程中,Maven会分析.class文件中的引用,推断出项目的外部库依赖,并添加到pom.xml文件中。 4. **项目结构重建**:Maven遵循一套标准的目录结构...
这个系统的核心是基于“SpringMVC+Spring+Mybatis”(SSM)的三层架构,结合Maven作为项目构建和依赖管理工具。下面将详细介绍这些技术及其在项目中的应用。 1. **SpringMVC**: SpringMVC是Spring框架的一部分,...
【使用Maven搭建S2SH工程详解一:创建Struts2工程】 在Java Web开发中,S2SH架构(Struts2 + Spring + Hibernate)是一种常见的应用框架组合,用于构建高效、灵活的企业级应用程序。本篇文章主要讲解如何利用Maven...
本文将详细讲解如何在Java工程中配置Maven项目,帮助开发者高效地进行项目构建。 一、Maven简介 Maven是由Apache软件基金会开发的一个项目管理和综合工具。它通过一个XML格式的配置文件(pom.xml)来管理项目的...
创建Java工程是Maven的基本功能之一。使用mvn archetype:generate命令可以启动一个基于不同模板的项目工程的创建。常见的工程类型包括普通的Java应用、Android应用、OSGi bundle、Clojure项目、Web应用打包(WAR)等...
本资源提供了一个手动创建的Maven工程示例,有助于初学者理解和掌握如何从零开始构建Maven项目。 首先,我们要理解Maven的核心概念——Project Object Model (POM)。POM是Maven项目的基本配置单元,包含了项目信息...
Maven通过项目对象模型(POM)来管理项目配置信息,自动化构建、测试和部署过程。以下是对Maven的详细解析: 一、Maven的主要功能和特点 项目结构管理:Maven使用一种约定的项目结构,通过在项目中定义标准目录结构...
#### 五、Maven 工程配置示例 ##### 5.1 pom.xml 文件 - **项目坐标**:在 Maven 项目的核心配置文件 `pom.xml` 中,通过 `<groupId>`, `<artifactId>`, `<version>` 等元素来定义项目的坐标。 - **依赖声明**:...
综上所述,"孔浩maven工程"是一个完整的开发环境,涵盖了Maven的使用和实践,适合学习和实践Maven的各类功能,包括项目构建、依赖管理、多模块组织、自定义配置等。通过这个项目,开发者不仅可以深入了解Maven的工作...
在这个"maven工程小例子"中,我们可能还会遇到如日志管理、异常处理、测试覆盖率报告等其他方面的问题。通过学习和实践,我们可以掌握如何高效地利用Maven和Appium进行Android应用的自动化测试和项目构建。
总结,Maven搭建SSH工程涉及到多个步骤,包括Maven的安装与配置、SSH框架的依赖引入、配置文件的创建和编辑、业务逻辑的编写以及最后的测试与部署。理解并熟练掌握这些步骤,对于Java Web开发者来说是非常重要的技能...
4. **多模块项目支持**:Maven 支持多个模块的项目结构,可以方便地管理大型的、复杂的软件工程。 5. **版本管理**:Maven 提供了 SNAPSHOT 版本的概念,用于处理开发中的不稳定版本。 6. **项目信息报告**:Maven...
本文详细介绍了一个Java简易程序实例—学生信息管理系统的制作流程,涵盖创建Maven项目、配置pom.xml、编写实体类(Student)、业务管理类(StudentManager)以及主控类(Main),并介绍数据如何存于本地txt中。...
【 Maven 工程结构** Maven 项目通常有以下标准目录结构: - `src/main/java`:存放 Java 源代码。 - `src/main/resources`:放置项目资源文件,如配置文件。 - `src/test/java`:存放测试用例的 Java 源代码。 - ...
Maven是一个流行的项目管理工具,用于帮助Java开发人员构建、发布和管理项目。它提供了一种标准化的方式来构建项目、管理依赖、运行测试、生成文档等,使得项目的构建过程更加自动化和规范化。 Maven基于项目对象...