第一个最简单的struts2工程,将xworks-core和struts-core的lib包替换成源码,然后需要的jar包有:
E:\simon\debug_workspace_0225\s2-src-study\WebContent\WEB-INF\lib>tree /f
卷 新加卷 的文件夹 PATH 列表
卷序列号为 DC32-D1F0
E:.
asm-3.0.jar
asm-commons-3.0.jar
commons-collections-3.2.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-lang-2.6.jar
commons-logging-1.0.4.jar
common_lang_IO4xworks.jar
freemarker-2.3.16.jar
javassist-3.7.ga.jar
junit-3.8.1.jar
ognl-3.0.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-core-2.5.6.jar
spring-web-2.5.6.jar
testng-5.1-jdk15.jar
velocity-1.6.3.jar
velocity-tools-1.3.jar
没有子文件夹
还有 servlet-api.jar jsp-api.jar
类似于这样的路径下 /home/tools/apache-tomcat-5.5.31/common/lib
注意点有:
1. asm的包需要去asm的官网下,struts2的all包中没有,app中也没有。 javassist-3.7.ga.jar 在那个blank的app中就能找到。all包中也没有提供。
2. apache的common-lang需要2.4以上版本 , 否则StringUtils.startsWith(...)方法找不到,详见common-lang的文档。
3. xworks的包换成源码之后 ,会依赖部分common-lang 和common-io包的class文件,但其打包结构又不同于apache原有的包结构,多了了
一层xwork,所以不能直接引用。weimao提供的做法是:将需要的class文件按其现有包结构取出打成zip包,再改名成.jar包,放到lib目录下即可。
4. tomcat与eclipse集合后,eclipse采取的是虚拟部署,部署路径不是tomcat的webapp下,在类似的E:\simon \debug_workspace_0225\.metadata\.plugins\org.eclipse.wst.server.core \tmp0这个路径下
5. 要放置struts-2.0.dtd ,struts-2.1.7.dtd dtd文件在src目录下 ,否则会出现解析配置文件时,报错:struts.xml找不到,其实是dtd没有找到
6. default.properties (在struts-core的jar包中),和其他一道的properties文件也要复制到src目录下
====================================================================
点5 没有做 会报错 说struts.xml 文件找不到 其实你已经放了,只是没有放dtd文件。
我一开始被这个问题困扰了好久
点6 没有做 会发生以下异常,我也被困扰了好久
2011-3-5 22:48:58 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info信息: Parsing configuration file [struts.xml]2011-3-5 22:48:59 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn警告: Unable to load config class org.apache.struts2.interceptor.debugging.DebuggingInterceptor at interceptor - file:/root/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/struts2-src-study/WEB-INF/classes/struts-default.xml:131:115 probably due to a missing jar, which might be fine if you never plan to use the debugging interceptor2011-3-5 22:48:59 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error严重: Actual exceptionCaught Exception while registering Interceptor class org.apache.struts2.interceptor.debugging.DebuggingInterceptor - interceptor - file:/root/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/struts2-src-study/WEB-INF/classes/struts-default.xml:131:115at org.apache.struts2.impl.StrutsObjectFactory.buildInterceptor(StrutsObjectFactory.java:77)at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:70)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.lookupInterceptorReference(XmlConfigurationProvider.java:998)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStack(XmlConfigurationProvider.java:817)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStacks(XmlConfigurationProvider.java:830)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptors(XmlConfigurationProvider.java:853)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:460)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:275)at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)at c............
如何阅读开源代码
最近看到一篇文章 基本认可他的说法
http://jnn.iteye.com/blog/1316930
并且 同时要看单元测试代码 这点非常好
还有我以前在邮件列表中回复过的细节:
我的做法是:
用IDE,我用的Eclipse
在工程中,将需要读的代码替换掉其打包好的jar包
然后能让含有这个要读的代码的工程跑起来
然后边debug边读
当前前提是熟悉这个要读的代码大概有哪些模块,干什么用的
用Eclipse有几点:
上面半仙已经提到一个
“找不到实现类。。。不会用eclipse吗? ctrl+t 啊。。。。“
我再加几个
看某个类或者方法在这个工程中的引用或者调用 ctrl+shift+g
在工程中搜索某个关键字 ctrl+h
在debug时候有 ctrl+shift+i 查看某个变量 或者方法的运行结果,当圈复杂度很高的时候,这样可能不行,
当某个调用层次不清楚的时候,可以在debug的时候 在你不清除的地方加上Thread.currentThread().getStackTrace() ,然后选中刚加的这段代码, ctrl+shift+i,然后。。
我的做法当中还有一点是:
边阅读,边在代码中阅读感悟和打一些标识,用代码仓库管理这份阅读的代码,以后能清晰看到阅读的轨迹