用于检测使用的功能是;“危险的”;跨不同的Java实现或操作系统使用?

用于检测使用的功能是;“危险的”;跨不同的Java实现或操作系统使用?,java,jvm,integration-testing,Java,Jvm,Integration Testing,我负责许多java应用程序服务器,它们托管来自不同团队的不同开发人员的应用程序 一个常见的问题是,发送的某些应用程序无法按预期工作,结果证明该应用程序是在其他平台上开发的,即winXp或7上的openJDK,然后部署到运行Oracle JDK的Linux上,反之亦然 能够提前执行一些东西会很好,但这实际上是不可能的 因此,是否有任何技术可以在部署时通过扫描类文件来检测问题 如果这是不可能的,我可以使用什么工具发送给开发人员,以便他们可以从源代码中识别他们所依赖的不兼容内容?不可能以完全自动化的方

我负责许多java应用程序服务器,它们托管来自不同团队的不同开发人员的应用程序

一个常见的问题是,发送的某些应用程序无法按预期工作,结果证明该应用程序是在其他平台上开发的,即winXp或7上的openJDK,然后部署到运行Oracle JDK的Linux上,反之亦然

能够提前执行一些东西会很好,但这实际上是不可能的

因此,是否有任何技术可以在部署时通过扫描类文件来检测问题


如果这是不可能的,我可以使用什么工具发送给开发人员,以便他们可以从源代码中识别他们所依赖的不兼容内容?

不可能以完全自动化的方式检测所有此类问题。例如,检测硬编码路径名非常困难,这可能是跨平台部署的最大问题

我的建议是在部署时通过更多的自动化测试来弥补这一点

例如,在一个类似的环境中,我曾经坚持部署测试套件:通常实现为一个安全的网页,我可以作为管理员导航到该网页,在部署的应用程序上运行一套测试并显示所有结果

如果有什么失败,那就是立即回滚

有些测试与开发中使用的测试相同,但有些不同(例如,检查部署到的环境的预期配置)


显然,这意味着您必须将至少一些测试代码捆绑到生产应用程序中,但我认为这是非常值得的。作为一名管理员,如果您刚刚在登台环境中看到一个大屏幕上满是绿色标记,那么您将更有信心将发布推向生产环境。

听起来您有一个问题,您的团队的编码指南应该更好地解决这个问题。除非您使用的是特定于平台的库(您不应该这样做,因为这就是发生的情况),否则您不会有这个问题。+1完全同意最好通过编码指南和单元测试来解决这个问题。当然,检测硬编码路径是相当容易的。当然比我最近遇到的一些jruby问题更重要,一些jruby库依赖于jruby中的win扩展(而不是底层java)。@Tom-你可以尝试扫描类文件中的所有字符串-但需要手动检查,因为文本中的前/后斜杠会导致误报。即使如此,这也不能涵盖所有内容,因为文件名通常是由代码构造的……对于特定的示例,findbugs可能会有所帮助。一般来说,最好进行持续集成,这样可以在多个配置上部署应用程序并执行一些测试。您可以在正则表达式中使用反斜杠,也可以在文件路径中使用反斜杠。在正则表达式中使用反斜杠是可以的,除非它被用来解析文件路径,在这种情况下它不是。这很难自动检测到。