eclipse mar2+maven 3.39+tomcat8 构建maven结构的web项目 实现热部署
带图片完整word版本: http://download.csdn.net/detail/mfc2003/9465383
目录结构:
Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。本书将介绍Maven这一跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。1
Maven是优秀的构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。
Maven能帮助我们标准化构建过程。在Maven之前,十个项目可能有十种构建方式;有了Maven之后,所有项目的构建命令都是简单一致的,这极大地避免了不必要的学习成本,而且有利于促进项目团队的标准化。
Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来。手工解决这些问题是十分枯燥的,幸运的是Maven提供了一个优秀的解决方案,它通过一个坐标系统准确地定位每一个构件(artifact),也就是通过一组坐标Maven能够找到任何一个Java
类库(如jar文件)。Maven为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源类库。
Maven是一个项目管理和构建自动化工具。但是对于我们程序员来说,我们最关心的是它的项目构建功能。
最简单的时候场景是,在pom.xml里设置对第三方jar包的依赖,而不用所有用到的jar包都复制到工程lib目录,再配置javapath。再者说在自己引入的jar包会出现很多重复的包,导致版本冲突,而maven会自动管理依赖!
所以这里我们介绍的就是怎样用 maven 来满足我们项目的日常需要。
Maven 使用惯例优于配置的原则 。
它所有的项目都有如下的结构:
目录 |
目的 |
${basedir} |
存放 pom.xml和所有的子目录 |
${basedir}/src/main/java |
项目的 java源代码 |
${basedir}/src/main/resources |
项目的资源,比如说 数据源配置文件,spring配置文件 |
${basedir}/src/test/java |
项目的测试类,比如说 JUnit代码 |
${basedir}/src/test/resources |
测试使用的资源 |
一个 maven 项目在默认情况下会产生 JAR 文件,另外,编译后 的 classes 会放在${basedir}/target/classes 下面, JAR 文件会放在 ${basedir}/target 下面。
下载地址http://maven.apache.org/
下载 zip版本的,
解压放到d盘根目录改名为 maven
设置环境变量MAVEN_HOME为 d:\maven,设置path 为 %MAVEN_HOME%\bin
mvn -v 查看 maven版本,如果能显示说明已经配置好了
cd d:
mkdir temp
cd temp
#开始创建一个新项目(guroupId大项目名 artifactId子项目名 package生成的类的包名
mvn archetype:generate -DgroupId=com.hjs-DartifactId=test1 -Dpackage=com.hjs.controller -Dversion=1.0.1
#archetype是Maven插件的名称
#generate指定目标
Maven自带了很多模板,这里默认的是754 直接回车就是
然后选择版本默认6 直接回车
最后一个是让你确认项目信息 y 回车
然后maven会自动下载好多需要的文件,接着就会创建完毕
在d:\temp下会多一个文件夹 test1
里面有src目录和 pom.xml文件
Src的文件结构是固定的,类似这个结构
在 src/main/java下面会自动生成一个类文件 com.hjs.controller.App.java
App.java是maven自动生成的,前面的包名是我们mvn命令指定的
Shell:>mvnpackage
Maven会生成一个target文件夹
打包成功后会在target文件夹下生成 jar包,也会生成一个classes文件夹,我们用java –cp命令验证一下jar包中是否有App.class
也可以验证classes下面的.class文件
Maven为我们创建的工程test1已经自动生成了pom.xml文件。
整个文件被project标签包起来
第5,6,7行是不是很熟悉?
Properties定义一些属性,也可以自定义变量!
比如下面有一个依赖 Junit3.8.1的版本是 3.8.1,我们可以这样配置,定义一个变量junit.version(名字可以随便写),以后如果pom.xml文件内容很多的话,我要把junit版本换成4.12直接改junit.version即可,而不用到后面去找
我们可以在pom.xml文档里引用文档里的属性值
我可以在pom.xml其他位置,引用工程的子项目名:
而且我还可以在build内部其他地方继续调用finaName
${build.finaName}
重点来了!
一般我们开发的时候用的最多的就是这个,再也不用自己下载jar包了!
而且最重要的是,如我们引入 slf4j,它自己会下载依赖的 log-4j什么的,太爽了!
可以在eclipse或者myeclipse里查看依赖关系,比如我直接引入spring-web ,那么我们不需要再写spring-aop spring-context之类的了!
而直接写 spring-mvc的话,spring-web和 spring-core都不要写了!
前面说到我们需要什么包就在pom.xml里写,问题是我怎么知道如何写呢?
比如我们要连数据库,就需要jdbc驱动
这里groupid artifactId version为什么要写成这样?或者我怎么知道他叫什么名字 版本号是几多?
下载后,jar放哪去了?
下面我来告诉你们。
Maven默认的存放jar包的地方是
https://repo.maven.apache.org/maven2(也可能是 http://repo1.maven.org/maven2)
你进去后可以看到所有包,你可以一个一个下载jar
哈哈开玩笑了!
其实我们可以上http://mvnrepository.com/
比如我项目中要用google的Gson来解析json,那么我需要知道怎么在pom.xml写依赖。
在mvnrepository网站搜索框输入Gson
回车后,会找到好多版本的gson
假如我想要2.6.1的版本,就点2.6.1,会进入一个新界面,这里显示了不同方式获取GSON的脚本。比如maven , Ivy(没用过), gradle(android studio开发android用的是这个)
看到没有?要的东西来了, 默认是maven用的脚本,把这个复制到pom.xml即可
我们在Pom.xml里告诉maven要去中央资源库下载Gson2.6.1,那么它会下载到哪里呢?
默认会下载到 c:\users\登录名\.m2 下面,拥有强迫症的我很不爽,我不喜欢把东西放C盘操作系统下。怎么办?
进入maven的目录,这里是d:\maven\conf, 打开settings.xml
里面有个注释掉的
直接写上
D:\mavenlib是我存放包的目录,你们可以随便写一个存在的目录即可
然后命令行进入工程目录,编译一下项目,会自动下载编译需要的jar
Cd D:\temp\test1
mvn compile
回车后,系统会自动下载。你去d:\mavenlib下发现多了一个 com文件夹,一直进去到
Com.google.code.gson.gson.2.6.1发现jar包 都下载好了
如果需要下载jar的源代码和doc文档呢?
只需要在项目下执行
mvn dependency:sources
你会发现源代码也下来了
当然我们开发的时候都会用IDE,比如eclipse和myeclipse jbuilder之类的。
下面我介绍一下eclipse中如何使用maven
目前的eclipse-javee版本已经自带maven插件了,winows-preferences-左边maven可以看到安装好的maven
点击右边的Add,选定我们自己的maven目录
确认后,会多一个maven ,选中我们刚才新增的这个maven ,点右下方Apply
前面我们说过,maven默认的本地库在C盘的.m2下马,我一般都是自己下载maven,maven库放到非系统盘。
先修改d:\maven\conf\settings.xml 把注销的
然后选择user settings,选定我们自己的settings.xml文件,
最后我们让eclipse 帮我们下载的时候同时下载源代码
如果需要引入maven格式的项目,只需在eclipse中选择file- -import
就会把项目导入到开发环境中,如果选择了下方的 add project to work set就会把工程复制到eclipse的workspace,然后编辑的就是新的workspace中的文件。否则是直接打开原来的项目文件(mars2复制不了?)。
你会发现工程文件都导好了,但是会发现jdk默认用的是1.5
如果你在 java build path中修改为 1.7,右键工程—maven-update project后,又会变成1.5
那就加一段,使用maven-compiler-plugin来设置jdk编译版本。重新update project 就好了。
新建maven普通工程,比maven-web工程还简单,直接下一步即可。我这里介绍maven新建web3.0的项目。
Eclispe中选择file-new-mavenproject
直接选 use default workspace 下一步。
如果要放到别的目录, browse一下就好了。
在这个节目,会显示maven所有的项目模板,太多了!
我们这里在 Filter:中输入web webapp都可以,就过滤到只有一个了
然后下一步
输入项目信息,随便写
点 finish 后,eclipse会自动创建好工程,并且生成 pom.xml文件
我们知道maven规定 src目录下面是 main/java main/resources test/java test/resources
Eclipse只给我们增加了 main/resources我们需要手工添加剩余三个
Eclipse默认生成的web 是2.3的,而且我们调整为3.0还不允许!
右键工程-属性-project facets 修改 dynamic web module为3.0报错!
你也许会问,为什么eclipse最新的mars版本,创建的居然是2.3的,为什么新建maven工程的时候,那个 webapp模板只有1个1.0的,为什么不出一个新的? I sorry!
那就动手改吧!
前面介绍过的,设置maven的编译级别为1.7,因为web3.0要求javaee最低1.6,所以我们要用1.7的jdk
在我们的项目路径下的.settings中修改配置文件,把2.3改为3.0, 1.5改为1.7
保存
当前web.xml的文件头是2.3, 所以我们这里改为3.0的
xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID"version="3.0">
<display-name>firstdisplay-name>
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.jspwelcome-file>
welcome-file-list>
web-app>
Eclipse选择window-preperence窗口中选择Server-RuntimeEnvironments,Add新窗口选择 tomcat的路径。
右键工程—run as- run on server
会自动打开内置的浏览器
上一步新建tomcat服务后,会发现左边工程目录会多一个servers目录
会把tomcat的配置文件全部复制一份到工程目录下
路径为:
D:\web2016\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
运行后分发包会自动生成war格式的文件存放在这里
修改jsp文件后,直接刷新浏览器可以看到实时效果,实现热部署
现在eclipse是用了自己的一份配置文件,和我们自己装的tomcat使用的不是同一个配置。而且eclipse把项目部署的路径这么深,也不利于我们开发。
1. 在eclipse下方的servers窗口,先启动server,然后右键server,然后选择open
2. 默认 server Locations 是灰色的,你要把部署的项目右键 remove掉
3. 然后上面就可以操作了,我选择第2项(根据实际情况选择)
第2项和第3项的区别:
如果选第2项
可以发布多个项目到tomcat,但是tomcat的conf/server.xml会被修改
每发布一个,自动增加一天虚拟目录,而且tomcat里如果已经存在我们自己写的虚拟目录,会被删除!
但是eclipse只有你选run on server的时候会被刷掉,只是启动停止 不会去刷server.xml
如果选第3项
不会去改server.xml,可能在其他地方做了链接,但是它也有弱点,你如果在开发的时候需要发布多个项目的话,它会报错,只有第一个有效,第2个就发布不上去了!
4. 选择本地tomcat路径
5. 选择webapps分发路径
6. 然后 ctrl+s保存
现在终于可以愉快的使用eclipse了!再也不用在mac上装myeclipse碰到很多变态的问题了!
其实以前一直用myeclipse开发。但是myeclipse终究是收费的,说不定哪天被他们盯上让你缴费!
最重要的是最近搞了一个macpro,在上面装了 mysql tomcat webstorm androidstudio 当然还有 xcode了。 但就是装myeclispe2014装不上!
其实我mac也安装了双系统,有人会说直接在mac的windows上开发不就得了。哈哈,我只想我的笔记本是人民币14288元的那个高分辨率屏幕,myeclipse eclipse什么的在高清屏幕下面的图标你都看不清啊,而且整个画面都很模糊,有木有!
再最后:我也装了eclipse的tomcat插件 tomcatplugins3.5感觉已经没有装的必要了
我也在maven 里配置了 maven-tomcat插件,也部署成功了,但是貌似无法动态更新,比如我改了一个jsp,本来刷新一下就能看到效果,结果呢,这个插件必须 maven build一下才行。如果项目大一点的话,这不是要浪费大把时间啊?
也许有办法搞定,但我还没找到,鉴于目前 eclipse上述方案可以满足开发需求!
--by 抗战二十年[email protected]
------------------------------------------- maven setting.xml--------------------------
?xml version="1.0" encoding="UTF-8"?>
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">