深入浅出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包路径即可),我在本地将其配置为

 

Xml代码 复制代码  收藏代码
  1. <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字眼表示项目建立成功,成功的项目目录结构如下所示

 

Java代码 复制代码  收藏代码
  1. hello-maven  
  2. |-- pom.xml  
  3. `-- src  
  4.     |-- main  
  5.     |   `-- java  
  6.     |       `-- com  
  7.     |           `-- iteye  
  8.     |               `-- liubey  
  9.     |                   `-- App.java  
  10.     `-- test  
  11.         `-- java  
  12.             `-- com  
  13.                 `-- iteye  
  14.                     `-- liubey  
  15.                         `-- AppTest.java  
hello-maven
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- iteye
    |               `-- liubey
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- iteye
                    `-- liubey
                        `-- AppTest.java

 使用

 

Java代码 复制代码  收藏代码
  1. mvn package  
mvn package

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


 

使用以下命令验证该项目

 

Java代码 复制代码  收藏代码
  1. D:\test_maven_project\hello-maven>java -cp target\hello-maven-1.0-SNAPSHOT.jar c  
  2. om.iteye.liubey.App  
D:\test_maven_project\hello-maven>java -cp target\hello-maven-1.0-SNAPSHOT.jar c
om.iteye.liubey.App

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


3:POM

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

 

4:常用Maven命令

创建普通项目:

 

Java代码 复制代码  收藏代码
  1. mvn archetype:create -DgroupId=com.iteye.liubey -DartifactId=hello-maven -DpackageName=com.iteye.liubey  
mvn archetype:create -DgroupId=com.iteye.liubey -DartifactId=hello-maven -DpackageName=com.iteye.liubey

 创建WEB应用项目:

 

Java代码 复制代码  收藏代码
  1. mvn archetype:create -DgroupId=com.iteye.liubey.web -DartifactId=hello-maven-webapp -DpackageName=com.iteye.liubey.web -DarchetypeArtifactId=maven-archetype-webapp  
mvn archetype:create -DgroupId=com.iteye.liubey.web -DartifactId=hello-maven-webapp -DpackageName=com.iteye.liubey.web -DarchetypeArtifactId=maven-archetype-webapp

 生成Eclipse项目文件:

 

Java代码 复制代码  收藏代码
  1. mvn eclipse:eclipse  
mvn eclipse:eclipse

 构建项目但不执行测试:

 

Java代码 复制代码  收藏代码
  1. mvn install –Dmaven.test.skip=true  
mvn install –Dmaven.test.skip=true

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

 

Java代码 复制代码  收藏代码
  1. mvn dependency:resolve mvn dependency:tree  
mvn dependency:resolve mvn dependency:tree
 

 

五:创建Web项目

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

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

 

Java代码 复制代码  收藏代码
  1. mvn archetype:generate -DgroupId=com.iteye.liubey -DartifactId=hello-maven-web2 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false  
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项目:

 

Java代码 复制代码  收藏代码
  1. mvn eclipse:eclipse -Dwtpversion=2.0  
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(谁有解决之道?)



 

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


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

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

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

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

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

 

Xml代码 复制代码  收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.iteye.liubey</groupId>  
  5.     <artifactId>hello-maven-web2</artifactId>  
  6.     <packaging>war</packaging>  
  7.     <version>1.0-SNAPSHOT</version>  
  8.     <name>hello-maven-web2 Maven Webapp</name>  
  9.     <url>http://maven.apache.org</url>  
  10.     <dependencies>  
  11.         <dependency>  
  12.             <groupId>junit</groupId>  
  13.             <artifactId>junit</artifactId>  
  14.             <version>3.8.1</version>  
  15.             <scope>test</scope>  
  16.         </dependency>  
  17.     </dependencies>  
  18.     <build>  
  19.         <finalName>hello-maven-web2</finalName>  
  20.         <resources>  
  21.             <resource>  
  22.                 <!--配置过滤目录 -->  
  23.                 <directory>src/main/resources</directory>  
  24.                 <filtering>true</filtering>  
  25.             </resource>  
  26.         </resources>  
  27.         <plugins>  
  28.             <plugin>  
  29.                 <artifactId>maven-war-plugin</artifactId>  
  30.                 <!-- war包插件,指引web.xml文件所在位置 -->  
  31.                 <configuration>  
  32.                     <warSourceDirectory>  
  33.                         ${basedir}/src/main/webapp  
  34.                     </warSourceDirectory>  
  35.                     <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>  
  36.                 </configuration>  
  37.             </plugin>  
  38.             <plugin>  
  39.                 <artifactId>maven-resources-plugin</artifactId>  
  40.                 <version>2.3</version>  
  41.                 <configuration>  
  42.                     <!-- <encoding>UTF-8</encoding> -->  
  43.                     <includes>  
  44.                         <include>*.properties,*.xml</include>  
  45.                         <encoding>UTF-8</encoding>  
  46.                     </includes>  
  47.                     <excludes>  
  48.                         <exclude>*.txt</exclude>  
  49.                         <encoding>GBK</encoding>  
  50.                     </excludes>  
  51.                 </configuration>  
  52.             </plugin>  
  53.             <plugin>  
  54.                 <groupId>org.apache.maven.plugins</groupId>  
  55.                 <artifactId>maven-eclipse-plugin</artifactId>  
  56.                 <version>2.8</version>  
  57.                 <configuration>  
  58.                     <wtpversion>2.0</wtpversion>  
  59.                     <useProjectReferences>false</useProjectReferences>  
  60.                 </configuration>  
  61.             </plugin>  
  62.             <plugin>  
  63.                 <groupId>org.apache.maven.plugins</groupId>  
  64.                 <artifactId>maven-surefire-plugin</artifactId>  
  65.                 <configuration>  
  66.                     <skip>true</skip>  
  67.                     <systemProperties>  
  68.                         <property>  
  69.                             <name>param</name>  
  70.                             <value>${param}</value>  
  71.                         </property>  
  72.                     </systemProperties>  
  73.                 </configuration>  
  74.             </plugin>  
  75.             <plugin>  
  76.                 <groupId>org.codehaus.mojo</groupId>  
  77.                 <artifactId>properties-maven-plugin</artifactId>  
  78.                 <version>1.0-alpha-1</version>  
  79.                 <executions>  
  80.                     <execution>  
  81.                         <phase>initialize</phase>  
  82.                         <goals>  
  83.                             <goal>read-project-properties</goal>  
  84.                         </goals>  
  85.                         <configuration>  
  86.                             <files>  
  87.                                 <file>env_files/properties/${param}.properties</file>  
  88.                             </files>  
  89.                         </configuration>  
  90.                     </execution>  
  91.                 </executions>  
  92.             </plugin>  
  93.             <plugin>  
  94.                 <artifactId>maven-compiler-plugin</artifactId>  
  95.                 <version>2.0.2</version>  
  96.                 <configuration>  
  97.                     <source>1.5</source>  
  98.                     <target>1.5</target>  
  99.                 </configuration>  
  100.             </plugin>  
  101.         </plugins>  
  102.     </build>  
  103.     <properties>  
  104.         <param>dev</param>  
  105.     </properties>  
  106.     <profiles>  
  107.         <!-- 开发环境 -->  
  108.         <profile>  
  109.             <id>dev</id>  
  110.             <activation>  
  111.                 <!-- 默认 -->  
  112.                 <activeByDefault>true</activeByDefault>  
  113.             </activation>  
  114.         </profile>  
  115.         <profile>  
  116.             <!-- 测试环境 -->  
  117.             <id>test</id>  
  118.             <properties>  
  119.                 <param>test</param>  
  120.             </properties>  
  121.             <build>  
  122.                 <plugins>  
  123.                     <plugin>  
  124.                         <artifactId>maven-war-plugin</artifactId>  
  125.                         <configuration>  
  126.                             <warSourceDirectory>  
  127.                                 ${basedir}/src/main/webapp  
  128.                             </warSourceDirectory>  
  129.                             <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>  
  130.                         </configuration>  
  131.                     </plugin>  
  132.                     <plugin>  
  133.                         <!-- 可以运行一些命令 -->  
  134.                         <artifactId>maven-antrun-plugin</artifactId>  
  135.                         <executions>  
  136.                             <execution>  
  137.                                 <id>1</id>  
  138.                                 <phase>integration-test</phase>  
  139.                                 <goals>  
  140.                                     <goal>run</goal>  
  141.                                 </goals>  
  142.                                 <configuration>  
  143.                                     <tasks>  
  144.                                         <echo>Deploying Hello Maven Web2</echo>  
  145.                                         <!-- <exec executable="/bin/rm"> <arg value="-rf" /> <arg value="/usr/local/webapps/HelloMavenWeb2"   
  146.                                             /> </exec> COPY WAR包并修改WAR包名称 <exec executable="/bin/cp"> <arg value="-r"   
  147.                                             /> <arg value="${basedir}/target/HelloMavenWeb2" /> <arg value="/usr/local/webapps/HelloMavenWeb2"   
  148.                                             /> </exec> -->  
  149.                                         <echo>Deploy Complete</echo>  
  150.                                     </tasks>  
  151.                                 </configuration>  
  152.                             </execution>  
  153.                         </executions>  
  154.                     </plugin>  
  155.                 </plugins>  
  156.             </build>  
  157.         </profile>  
  158.         <!-- 生产环境 雷同于测试环境 -->  
  159.         <profile>  
  160.             <id>prod</id>  
  161.             <properties>  
  162.                 <param>prod</param>  
  163.             </properties>  
  164.         </profile>  
  165.     </profiles>  
  166. </project>  
 

 

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

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

 

Xml代码 复制代码  收藏代码
  1. className=${driverName}  
  2. param=${param}  
 

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

dev.properties

 

Xml代码 复制代码  收藏代码
  1. driverName=Oracle  
 

test.properties

 

Xml代码 复制代码  收藏代码
  1. driverName=MySQL  

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



 表示执行maven命令,首先clean项目 然后使用名字为dev的Profile来install项目,

执行结果如下所示:



 此时表示项目已经编译并打包成功,进入项目的target文件夹找到hello-maven-web2.war看看里面的变量是不是已经替换成这样了


七:结尾

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

 

 

转载自:http://liubey.iteye.com/blog/1693577

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值