eclipse插件使用(开发一个调试JSP的Eclipse插件)

本文目录
- 开发一个调试JSP的Eclipse插件
- eclipse中安装svn插件怎么使用
- eclipse alibaba代码规范插件怎么使用
- 如何在Eclipse中安装和使用微软的TFS插件
- eclipse插件怎么用
- 如何在eclipse中安装FindBugs插件(使用links方法)
- 有关如何使用eclipse 进行插件安装
开发一个调试JSP的Eclipse插件
本文通过开发一个JSP 器插件的示例,介绍了 Eclipse 中设置 JSP 断点的方法,以及如何远程调试 JSP。作为基础知识,本文的前两部分描述了 JAVA Debug 和 JSR-45 的基本原理。
环境要求: 本文的代码是在 Eclipse3.0.0,JDK1.4.2 和 Tomcat5.0.5 上测试过的。
JAVA 调试框架(JPDA)简介
JPDA 是一个多层的调试框架,包括 JVMDI、JDWP、JDI 三个层次。JAVA 虚拟机提供了 JPDA 的实现。其开发工具作为调试客户端,可以方便的与虚拟机通讯,进行调试。Eclipse 正是利用 JPDA 调试 JAVA 应用,事实上,所有 JAVA 开发工具都是这样做的。SUN JDK 还带了一个比较简单的调试工具以及示例。
JVMDI 定义了虚拟机需要实现的本地接口
JDWP 定义了JVM与调试客户端之间的通讯协议
调试客户端和JVM 既可以在同一台机器上,也可以远程调试。JDK 会包含一个默认的实现 jdwp.dll,JVM 允许灵活的使用其他协议代替 JDWP。SUN JDK 有两种方式传输通讯协议:Socket 和共享内存(后者仅仅针对 Windows),一般我们都采用 Socket 方式。
你可以用下面的参数,以调试模式启动JVM
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Xrunjdwp JVM 加载 jdwp.dll transport=dt_socket 使用 Socket 传输 address 表示调试端口号 server=y 表示 JVM 作为服务器,建立 Socket suspend=n 表示启动过程中,JVM 不会挂起去等待调试客户端连接
JDI 则是一组JAVA接口
如果是一个 JAVA 的调试客户端,只要实现 JDI 接口,利用JDWP协议,与虚拟机通讯,就可以调用JVMDI了。
下图为 JPDA 的基本架构:
Components Debugger Interface / |-----------------------| / | VM | debuggee ----( |-----------------------| ------- JVMDI - Java VM Debug Interface
| back-end |
|-----------------------| / | comm channel -( | --------------- JDWP - Java Debug Wire Protocol
| |---------------------| | front-end | |---------------------| ------- JDI - Java Debug Interface | UI | |---------------------|
Eclipse作为一个基于 JAVA 的调试客户端,利用 org.eclipse.jdt.debug Plugin 提供了JDI 的具体实现。JDI 接口主要包含下面 4 个包
com.sun.jdi com.sun.jdi.connect com.sun.jdi.event com.sun.jdi.request
本文不对 JDI 进行深入阐述,这里重点介绍 JDI 中与断点相关的接口。
com.sun.jdi
主要是JVM(VirtualMachine) 线程(ThreadReference) 调用栈(StackFrame) 以及类型、实例的描述。利用这组接口,调试客户端可以用类似类反射的方式,得到所有类型的定义,动态调用 Class 的方法。
com.sun.jdi.event
封装了JVM 产生的事件, JVM 正是将这些事件通知给调试客户端的。例如 BreakpointEvent 就是 JVM 执行到断点的时候,发出的事件;ClassPrepareEvent就是 Class 被加载时发出的事件。
com.sun.jdi.request
封装了调试客户端可以向 JVM发起的请求。例如 BreakpointRequest 向 JVM 发起一个添加断点的请求;ClassPrepareRequest 向 JVM 注册一个类加载请求,JVM 在加载指定 Class 的时候,就会发出一个 ClassPrepareEvent 事件。
JSR-45规范
JSR-45(Debugging Support for Other Languages)为那些非 JAVA 语言写成,却需要编译成 JAVA 代码,运行在 JVM 中的程序,提供了一个进行调试的标准机制。也许字面的意思有点不好理解,什么算是非 JAVA 语言呢?其实 JSP 就是一个再好不过的例子,JSR-45 的样例就是一个 JSP。
JSP的调试一直依赖于具体应用服务器的实现,没有一个统一的模式,JSR-45 针对这种情况,提供了一个标准的模式。我们知道,JAVA 的调试中,主要根据行号作为标志,进行定位。但是 JSP 被编译为 JAVA 代码之后,JAVA 行号与 JSP 行号无法一一对应,怎样解决呢?
JSR-45 是这样规定的:JSP 被编译成 JAVA 代码时,同时生成一份 JSP 文件名和行号与 JAVA 行号之间的对应表(SMAP)。JVM 在接受到调试客户端请求后,可以根据这个对应表(SMAP),从 JSP 的行号转换到 JAVA 代码的行号;JVM 发出事件通知前, 也根据对应表(SMAP)进行转化,直接将 JSP 的文件名和行号通知调试客户端。
我们用 Tomcat 5.0 做个测试,有两个 JSP,Hello.jsp 和 greeting.jsp,前者 include 后者。Tomcat会将他们编译成 JAVA 代码(Hello_jsp.java),JAVA Class(Hello_jsp.class) 以及 JSP 文件名/行号和 JAVA 行号之间的对应表(SMAP)。
Hello.jsp:
1 2 3 4 5 6 7 8
greeting.jsp: 1 Hello There! 2 Goodbye on
***隐藏网址***
out.getBufferSize() != 0) 62 out.clearBuffer(); 63 if (pageContext != null) pageContext.handlePageException(t); 64 } 65 } finally { 66 if (_jspxFactory != null) _jspxFactory.releasePageContext ( pageContext); 67 } 68 } 69 }
Tomcat 又将这个 JAVA 代码编译为 Hello_jsp.class,他们位于: $Tomcat_install_path$workStandalonelocalhost\_ 目录下。但是 JSP 文件名/行号和 JAVA 行号的对应表(以下简称SMAP) 在哪里呢?答案是,它保存在 Class 中。如果用 UltraEdit 打开这个 Class 文件,就可以找到 SourceDebugExtension 属性,这个属性用来保存 SMAP。
JVM 规范定义了 ClassFile 中可以包含 SourceDebugExtension 属性,保存 SMAP:SourceDebugExtension_attribute { u2 attribute_name_index; u4 attribute_length; u1 debug_extension; }
我用 javassist 做了一个测试(javassist可是一个好东东,它可以动态改变Class的结构,JBOSS 的 AOP就利用了javassist,这里我们只使用它读取ClassFile的属性)public static void main(Stringfiles = {
"E:\Tomcat5_0_5\work\Catalina\localhost\_\org\apache\jsp\Hello_jsp.class", };
for(int k = 0; k
files.length; k++){
String file = files;
System.out.println("Class : " + file);
ClassFile classFile = new ClassFile(new DataInputStream(new FileInputStream(file)));
AttributeInfo attributeInfo = classFile.getAttribute("SourceDebugExtension");
System.out.println("attribute name :" + attributeInfo.getName() + "]");
bytebytes = attributeInfo.get();
String str = new String(bytes);
System.out.println(str); } }
这段代码显示了SourceDebugExtension 属性,你可以看到SMAP 的内容。编译JSP后,SMAP 就被写入 Class 中, 你也可以利用 javassist 修改 ClassFile 的属性。
下面就是 Hello_jsp.class 中保存的 SMAP 内容:SMAP E:Tomcat5_0_5workCatalinalocalhost\_orgapachejspHello_jsp.java JSP *S JSP *F + 0 Hello.jsp /Hello.jsp + 1 greeting.jsp /greeting.jsp *L 1:45 2:46 3:47 3:48 4:49 5:50 1#1:51 1:52 2:53 7#0:56 8:57 *E
首先注明JAVA代码的名称:Hello_jsp.java,然后是 stratum 名称: JSP。随后是两个JSP文件的名称 :Hello.jsp、greeting.jsp。两个JSP文件共10行,产生的Hello_jsp共69行代码。最后也是最重要的内容就是源文件文件名/行号和目标文件行号的对应关系(*L 与 *E之间的部分)
在规范定义了这样的格式:
源文件行号 # 源文件代号,重复次数 : 目标文件开始行号,目标文件行号每次增加的数量 (InputStartLine # LineFileID , RepeatCount : OutputStartLine , OutputLineIncrement)
源文件行号(InputStartLine) 目标文件开始行号(OutputStartLine) 是必须的。下面是对这个SMAP具体的说明:1:45 2:46 3:47 3:48 4:49 5:50(没有源文件代号,默认为Hello.jsp)
本文通过开发一个JSP 器插件的示例,介绍了 Eclipse 中设置 JSP 断点的方法,以及如何远程调试 JSP。作为基础知识,本文的前两部分描述了 JAVA Debug 和 JSR-45 的基本原理。
环境要求: 本文的代码是在 Eclipse3.0.0,JDK1.4.2 和 Tomcat5.0.5 上测试过的。
JAVA 调试框架(JPDA)简介
JPDA 是一个多层的调试框架,包括 JVMDI、JDWP、JDI 三个层次。JAVA 虚拟机提供了 JPDA 的实现。其开发工具作为调试客户端,可以方便的与虚拟机通讯,进行调试。Eclipse 正是利用 JPDA 调试 JAVA 应用,事实上,所有 JAVA 开发工具都是这样做的。SUN JDK 还带了一个比较简单的调试工具以及示例。JVMDI 定义了虚拟机需要实现的本地接口 JDWP 定义了JVM与调试客户端之间的通讯协议 调试客户端和JVM 既可以在同一台机器上,也可以远程调试。JDK 会包含一个默认的实现 jdwp.dll,JVM 允许灵活的使用其他协议代替 JDWP。SUN JDK 有两种方式传输通讯协议:Socket 和共享内存(后者仅仅针对 Windows),一般我们都采用 Socket 方式。你可以用下面的参数,以调试模式启动JVM-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Xrunjdwp JVM 加载 jdwp.dll transport=dt_socket 使用 Socket 传输 address 表示调试端口号 server=y 表示 JVM 作为服务器,建立 Socket suspend=n 表示启动过程中,JVM 不会挂起去等待调试客户端连接JDI 则是一组JAVA接口 如果是一个 JAVA 的调试客户端,只要实现 JDI 接口,利用JDWP协议,与虚拟机通讯,就可以调用JVMDI了。
下图为 JPDA 的基本架构:Components Debugger Interface / |-----------------------| / | VM | debuggee ----( |-----------------------| ------- JVMDI - Java VM Debug Interface
| back-end |
|-----------------------| / | comm channel -( | --------------- JDWP - Java Debug Wire Protocol
| |---------------------| | front-end | |---------------------| ------- JDI - Java Debug Interface | UI | |---------------------|
Eclipse作为一个基于 JAVA 的调试客户端,利用 org.eclipse.jdt.debug Plugin 提供了JDI 的具体实现。JDI 接口主要包含下面 4 个包com.sun.jdi com.sun.jdi.connect com.sun.jdi.event com.sun.jdi.request
本文不对 JDI 进行深入阐述,这里重点介绍 JDI 中与断点相关的接口。com.sun.jdi 主要是JVM(VirtualMachine) 线程(ThreadReference) 调用栈(StackFrame) 以及类型、实例的描述。利用这组接口,调试客户端可以用类似类反射的方式,得到所有类型的定义,动态调用 Class 的方法。 com.sun.jdi.event 封装了JVM 产生的事件, JVM 正是将这些事件通知给调试客户端的。例如 BreakpointEvent 就是 JVM 执行到断点的时候,发出的事件;ClassPrepareEvent就是 Class 被加载时发出的事件。 com.sun.jdi.request 封装了调试客户端可以向 JVM发起的请求。例如 BreakpointRequest 向 JVM 发起一个添加断点的请求;ClassPrepareRequest 向 JVM 注册一个类加载请求,JVM 在加载指定 Class 的时候,就会发出一个 ClassPrepareEvent 事件。
JSR-45规范
JSR-45(Debugging Support for Other Languages)为那些非 JAVA 语言写成,却需要编译成 JAVA 代码,运行在 JVM 中的程序,提供了一个进行调试的标准机制。也许字面的意思有点不好理解,什么算是非 JAVA 语言呢?其实 JSP 就是一个再好不过的例子,JSR-45 的样例就是一个 JSP。
JSP的调试一直依赖于具体应用服务器的实现,没有一个统一的模式,JSR-45 针对这种情况,提供了一个标准的模式。我们知道,JAVA 的调试中,主要根据行号作为标志,进行定位。但是 JSP 被编译为 JAVA 代码之后,JAVA 行号与 JSP 行号无法一一对应,怎样解决呢?
JSR-45 是这样规定的:JSP 被编译成 JAVA 代码时,同时生成一份 JSP 文件名和行号与 JAVA 行号之间的对应表(SMAP)。JVM 在接受到调试客户端请求后,可以根据这个对应表(SMAP),从 JSP 的行号转换到 JAVA 代码的行号;JVM 发出事件通知前, 也根据对应表(SMAP)进行转化,直接将 JSP 的文件名和行号通知调试客户端。
我们用 Tomcat 5.0 做个测试,有两个 JSP,Hello.jsp 和 greeting.jsp,前者 include 后者。Tomcat会将他们编译成 JAVA 代码(Hello_jsp.java),JAVA Class(Hello_jsp.class) 以及 JSP 文件名/行号和 JAVA 行号之间的对应表(SMAP)。
Hello.jsp: 1 2 3 4 5 6 7 8
greeting.jsp: 1 Hello There! 2 Goodbye on
***隐藏网址***
eclipse中安装svn插件怎么使用
eclipse中安装svn插件可以分支的合并,还原到历史版本,解决冲突,检出源代码等等,下面以还原历史版本为例。
操作步骤:
右键项目-》team-》显示资源历史记录。
若要还原到修订版5,同时选中修订版8和5右键,点OK。
eclipse alibaba代码规范插件怎么使用
在开发中,好的编程风格可以提升团队合作能力,提升开发的效率,但是每个人都有自己的编程习惯,如何能够将大家的编程风格统一,这个在团队中也很重要;
在Java编程中,阿里出版过一套关于Java的开发规范手册,我们可以在开发中按照这一套手册来进行开发,但是手册的内容比较多,因此阿里也专门提供了一套编码规范的插件,可以将插件安装到我们的开发环境中提升开发效率。
IDEA中阿里编码规范的安装:
1. 进入File-》Setting
2.选择Plugins选项
3.在Plugins页面选择Marketplace选项,然后输入ali,会将ali相关的插件列出来
选择Alibaba Java Coding Guidelins进行安装,安装完成之后,需要重新启动IDEA,插件才可以生效。
之后的开发中,如果我们的编码有不规范的地方,IDEA就会有相应的提示。
或者我们可以在页面中右击鼠标右键,在弹出的列表中选择编码规约扫描,就可以将扫描结果列出来。
扫描之后结果会在下方列出来,比如未增加创建者信息,不允许任何魔法值等,并会详细定位到代码位置,而且也会详细介绍原因并且给出正确的代码示例。
由于阿里是我们国内的企业,因此阿里规范插件给我们提示的时候,也会按照中文的方式给我们提示,对于英语不好的人来说,方便了很多。
使用阿里规范的时候,也可以和Git进行组合一起操作,就是当我们选择提交代码的时候,可以将检查规范的选项勾选,这样在提交的时候,如果有不规范的代码,IDEA就会提示我们是否确认要提交。
无法查找到插件解决办法:
有时候我们在搜索插件的时候,由于网络原因,经常性的搜索不到插件,这时候我们就需要离线进行安装插件;
首先我们需要先到IDEA官网查找我们需要的插件信息:
输入我们想要安装的插件信息进行搜索,查找到之后选择进入插件详情页面
在详情页中我们可以选择不同版本的插件进行下载,将插件下载好之后我们就可以在我们IDEA中离线进行安装插件了;
离线安装插件的过程是在插件页面选择installed旁边的按钮,选择Install Plugin From Disk;之后在自己电脑上选择刚才下载的插件,就可以离线进行安装了,安装好之后同样需要重新启动IDEA插件才可以生效。
除了阿里代码规范之外,我们也可以选择其他的代码规范插件,比如SonarLint,其实开发中不论是用哪种插件,都是为了让我们养成好的编程风格,因此,在编程中,我们要养成良好的编程风格,不搞特殊,这样才能提升开发的效率。
以上就是关于代码规范插件怎么使用的讲解,更多关于java编程方面的问题可以看下这个视频教程:网页链接,希望我的回答能帮到你。
如何在Eclipse中安装和使用微软的TFS插件
1.将 Eclipse 所指定的 workspace 和 source code 先放到 「对应好的路径中」 2.然後再选择 Share Project … 3.这里会有目前 Eclipse 安装的版本管控外挂套件,请选择 Team foundation Server 4.确认「本机」的路径後就可以按下完成啦
eclipse插件怎么用
你好:插件一般有几种方式:
第一种方法:.直接解压下载的插件到和eclipse目录对应的plugins和features目录底下,重启eclipse就可以用了,例如fat的插件就可以直接放到plugins下,启动eclpise就可以用
第二种方法: 解压到任意目录下,然后在eclipse目录下建一个名叫links的文件夹,在里面建一个以.link结尾的文件(用来标示该插件),然后用记事本打开这个文件在里面写上path=你解压的插件的目录(比如说把插件解压到了D:\abc\里面,那么插件的目录应该是这样子的d:\abc\eclipse\plugins和d:\abc\eclipse\features,在写入文件时这样写path=d:\\abc,注意:1.路径里的’\’都要写成’\\’,2.写入路径时,写到插件eclipse文件夹的上一层就行了),保存之后,重启eclipse就行了.(推荐用这种方法,卸的时候直接删就行了)
第三种方法:1.help--Install new software..
2.点add,如果是从网上直接安装就填写插件名称(自己定义)和插件网址,如果是本地的压缩包(.zip)或者jar文件,就点Archive..,选择压缩文件,如果是本地文件夹,就点local..,选择文件夹.
3.然后等他显示出插件的详细信息之后,如果不想让他检查更新(通常大的插件很费时间)就把左下角的....update....的那一项的勾去掉,如果需要检查更新的话直接点next》然后如果需要接受协议就点同意,一直下一步到完成,重启eclipse就行了.
如何在eclipse中安装FindBugs插件(使用links方法)
1.点击“Help-》InstallNew
Software”,如下图:
***隐藏网址***
3.选择对应插件,然后点击“next-》next-》finish”。
4.完成安装之后重启eclipse,右击项目文件或目录,会发现多了Findbugs的菜单,如下图:
有关如何使用eclipse 进行插件安装
Eclipse插件的安装方法
1、在eclipse的主目录(ECLIPSE_HOME, 比如在我的机器上安装的目录是:D:\eclipse)有一个plugins的目录,这种方法的插件安装非常简单,只要将插件copy到这个目录下就可以 了。比如我有一个weblogic的插件(bea站点上可以下载),解压缩之后得到得到一个目录: 【com.bea.eclipse.weblogic_1.1.1】,我就将这个目录直接放到%ECLIPSE_HOME%\plugins目录下,重新 启动eclipse之后就看到Run-》“Start Weblogic”的菜单。安装之后,weblogic插件的全路径 为:D:\eclipse\plugins\com.bea.eclipse.weblogic_1.1.1]
2、在eclipse目录 (ECLIPSE_HOME)下创建一个links目录,然后将你自己的插件放在你想放的任何地方,这个时候你放插件的目录我称她为插件目录 (PLUGIN_HOME),然后在你的%ECLIPSE_HOME%\links\目录下创建一个link文件,比如我要安装一个vss插件,我就在我 的links目录下创建了:VSS_1.6.1.link文件。而这个VSS_1.6.1.link文件则是指向的我的插件目录 (PLUGIN_HOME,比如在我的机器上插件目录为D:\eclipse\plugins_new)。VSS_1.6.1.link文件的内容是:
path=D:\\JavaDev\\plugins\\vssplugin_1.6.1
第 二种安装插件的时候需要注意,如果你是一个单独的jar文件,则最好在link文件指定的目录下创建这样级别的目录:eclipse\plugins \xxx.xxx(插件名称和版本号),然后将jar文件放在这个目录下即可。比如vss插件在我的机器上的目录是D:\eclipse \plugins_new\vssplugin_1.6.1\eclipse\plugins\org.vssplugin_1.6.1,下有一个文 件:vssplugin.jar
两种方法的插件安装之后需要重新启动eclipse才能看到插件。如果某一个插件已经安装了想要重新安 装,只要将文件替换或者修改link文件的路径即可。如果发现认不到插件,可能是你的插件不支持你的当前eclipse版本,请检查。也有可能是系统配置 引起的,我出现过一次,我的解决方法是将ECLIPSE_HOME下的configuration目录下的所有文件删除,剩下config.ini文件。

更多文章:
jquery动态添加表格行(如何通过jquery动态给表格添加一行)
2026年10月23日 00:30
cmake命令行参数(CMake (三)cmake 在工程中的用法)
2026年10月23日 00:00
linux数据备份命令(Linux系统下常用的数据备份方法有哪些)
2026年10月22日 23:20
executequery返回值(ExecuteQuery(sql)的返回值)
2026年10月22日 23:00
舍曲林吃了一周越来越严重(我母亲77岁,服用舍曲林一周,开始半片,4天后改为1片,第三天开始失眠,第四天出现乏力、食欲下降,)
2026年10月22日 21:00




