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