本文的读者需要拥有一些Maven基础知识和实践,如果没有,请直接绕过或者先看一些关于Maven教程,比如Juven翻译的《Maven权威指南》,google一下便知。

开门见山,首先抛出一个问题(如果你对我遇到的问题不敢兴趣,请飘过,直接看分割线以下的文字):

我有一个团队基础框架项目,代号:framework,用maven构建,是个war类型的项目。团队中其他的应用项目都会用到它,包括Java程序和Web相关的一些文件(js、css和html等公共组件)。所以我在package的时候产出了多个构建,包括:包含Java程序的jar文件(classifier为bin)和包含Web公共组件的zip文件(classifier为webcontent)等,并发布到了svn上。因为众多项目中用纯Eclipse和Eclipse+Maven构建的都不在少数,所以我认为这样将将框架打包发布是最平衡的一种方式。

在我负责的一个应用项目中(这个项目是用Eclipse+Maven构建的,暂且叫他应用项目A)的pom的依赖中包含了这个framework项目,且classifier设置为bin。用maven-tomcat-plugin的方式部署运行是没问题的,应用项目A的WEB-INF/lib目录中会被自动添加framework-bin-<版本号>.jar文件,但是在这种用命令行启动maven-tomcat-plugin运行项目的情况下是无法停在断点并进行调试的。而后,我只能试图用eclipse环境下设置的Tomcat启动应用项目A,但是这时会报出找不到framework中的一些类定义的错误。其实,如果framework项目是个jar类型的Maven项目的话这种错误是不会出现的,因为m2eclipse会在发布的时候自动将framework打成jar包并放入应用项目A的WEB-INF/lib目录中去。这一点m2eclipse做的非常好,毫无疑问。但是问题是,framework是以Web项目形式存在的,即:类型是war。在这种情况下,m2eclipse打的framework项目的jar包的内部实际上是war包的结构。也就是说,其中的结构完全是Web项目的,包含了WEB-INF等文件夹,真正需要用到的Java程序也被放入了WEB-INF/classes目录中。前面我们说将应用项目A的framework项目依赖的classifier设置为了bin,在framework项目中也加入了classifier为bin的打包配置,并部署到了Maven私库中。但是m2eclipse在配合应用项目A在eclipse环境下的Tomcat部署时并没有关注到classifier。我怀疑是m2eclipse不妥的一个地方,而不是我的配置问题。

-----------这里是分割线-----------

以上是我遇到的问题,在用N种方法无效的情况下,我想到了直接用maven-tomcat-plugin来部署、运行和调试应用项目A。Juven的《Maven实战》中可能会有介绍,但是书没在办公室,也不便查看:)。网上找到了一些资料,都很繁琐。最后看到了一篇国外的文章:http://docs.codehaus.org/display/MAVENUSER/Dealing+with+Eclipse-based+IDE。从中获知在Maven的2.0.8版本之前,在Eclipse+Tomcat的环境下调试Maven项目确实需要做很多配置,但是在2.0.8版本之后就方便多了。具体方式如下:

1、在安装了m2eclipse插件并配置好maven-tomcat-plugin后,单击Eclipse菜单“Run”中的“Run Configurations”。

2、在弹出的对话框中的左侧树中找“到Maven Build”,在其上点击右键并单击“New”。

3、在右侧的“Name”一栏填入自定义的名称。单击在“Main”选项卡的“Browse Workspace”按钮,选择目标项目,选择后在“Base directory”一栏中会出现形如“${workspace_loc:/project_a}”的内容(project_a是前文所述应用项目A,它会根据你所选的目标项目而改变)。

4、在“Goals”一栏中填入“tomcat:run”。

5、在“Maven Runtime”选择你需要的Maven环境(注意:必须是2.0.8以上的版本)。

6、单击“Apply”,配置完成。

经过测试,通过以上配置,在eclipse自身的Run(“右箭头”)和Debug(“小虫子”)按钮下都会找到以你先前配置中“Name”值为名的条目(条目最前端也会有“m2”标识),单击之后即可启动基于Tomcat之上的相应项目的运行操作或调试操作。至于是运行项目还是调试项目,只取决于你单击的条目是在“右箭头”按钮下还是在“小虫子”按钮下。从这方面来看,他们还是很智能化的。

