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

Yis*_*hai 7 java jboss jsp recompile

我在质量保证的JBoss 4.2上遇到了这种令人讨厌的行为,我想在我们投入生产之前将其扼杀在萌芽状态并找到其他一些极端情况.

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

 public void methodName(String arg)
Run Code Online (Sandbox Code Playgroud)

这被改为:

 public void methodName(String arg, Object... args)
Run Code Online (Sandbox Code Playgroud)

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

 methodName("param");
Run Code Online (Sandbox Code Playgroud)

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

JBoss上有设置强制重启时重新编译JSP吗?

编辑:为了澄清答案中的一些要点,设置是JSP是战争的一部分,这是一个耳朵的一部分.耳朵里有所有类,在一个罐子里.

关于预编译的愿望,如果系统不认为jsp需要编译,会预编译强制重新编译吗?它似乎并非如此.这里的错误不是一个compliation错误,它是一个方法调用错误,因为"更改"(在字节代码级别,而不是真正在代码级别)方法签名.

附录:请注意,我们最近在生产中遇到过,即使已经接受了答案的标志设置,JSP也没有重新编译,即使JSP确实发生了变化.那里的主要错误,但无论如何,JBoss正常关闭.此时它将成为JBoss的旧版本,但如果您仍在使用它,则删除工作内容和tmp目录是唯一可靠的方法.

我并没有改变接受的答案,因为它确实达到了问题的目的.JBoss错误是一个单独的问题.

Ber*_*t F 11

如果JSP是WAR的一部分,而WAR是部署为jar的EAR的一部分,那么我不清楚为什么你的JSP没有被重新编译.war文件中的JSP是否比上次部署的JBoss编译的类文件具有更新的时间戳?如果没有,在部署之前,无法触摸JSP作为构建WAR/EAR的一部分.[我指的是使用Unix"touch"命令,而不是手动触摸每个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.

  • +1谢谢!请注意,在JBoss 5.1.0GA中,等效文件是$ JBOSS/server/default/deplyers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml (5认同)