gpt4 book ai didi

java - 如何在 JBoss 4.2 中强制重新编译 jsps?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:14 24 4
gpt4 key购买 nike

我在 QA 中发现了 JBoss 4.2 上的这种令人讨厌的行为,我想在我们投入生产之前将其消灭在萌芽状态并找到其他一些极端情况。

jsp 调用具有以下签名的方法:

 public void methodName(String arg)

这已更改为:

 public void methodName(String arg, Object... args)

预先存在的 JSP 通过以下方式调用此方法:

 methodName("param");

在部署修改后的代码时,JBoss 没有重新编译 JSP,这导致 QA 崩溃。向 jsp 添加愚蠢的注释解决了问题(JBoss 认识到 JSP 已更改并重新编译它)。

JBoss 上是否有强制重新编译 JSP 的设置?

编辑:为了澄清答案中的一些要点,设置是 JSP 是 war 的一部分, war 是耳朵的一部分。耳朵里有所有的类,在一个 jar 里。

关于预编译的愿望,如果系统认为jsp不需要编译,预编译会强制重新编译吗?好像不是。这里的错误不是编译错误,而是方法调用错误,因为“改变了”(在字节码级别,而不是真正在代码级别)方法签名。

附录:请注意,我们最近在生产中遇到过,即使设置了已接受答案的标志,JSP 也不会重新编译,即使 JSP 实际上发生了变化。那里有主要错误,但无论如何,JBoss 正常关闭。此时它已经是老版本的JBoss了,但是如果你还在使用它,删除work和tmp目录的内容是唯一可以确定的方法。

我不会仅仅因为它确实达到了问题的目的而更改已接受的答案。 JBoss 错误是一个单独的问题。

最佳答案

如果 JSP 是作为 jar 部署的 EAR 的一部分的 WAR 的一部分,那么我不清楚为什么您的 JSP 没有被重新编译。 war 文件中的 JSP 是否比上次部署的 JBoss 编译类文件具有更新的时间戳?如果没有,您能否在部署之前将 JSP 作为构建 WAR/EAR 的一部分。 [我指的是使用 Unix“触摸”命令,而不是手动触摸每个 JSP 文件。]

或者,$JBOSS/server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml 中的 DeleteWorkDirOnContextDestroy 设置可能是您正在寻找的。默认情况下为 false,但将其设置为 true 可能是您需要的。我认为这应该在重新部署时删除 JSP 的类文件,以便在首次访问每个 JSP 时重新创建它们。

参见 https://jira.jboss.org/jira/browse/JBAS-3358了解更多信息。

关于java - 如何在 JBoss 4.2 中强制重新编译 jsps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/952309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com