`

工程管理之四:Maven工程管理配置

 
阅读更多

最近经常使用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入门和进阶

    - [二、基于IDEA的Maven工程创建](#二基于IDEA的Maven工程创建) - [2.1梳理Maven工程GAVP属性](#21梳理Maven工程GAVP属性) - [2.2 Idea构建Maven JavaSE工程](#22-Idea构建Maven-JavaSE工程) - [2.3 Idea构建...

    项目管理-maven(一)

    Maven是一个流行的项目管理工具,用于帮助Java开发人员构建、发布和管理项目。它提供了一种标准化的方式来构建项目、管理依赖、运行测试、生成文档等,使得项目的构建过程更加自动化和规范化。 Maven基于项目对象...

    maven window下安装包

    第13章:使用Maven生成项目原型/13.2 编写自己的项目原型/13.2.6 按照项目原型生成Maven工程 第14章:灵活的构建/14.1 Maven的属性/14.1.1 概念 第14章:灵活的构建/14.1 Maven的属性/14.1.2 属性分类/14.1.2.1 内置...

    在java工程中配置maven项目

    教你怎么在java工程中配置maven项目。

    Maven 3.6.1安装包,在 Windows 系统上使用该资源来快速搭建和管理 Maven 环境

    本资源是 Maven 3.6.1 的二进制安装包(apache-maven-3.6.1-bin.zip),用于在 Windows 系统上安装和配置 Maven 构建工具。Maven 是一个开源的项目管理和构建工具,可用于管理 Java 项目的依赖、编译源代码、运行...

    maven安装配置+myeclipse2017配置+创建maven项目

    1 下载apache-maven-3.3.9并解压 2 配置maven环境变量 (1)在系统变量栏新建变量 (2)编辑系统变量的Path,结尾添加 ;%MAVEN_HOME%\bin(注意分号) ...以上就将maven配置到了myeclipse中,就可以新建maven工程

    maven工程配置Tomcat热部署

    在用maven项目的时候,很多时候不想去再把项目部署到Tomcat上,然后发布并启动,这个时候我们就可以运用Tomcat热部署来配置,只需要再maven的配置文件加上一小段代码即可,非常方便! 启动的时候直接:右键项目--...

    项目管理与SSM框架——Maven学习与案例练习

    此文章包含Maven介绍与安装、Maven在工程开发中的相关配置、Maven如何进行工程测试、Maven的以来冲突调节原则、Maven的聚合开发,以及用一个简单的实操案例对Maven进行练习。 适用于任何学习项目管理与SSM框架中,...

    Apache Maven-3.0.3以及相关的配置说明

    Maven用于配置管理工程所需的jar包,所有工程统一应用Maven配置的jar。这样方便工程的管理,不需要每次替换jar包文件,只需要修改maven中jar的版本相关配置。包括maven3.0.3工具、eclipse的maven插件、相关的配置...

    maven配置步骤

    maven 在 eclipse中的配置 新手搭建maven工程,遇到maven配置问题,搭配完自己总结的

    Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

    环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

    maven配置文件

    java配置maven工程,maven文件下载,以及在java编译器中配置相关信息!!!

    IDEA11 Maven3快速入门及应用

    Maven简介 Maven准备 Maven目录分析 Maven本地仓库 IDEA启用Maven功能 IDEA创建Maven工程 IDEA执行Maven命令 Maven配置POM 配置Maven远程仓库(私服)

    配置文件maven

    maven 配置文件 用于创建maven项目工程 可以配置本地仓库

    Maven实战,工程配置

    非常值得一学的Maven工程配置,实现。

    ojdbc14 jar包资源及通过配置本地库加载到maven工程

    ojdbc14 jar包资源及通过配置本地库加载到maven工程,已测试可用

    maven基础入门教程

    maven 入门教程PDF,包括maven介绍,配置,项目创建,eclipse创建maven项目等

    初学者配置maven及使用SSM框架创建maven项目

    这是一个压缩包。这是一个maven项目,使用Java语言开发的web工程,使用了SpringMVC+Spring+Mybatis,建议初学者入手。

    maven:项目管理工具;安装、使用及配置

    Maven基于项目对象模型(Project Object Model,POM)来管理项目,通过定义一系列规范化的目录结构和配置文件来管理项目的构建过程和依赖关系。Maven的主要作用是提高Java项目的可维护性、可重用性和可扩展性。

    maven下通用的ant配置文件

    maven下通用的ant配置文件,只要0积分。只需修改11行末尾的target/自己的工程名即可。

Global site tag (gtag.js) - Google Analytics