首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

2012-10-21 
深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤1:Maven的选择和配置目前Maven主流版本包括Mave

深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤
1:Maven的选择和配置

目前Maven主流版本包括Maven2和Maven3,但是官方推荐使用Maven3,可以到官方站点根据操作系统平台选择压缩包下载,页面下方有Maven的配置方法,原理跟JDK一样,按照步骤配置即可。

这里友情提示一下,win7下不定期出现不识别%M2_HOME%路径,如果CMD下mvn -v始终不好使,可以将%M2_HOME%\bin替换成盘符的绝对路径。

创建项目之前先简单配置下Maven,压缩包解压后会有Maven_PATH\conf\settings.xml文件,使用文本编辑器打开进行编辑(如公司已使用Maven,直接跟同事要一份覆盖自己的文件最方便快捷),自己配置的话主要就是配置几个节点:

localRepository节点:Maven本地仓库路径(将其理解为Maven存放jar包路径即可),我在本地将其配置为

?

<localRepository>E:/tools/apache-maven-3.0.3/local_repos</localRepository>
?

?

proxy节点:配置网络代理的,如有需要配置此节点

mirror节点:如在公司使用Maven,一般都会自己搭建私服,此节点配置私服地址(至于私服是什么可以稍后了解),如果自己用没有私服不用配置,如果想要了解更多,请到这里围观!

?

?

2:创建简单项目

?

打开一个命令行窗口,切换到某一存放项目的目录(例 D:\test_maven_project),输入命令(不包括双引号)“mvn archetype:create -DgroupId=com.iteye.liubey -DartifactId=hello-maven -DpackageName=com.iteye.liubey”,等待Maven创建项目,如果输出包括?BUILD SUCCESS字眼表示项目建立成功,成功的项目目录结构如下所示

?

hello-maven|-- pom.xml`-- src    |-- main    |   `-- java    |       `-- com    |           `-- iteye    |               `-- liubey    |                   `-- App.java    `-- test        `-- java            `-- com                `-- iteye                    `-- liubey                        `-- AppTest.java

?使用

?

mvn package

?来进行打包,出现BUILD SUCCESS表示成功编译成功,如图所示


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

?

使用以下命令验证该项目

?

D:\test_maven_project\hello-maven>java -cp target\hello-maven-1.0-SNAPSHOT.jar com.iteye.liubey.App

?打印出如图所示即表示项目建议成功!


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

3:POM

这时候大家可以围观一下项目根目录的pom.xml文件,他是Maven项目的核心文件,主要都是些理论知识,我就不讲解了,大家可以到这里 这里以及这里进行围观。

?

4:常用Maven命令

创建普通项目:

?

mvn archetype:create -DgroupId=com.iteye.liubey -DartifactId=hello-maven -DpackageName=com.iteye.liubey

?创建WEB应用项目:

?

mvn archetype:create -DgroupId=com.iteye.liubey.web -DartifactId=hello-maven-webapp -DpackageName=com.iteye.liubey.web -DarchetypeArtifactId=maven-archetype-webapp

?生成Eclipse项目文件:

?

mvn eclipse:eclipse

?构建项目但不执行测试:

?

mvn install –Dmaven.test.skip=true

?浏览依赖的项目(生成树状结构):

?

mvn dependency:resolve mvn dependency:tree
?

?

五:创建Web项目

本章主要讲利用Maven命令行建立符合Eclipse WTP格式的项目(这个曾经纠结了我许久,建立的项目怎么也不符合Eclipse的web项目规范),笔者不用MyEclipse,所以只以Eclipse为例子。

1:通过cmd命令行进入workspace文件夹,输入以下命令

?

mvn archetype:generate -DgroupId=com.iteye.liubey -DartifactId=hello-maven-web2 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

?

其中groupId和artifactId是自由输入,读者可以根据自己的意志进行更改,命令行输出BUILD SUCCESS字样表示项目建立成功

2:在cmd中切换进入刚建立的项目文件夹,输入命令生成符合Eclipse WTP规范的web项目:

?

mvn eclipse:eclipse -Dwtpversion=2.0
?

这一步最最关键,正常项目只要eclipse:eclipse就可以,但是web项目需要后面的参数!纠结了许久的地方就是这,就差一个参数。。。

3:利用Eclipse Import---Existing Projects into Workspace导入项目,我这里面会有一个错误出现,错误信息如下:Java compiler level does not match the version of the installed Java project facet.

我的解决之道是在项目上右键Properties---Project Facts将Java的version改成1.6,然后点击Apply后进入Java Build Path将Libraies中的JRE改成本机所装JRE(谁有解决之道?)


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤
?
深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

此时利用Eclipse建立src/main/java,src/test/java,src/test/resources三个source folder,这时候此项目就完全符合Maven web的项目结构了,如图所示:


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

六:真实项目必不可少的Profile

