Java 用于管理具有许多框架且没有文档的复杂项目设置的工具

Java 用于管理具有许多框架且没有文档的复杂项目设置的工具,java,spring,Java,Spring,我们必须扩展一个巨大的java项目,利用maven、spring、struts、freemarker和闭包模板等框架 我们可以访问源代码,但几乎没有任何文档,我们必须扩展这个系统。我们唯一的解决方案是在现有代码中找到一个地方,在那里已经做了类似的事情。为了找到这个位置,我们尝试从调用的操作开始,然后在调试器的帮助下尝试找出涉及哪些类和Springbean 调试器的堆栈跟踪很难理解,因为使用了大量反射 是否有人有类似的设置,并能提供一些技巧来管理如此复杂的设置?为您的应用程序使用Eclipse I

我们必须扩展一个巨大的java项目,利用maven、spring、struts、freemarker和闭包模板等框架

我们可以访问源代码,但几乎没有任何文档,我们必须扩展这个系统。我们唯一的解决方案是在现有代码中找到一个地方,在那里已经做了类似的事情。为了找到这个位置,我们尝试从调用的操作开始,然后在调试器的帮助下尝试找出涉及哪些类和Springbean

调试器的堆栈跟踪很难理解,因为使用了大量反射


是否有人有类似的设置,并能提供一些技巧来管理如此复杂的设置?

为您的应用程序使用Eclipse IDE。它支持spring、struts和许多j2ee应用程序框架。我喜欢它的调试器,并且很容易理解它的堆栈跟踪。 通常,Eclipse中的调试器配置为在引发异常的位置对所有未捕获的异常暂停执行。该异常可能稍后在堆栈框架的较低位置处理,并且可能不会导致线程终止。这将是观察到的行为的原因。
配置Eclipse的行为非常简单-在“首选项”对话框中,树层次结构中Java下的“调试”窗格中有一个名为“**在未捕获异常时暂停执行”的选项,可以取消选中该选项。

从未遇到过这种特定情况,但如果我是你,我会使用AspectJ尝试一些AOP,以便包装应用程序的每个调用,收集这些实时数据并进行分析,以查看操作发生的位置。您可以围绕这些数据构建一些漂亮的热图或其他可视化效果。

是的,我有一个类似的设置,我使用过,因为在我的例子中,代码也有缺陷,无法理解。;-)


这工作真的很难。我只能给你们一个提示:构建回归测试

我认为尽管手头的任务看起来很难,但几乎没有什么工具可以帮助你们

  • 我会使用JavaEEIDE,有很多选项,我推荐eclipse
  • 我从struts配置(struts config.xml)开始,我认为这应该对您有所帮助,使用插件打开struts配置,您将可以很好地查看应用程序流
  • 安装spring有助于进行spring上下文编辑
  • 您需要了解spring容器是如何实例化的,因为它在web.xml中是一个web应用程序,如果我不得不猜测的话,那么您应该找到它的配置,或者可能是
  • 因为你在你的帖子里没有提到任何事情,我不确定这封信是不是有问题
  • 如果它们不受spring的管理,那么它们可能会使用
  • 如果没有测试,我将编写一个测试,至少可以隔离地加载spring容器。如果您使用Junit和spring测试,那么它很简单,请在这里查找

  • 如果您可以使用struts插件获得应用程序流,那么您就可以绘制出各种流,这些流应该对您的视图有很大帮助(freemaker)

  • 由于您没有对maven所关心的更改进行量化,因此更改应该是最小的,更像是添加新的依赖项等,您可以为maven使用此插件


不会发布正式的答案,但实际上,您唯一的选择就是太了解代码库了。我建议您使用一些评测和代码覆盖工具来帮助您分析系统流(例如FishEye、ArgoUML/ObjectAid往返、JProfiler)。这对于堆栈溢出来说有点过于宽泛,对于我们的姐妹站点programmers.stackexchange.com来说也有点过于宽泛。如果你能就这个问题提出一个更直接、更集中的问题,这将是一个完美的主题。非常感谢你的回答。我们正在与Intellij合作,认为它是一个很棒的工具,但我们将更仔细地了解您提到的Struts编辑器/建模器以及SpringIDE。也许这些工具会帮助我们完成这项艰巨的任务。
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations={"classpath:spring-context.xml"})
 public class CTSWebServiceTest 
 {
      //if annotations are being used
        @Autowired
    ApplicationContext ctx;
 }