其实上述配置并不复杂,我相信读者按照以上步骤去做是完全可以搞定的。分割线之前的问题是想引发大家关于软件易用性、兼容性方面的的一些思考。希望对这两点有兴趣的朋友回帖探讨。

本文出自 “Hyper Mind” 博客,请务必保留此出处http://freej.blog.51cto.com/235241/449339

Maven + Eclipse + Tomcat - 开启项目调试之旅(转载)的更多相关文章

  1. Maven + Eclipse + Tomcat - 开启项目调试之旅(转)

    本文的读者需要拥有一些Maven基础知识和实践,如果没有,请直接绕过或者先看一些关于Maven教程,比如Juven翻译的<Maven权威指南>,google一下便知. 开门见山,首先抛出一 ...

  2. tomcat开启远程调试

    tomcat开启远程调试模式: 需要在启动脚本中的 JAVA_OPTS='-server -Xms1024m -Xmx1024m -Xmn384m -Xss256k -XX:PermSize=128m ...

  3. maven + eclipse + tomcat热部署

    环境:eclipse  + tomcat  + maven + m2eclipse 解决这种问题有两种方案(方案二更好用,不想看方案一的人可以直接绕过). 方案一: 第一种方案摘自http://blo ...

  4. Eclipse+Tomcat部署项目的一些总结

    1. eclipse运行web项目后, 默认保存到 workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps. ...

  5. Jfinal本地eclipse+tomcat运行项目时候遇到错误Exception starting filter

    今天想在本地eclipse上启动tomcat让项目在本地运行,但是老是报错类找不到异常. 也可能报其它错误,大概都是classNotFoundException. 九月 19, 2018 5:42:2 ...

  6. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener--转

    原文地址:http://www.cnblogs.com/amosli/p/4067665.html 在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.Clas ...

  7. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context ...

  8. Eclipse Tomcat配置/管理/调试指南

    从myeclipse转到Eclipse最不方便的之一莫过于Web项目部署了,老是在想怎么不能把myeclipse的那个移植过来,或者有没有高人能按照Myeclipse开发一个,非常遗憾. 原版的Ecl ...

  9. maven + eclipse + tomcat热部署 引自:http://jingpin.jikexueyuan.com/article/23068.html

    方案二: 1.修改tomcat的server.xml配置文件,在host结点下添加如下代码 Xml代码   <Context docBase="F:\eclipse_workspace ...

随机推荐

  1. C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理

    C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ...

  2. web中的水晶报表 "出现通信错误。将停止打印"

    被这个问题快折腾死,死活都找不到原因,找了一堆解答,无外乎这几种情况,但都不管用 在Page_Init中绑定数据.无效. activex控件的版本,我试过10.2.0.1146等多个版本的dll,10 ...

  3. 【nodejs】使用put方式向后端提交数据

    页面代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Ty ...

  4. iOS用户体验之-导航之道

    iOS用户体验之-导航之道 用户不会意识到有导航指向的存在除非他遇到非预期的效果. 能够说导航时逻辑跳转的节点.所以导航对用户体验是至关重要的. iOS中有三种类型的导航.每一种适合不同类型的app. ...

  5. C#.NET常见问题(FAQ)-TabControl如何隐藏和显示页面

    如果需要显示某个页面,则让他的Parent就是TabControl的控件名称,如果要隐藏,则等于null      private void ToolStripMenuItemTeachPanelBa ...

  6. Octave中plot函数的用法

    octave:14> help plot'plot' is a function from the file C:\Octave\Octave3.6.4_gcc4.6.2\share\octav ...

  7. secureCRT简单设置(学习笔记二)

    菜鸟记录. 一.更改终端类型 选项-全局选项-默认会话-编辑默认设置-终端-仿真-右侧选择类型,下方设置缓冲区大小 二.设置字体和外观 上方窗口外观-右侧设置-字体设置字体类型大小,下面光标可以设置光 ...

  8. Android的startActivityForResult不起作用

    之前startActivityForResult一直用的好好的,今天发现怎么也不起作用.检查后发现有两点影响了. 1.android:launchMode="singleTask" ...

  9. 笔试题之java基础

    Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自传智 ...

  10. Python 图形界面(GUI)设计

    不要问我为什么要用 Python 来做这种事,我回到“高兴咋地”也不是不可以,总之好奇有没有好的解决方案.逛了一圈下来,总体上来说,Python 图形界面有以下几个可行度比较高的解决方案. 1. py ...