`
liubey
  • 浏览: 107278 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多

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表示成功编译成功,如图所示


 

使用以下命令验证该项目

 

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命令

创建普通项目:

 

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(谁有解决之道?)



 

此时利用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最终的代码如下所示

 

<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命令,首先clean项目 然后使用名字为dev的Profile来install项目,

执行结果如下所示:



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


七:结尾

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

  • 大小: 181.5 KB
  • 大小: 14.9 KB
  • 大小: 95.3 KB
  • 大小: 109.7 KB
  • 大小: 15.6 KB
  • 大小: 8.5 KB
  • 大小: 172.4 KB
  • 大小: 8.6 KB
分享到:
评论
2 楼 liubey 2015-07-23  
frogEye 写道

写得挺好的,但是不得不说:错别字一大堆

   我说怎么三年了才有人回复
1 楼 frogEye 2015-07-21  

写得挺好的,但是不得不说:错别字一大堆

相关推荐

    基于maven创建web项目

    基于maven创建web项目 maven是一种基于项目对象模型(Project Object Model,POM)的项目管理工具,由Apache软件基金会开发和维护。maven提供了一种标准化的方式来构建、打包和部署项目,它可以帮助开发者简化项目...

    idea使用maven创建web项目详细教程

    创建好的 Maven 工程是一个普通的 Java 项目,而不是 Web 项目,所以需要进行改造。在 main 目录下创建一个 webapp 文件夹,然后选择 project Structure --&gt; facets--&gt; 点击 + 号添加 web 项目,选择当前工程 hello_...

    使用Idea14.1.4和maven创建java web项目

    ### 使用Idea14.1.4和Maven创建Java Web项目 #### 一、概述 在本篇文章中,我们将详细介绍如何使用IntelliJ IDEA 14.1.4版本结合Maven来创建一个Java Web项目。这种方法不仅能够提高开发效率,还能确保项目的结构...

    maven项目转换WEB项目

    3. **设置Web内容目录**:在项目属性中,确保“Web Content”指向`src/main/webapp`目录,这是Maven Web项目的默认Web资源位置。 4. **配置服务器**:在Eclipse中添加并配置你需要的Web服务器,例如Tomcat或Jetty,...

    深入浅出maven3

    ### Maven核心概念详解 #### 1. 项目对象模型(Project Object Model, POM) - **定义**:POM是Maven的核心概念之一,它是一个XML文件,通常命名为`pom.xml`,用来描述项目的结构、配置以及与其他项目的关系。 - *...

    Eclipse使用Maven无法建web项目

    本文将深入探讨如何在Eclipse中利用Maven创建一个Web应用程序项目。 首先,我们需要理解“Eclipse使用Maven无法建web项目”这个问题可能涉及到的几个关键点。在Eclipse中创建Maven Web项目时,可能会遇到诸如Maven...

    深入浅出maven

    《深入浅出Maven:构建、管理与优化Java项目》 在现代软件开发流程中,Maven作为一款自动化构建工具,扮演着至关重要的角色。它不仅简化了项目的构建过程,还提供了项目信息管理和依赖关系管理的强大功能。本文将从...

    maven构建web项目

    本篇文章将深入探讨如何使用Maven构建Web项目,并详细解释如何将构建好的项目部署到Tomcat服务器。 首先,Maven是Apache软件基金会的一个开源项目,它通过一个统一的方式来管理项目的构建、报告和文档。Maven的核心...

    maven项目转动态web项目,部署到tomcat

    "Maven 项目转动态 Web 项目并部署到 Tomcat" Maven 项目转动态 Web 项目并部署到 Tomcat 是一个常见的操作,特别是在 Eclipse 和 Tomcat 环境下。本文将详细介绍如何将 Maven 项目转换为动态 Web 项目,并将其部署...

    idea使用maven创建的web项目

    【标题】:“idea使用maven创建的web项目” 在Java开发中,IntelliJ IDEA(简称Idea)作为一款强大的集成开发环境,结合Maven构建工具,能够帮助开发者高效地管理项目的依赖、构建和部署。Maven是一个项目管理和...

    maven创建web工程

    通过以上步骤,我们成功地使用 Maven 和 Eclipse 创建了一个 Web 项目,并按照 Maven 的规范进行了结构调整。这种做法不仅有助于保持项目结构的清晰和一致,还能充分利用 Maven 的强大功能,提高开发效率。在未来...

    mavenWeb空项目

    【标题】"mavenWeb空项目"所涉及的知识点主要集中在Java编程语言和Maven构建工具上,这是一个基于Maven的、已经过单元测试的Web应用程序的基础框架。下面将详细介绍这两个核心领域的相关知识。 **一、Java编程语言*...

    用idea创建的maven web项目

    【标题】"用idea创建的maven web项目"是一个基于IntelliJ IDEA(简称idea)开发工具构建的Maven Web应用程序。Maven是Java领域的一个项目管理和构建工具,它通过提供一套规范化的项目结构和自动化的构建流程,帮助...

    maven搭建web项目

    maven搭建web项目hello world

    idea创建maven web项目标准结构源码

    本资源"idea创建maven web项目标准结构源码"提供了一个基础的模板,帮助开发者快速搭建一个能够正常启动的Web应用。 首先,让我们详细了解Idea创建Maven Web项目的标准结构。一个典型的Maven Web项目结构如下: 1....

    maven web项目 Demo

    【maven web项目 Demo】是基于Maven构建的Web应用程序示例,旨在帮助开发者理解如何使用Maven管理和构建Web项目。Maven是一个强大的项目管理工具,它自动化构建过程,包括编译、测试、打包、部署等,使得开发更加...

    Eclipse创建基于MAVEN的web项目

    使用Eclipse创建Maven版的Web项目需要通过Maven的项目模板来建立项目,然后配置项目的结构和依赖关系,最后构建项目的框架。本文将详细介绍每一步骤的操作。 标签解释 标签"Maven Web"表示本文的主要内容是关于...

    Maven创建Web项目

    在本教程中,我们将深入探讨如何使用Maven来创建一个Web项目,特别是针对BI(Business Intelligence)产品开发的经典技术框架——SSM(Spring、Spring MVC和MyBatis)。 首先,让我们理解SSM框架的组成部分: 1. *...

Global site tag (gtag.js) - Google Analytics