怀旧运行旧JAR文件代码

时间:2011-01-05 19:32:27

标签: java deployment jar mirth

这真让我疯狂。无论我做什么,似乎Mirth(1.8.2)正在运行我的JAR文件的旧版本;我知道因为各种迹象,如:

  • 我无法调用任何函数
  • 记录的信息未显示在日志中
  • 日志文件中未更改更改的日志消息
  • 以前在代码中创建和写入但不再被代码触及的文件仍在创建和编写

我已经尝试了一切我能想到的工作。它在某一点工作,但现在好像它不再被更新了。我将我的变化整合到Mirth中的过程是:

  • 运行ant脚本以构建JAR文件
  • 将JAR文件复制到\ lib \ custom
  • 重启Mirth服务(通过Mirth管理员)

我尝试重启(通过服务,Java,计算机提供服务) - 无济于事。我知道我的JAR文件是正确的,因为我已经反编译它(以确保它具有最新的代码)并对其进行哈希处理(与蚂蚁构建的JAR的哈希进行比较) - 它是正确的并且代码在那里;它只是没有被运行。

我快结束了;这种情况很少发生,但完全阻碍了我的发展。

编辑:我也知道我的代码是正确的,因为当我运行单元测试时,它会生成正确的文件并调用正确的函数并记录正确的信息。只有欢乐似乎“没有得到它。”

我的课很简单;简单的单参数构造函数和一些返回各种数据的公共方法。没有什么复杂的,没有嵌套的类/ JAR /依赖。

编辑:我甚至删除了我的自定义JAR文件并重新启动了Mirth,它仍在运行我的代码。太棒了:/我为这个问题增加了一笔赏金。我怀疑JAR是在某个地方缓存的(即使他们在Mirth论坛上否认它)并且需要以某种方式清除缓存(尽管为什么重新启动Mirth服务并且我的PC没有做到这一点超出我的范围。)

我还杀死了所有Java实例(并重启了我的计算机),这样就不太可能让JVM在某处缓存JAR。

我尝试重新安装Mirth。出于某种原因,当我第一次启动管理员时,它有我的自定义渠道;并且令人愤怒的是,它仍在运行旧的JAR,即使我已经使用lib \ custom中的新JAR更新它。

2 个答案:

答案 0 :(得分:1)

我最终通过一系列行动来解决这个问题:

  • 卸载Mirth和Java,然后重新安装。
  • 我还删除了除一个(一个JDK和一个JRE)之外的所有Java安装。
  • 在你复制我的JAR时停止了欢笑。停止欢笑,复制并重启;不要尝试复制实时安装。它可能会也可能不会取出更新的JAR,具体取决于它是否已加载到JVM中。

这些步骤组合似乎有效。在此之前,我安装了3-4个JRE(以及两个JDK),当我正在运行时,我正在复制(根据Windows 7成功)JAR。它现在正在工作!

答案 1 :(得分:0)

Mirth是一个在普通旧JVM上运行的J2EE应用程序;你有调试它的选项。

您可以按照here说明通过Eclipse运行Mirth Connect。然后,您可以看到JVM类路径,您可以设置断点并使用调试器。

Mirth基于Mule ESB。 Mule有自己的类加载方式。你可以研究它。

如果Mirth真的使用旧版本的JAR,也许它的某个地方有一个缓存版本。或者您可能已经忘记了一些配置更改 - 也许您为jar添加了一个新目录。 (不知道你是怎么做的。)

Mule注意名为MULE_LIB的环境变量;也许那是相关的。

看起来Mirth Connect 1.8和Mirth Connect 2.0对于jar(lib / custom和custom-lib)分别有不同的位置。你使用的是哪个版本?