真实项目中,每一个项目都会有多套环境,包括开发环境,测试环境,灰度机环境以及最终的生产环境,每一套环境对应着不同的配置参数,比如JDBC连接信息肯定会有所差别,如果发布到某一环境中就需要改写一次配置文件,只有一个jdbc.properties还可以接受,想象一下真实项目中的配置文件的数量头就大,更重要的是如果写错了某参数后果将不堪设想!此时利用Maven管理的的另一个长处变显现出来了,利用Maven可以为每一个环境配置一个Profile,编译的时候指定Profile的名字即可达到编译文件按需产生。

理论知识可以到这里 这里 这里 这里寻找,我就不多讲了,本身其实很简单的理论。

我将按照步骤教大家如何实现这一非常非常重要的功能。

1:更改pom.xml,此项目中pom.xml最终的代码如下所示

?

<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.iteye.liubey</groupId><artifactId>hello-maven-web2</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>hello-maven-web2 Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><finalName>hello-maven-web2</finalName><resources><resource><!--配置过滤目录 --><directory>src/main/resources</directory><filtering>true</filtering></resource></resources><plugins><plugin><artifactId>maven-war-plugin</artifactId><!-- war包插件,指引web.xml文件所在位置 --><configuration><warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory><webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml></configuration></plugin><plugin><artifactId>maven-resources-plugin</artifactId><version>2.3</version><configuration><!-- <encoding>UTF-8</encoding> --><includes><include>*.properties,*.xml</include><encoding>UTF-8</encoding></includes><excludes><exclude>*.txt</exclude><encoding>GBK</encoding></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-eclipse-plugin</artifactId><version>2.8</version><configuration><wtpversion>2.0</wtpversion><useProjectReferences>false</useProjectReferences></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip><systemProperties><property><name>param</name><value>${param}</value></property></systemProperties></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-1</version><executions><execution><phase>initialize</phase><goals><goal>read-project-properties</goal></goals><configuration><files><file>env_files/properties/${param}.properties</file></files></configuration></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.5</source><target>1.5</target></configuration></plugin></plugins></build><properties><param>dev</param></properties><profiles><!-- 开发环境 --><profile><id>dev</id><activation><!-- 默认 --><activeByDefault>true</activeByDefault></activation></profile><profile><!-- 测试环境 --><id>test</id><properties><param>test</param></properties><build><plugins><plugin><artifactId>maven-war-plugin</artifactId><configuration><warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory><webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml></configuration></plugin><plugin><!-- 可以运行一些命令 --><artifactId>maven-antrun-plugin</artifactId><executions><execution><id>1</id><phase>integration-test</phase><goals><goal>run</goal></goals><configuration><tasks><echo>Deploying Hello Maven Web2</echo><!-- <exec executable="/bin/rm"> <arg value="-rf" /> <arg value="/usr/local/webapps/HelloMavenWeb2" /> </exec> COPY WAR包并修改WAR包名称 <exec executable="/bin/cp"> <arg value="-r" /> <arg value="${basedir}/target/HelloMavenWeb2" /> <arg value="/usr/local/webapps/HelloMavenWeb2" /> </exec> --><echo>Deploy Complete</echo></tasks></configuration></execution></executions></plugin></plugins></build></profile><!-- 生产环境 雷同于测试环境 --><profile><id>prod</id><properties><param>prod</param></properties></profile></profiles></project>
?

?

主要是加入了资源过滤以及profile支持,我共配置了dev,test以及prod三套profile。

2:为了验证Profile是否生效,需做如下步骤,在src/main/resources目录下加入jdbc.properties文件,里面写入代码如下:

?

className=${driverName}param=${param}
?

其中${}格式为Maven编译时可替换变量,其中driverName为在配置文件中声明的变量,param为在pom.xml中声明的变量,此处主要是展示变量可以有两种方式获取,然后再项目根目录创建env_files文件夹,进入env_files文件创建properties文件夹,在properties文件夹下建立两个文件dev.properties和test.properties,此处主要对应于Profile理论上将一个Profile对应一个properties文件:

dev.properties

?

driverName=Oracle
?

test.properties

?

driverName=MySQL

?3:准备工作已经完成,此时切回cmd命令行窗口,输入


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤
?表示执行maven命令,首先clean项目 然后使用名字为dev的Profile来install项目,

执行结果如下所示:


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤
?此时表示项目已经编译并打包成功,进入项目的target文件夹找到hello-maven-web2.war看看里面的变量是不是已经替换成这样了深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤


深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤

七:结尾

Maven是一个学习曲线非常陡峭的工具,但是大家也看到了,如果在日常使用中采用将会带来许多许多好处,其实懂了本篇文章基本上就已经可以在工作中使用Maven了,简历中别忘了写上“精通”深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤深入显出Maven:创建普通及Web项目、使用Profile进行资源过滤,你懂的,但本身Maven是非常复杂的,包括项目的坐标和依赖(包括依赖传递)已经仓库、生命周期和各种各样的插件、和Hudson的结合来达到一键部署等等,非常复杂。有机会再分享!

热点排行