- 浏览: 107278 次
- 性别:
- 来自: 大连
最新评论
-
liubey:
<div class="quote_title ...
深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤 -
frogEye:
写得挺好的,但是不得不说:错别字一大堆
深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤 -
卖火柴的老特工:
3Q.也是刚刚解决掉
Maven编译时两则信息 (Workspace以及default classpath container) -
liubey:
shmily2038 写道现在的技术书籍,就是缺少对细节的深入 ...
2014读书总结 -
shmily2038:
现在的技术书籍,就是缺少对细节的深入描绘,都没啥实际看点。
2014读书总结
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的结合来达到一键部署等等,非常复杂。有机会再分享!
评论
写得挺好的,但是不得不说:错别字一大堆
我说怎么三年了才有人回复
写得挺好的,但是不得不说:错别字一大堆
发表评论
-
2014读书总结
2015-01-11 16:10 1741原文刊于本人博客。 20 ... -
Maven编译时两则信息 (Workspace以及default classpath container)
2013-09-18 15:14 5486使用Maven一年有余,却总是被两则不起眼的编译信息困扰,终想 ... -
Java中未被初始化的字符串打印出“null”的问题的分析
2013-05-07 09:16 5841今天在研究Java面试题的时候发现了这道题,觉得挺有意思,记录 ... -
搬家鸟
2013-03-13 21:26 1066买了个域名,搭了个博客,http://www.liubey.o ... -
SUSE10.2 安装java_JDK1.6
2011-01-26 14:02 2399首先先去java.sun.com下载最新的jdk 我下载的是j ... -
利用HTTPCLIENT操作人人网:登陆,发布状态,随意访问任何人等
2010-12-12 09:38 122这几天研究了一下httpclient,使用它操作人人网做一些事 ... -
break和continue
2010-11-17 10:02 1156break是指强制退出,不执行循环中剩余部分代码,而conti ... -
继承时候的初始化顺序
2010-09-19 09:28 11341. 父类--静态变量 2. 父类--静态初始化块 3. 子类 ... -
一些数据结构的知识
2010-09-17 11:03 12341:ArrayList使用数组实现List接口,所以对于快速的 ... -
JavaScript操作cookie一例
2010-07-27 09:14 991[code="html] <html> ... -
数据结构之栈 队列 优先级队列 简单小结
2010-07-19 15:00 22291。栈、队列和优先级队列是经常用于简化某些程序操作的数据结构。 ... -
利用数据结构中的栈实现单词的反转
2010-07-16 15:40 1601package com.javaeye.liubey.al ... -
java的加密与解密
2010-07-12 15:29 4952加密算法有很多种:这里只大约列举几例: 1:消息摘要:(数字 ... -
“不变"和“只读"的区别
2010-07-12 10:03 942“不变”(Immutable)与“只读”(Read Only) ... -
一个帐号同一时间只能一个人登录
2010-07-12 09:14 957对于一个帐号在同一时间只能一个人登录,可以通过下面的方法实现: ... -
JpetStore中MVC机制实现的研究,BeanAction以及BaseBean工作机制(看完有种恍然大悟的感觉啊!)
2010-07-07 16:57 2163以前学习iBATIS时候只是粗略的看了一下代码,今天翻出来从新 ... -
jdk源代码中有关日期比较
2010-07-07 09:31 1075public int compareTo(Date anoth ... -
String.intern方法
2010-07-06 17:06 1056以前没有注意到这个方法,看effective Java时候发现 ... -
Java 专业人士必备的书籍和网站列表
2010-07-06 13:17 1080这些都是您书架上必备的书和应该经常使用的 Web 链接。时 ... -
2010 年 Java 平台圆桌会议---展望 Java 行业的未来
2010-07-06 08:37 1269简介: Java™ 平台以稳定著称,其社区却相当活跃,但这并不 ...
相关推荐
基于maven创建web项目 maven是一种基于项目对象模型(Project Object Model,POM)的项目管理工具,由Apache软件基金会开发和维护。maven提供了一种标准化的方式来构建、打包和部署项目,它可以帮助开发者简化项目...
创建好的 Maven 工程是一个普通的 Java 项目,而不是 Web 项目,所以需要进行改造。在 main 目录下创建一个 webapp 文件夹,然后选择 project Structure --> facets--> 点击 + 号添加 web 项目,选择当前工程 hello_...
### 使用Idea14.1.4和Maven创建Java Web项目 #### 一、概述 在本篇文章中,我们将详细介绍如何使用IntelliJ IDEA 14.1.4版本结合Maven来创建一个Java Web项目。这种方法不仅能够提高开发效率,还能确保项目的结构...
3. **设置Web内容目录**:在项目属性中,确保“Web Content”指向`src/main/webapp`目录,这是Maven Web项目的默认Web资源位置。 4. **配置服务器**:在Eclipse中添加并配置你需要的Web服务器,例如Tomcat或Jetty,...
### Maven核心概念详解 #### 1. 项目对象模型(Project Object Model, POM) - **定义**:POM是Maven的核心概念之一,它是一个XML文件,通常命名为`pom.xml`,用来描述项目的结构、配置以及与其他项目的关系。 - *...
本文将深入探讨如何在Eclipse中利用Maven创建一个Web应用程序项目。 首先,我们需要理解“Eclipse使用Maven无法建web项目”这个问题可能涉及到的几个关键点。在Eclipse中创建Maven Web项目时,可能会遇到诸如Maven...
《深入浅出Maven:构建、管理与优化Java项目》 在现代软件开发流程中,Maven作为一款自动化构建工具,扮演着至关重要的角色。它不仅简化了项目的构建过程,还提供了项目信息管理和依赖关系管理的强大功能。本文将从...
本篇文章将深入探讨如何使用Maven构建Web项目,并详细解释如何将构建好的项目部署到Tomcat服务器。 首先,Maven是Apache软件基金会的一个开源项目,它通过一个统一的方式来管理项目的构建、报告和文档。Maven的核心...
"Maven 项目转动态 Web 项目并部署到 Tomcat" Maven 项目转动态 Web 项目并部署到 Tomcat 是一个常见的操作,特别是在 Eclipse 和 Tomcat 环境下。本文将详细介绍如何将 Maven 项目转换为动态 Web 项目,并将其部署...
【标题】:“idea使用maven创建的web项目” 在Java开发中,IntelliJ IDEA(简称Idea)作为一款强大的集成开发环境,结合Maven构建工具,能够帮助开发者高效地管理项目的依赖、构建和部署。Maven是一个项目管理和...
通过以上步骤,我们成功地使用 Maven 和 Eclipse 创建了一个 Web 项目,并按照 Maven 的规范进行了结构调整。这种做法不仅有助于保持项目结构的清晰和一致,还能充分利用 Maven 的强大功能,提高开发效率。在未来...
【标题】"mavenWeb空项目"所涉及的知识点主要集中在Java编程语言和Maven构建工具上,这是一个基于Maven的、已经过单元测试的Web应用程序的基础框架。下面将详细介绍这两个核心领域的相关知识。 **一、Java编程语言*...
【标题】"用idea创建的maven web项目"是一个基于IntelliJ IDEA(简称idea)开发工具构建的Maven Web应用程序。Maven是Java领域的一个项目管理和构建工具,它通过提供一套规范化的项目结构和自动化的构建流程,帮助...
maven搭建web项目hello world
本资源"idea创建maven web项目标准结构源码"提供了一个基础的模板,帮助开发者快速搭建一个能够正常启动的Web应用。 首先,让我们详细了解Idea创建Maven Web项目的标准结构。一个典型的Maven Web项目结构如下: 1....
【maven web项目 Demo】是基于Maven构建的Web应用程序示例,旨在帮助开发者理解如何使用Maven管理和构建Web项目。Maven是一个强大的项目管理工具,它自动化构建过程,包括编译、测试、打包、部署等,使得开发更加...
使用Eclipse创建Maven版的Web项目需要通过Maven的项目模板来建立项目,然后配置项目的结构和依赖关系,最后构建项目的框架。本文将详细介绍每一步骤的操作。 标签解释 标签"Maven Web"表示本文的主要内容是关于...
在本教程中,我们将深入探讨如何使用Maven来创建一个Web项目,特别是针对BI(Business Intelligence)产品开发的经典技术框架——SSM(Spring、Spring MVC和MyBatis)。 首先,让我们理解SSM框架的组成部分: 1. *...