我在战争档案中有一个webapp,它部署在cloudfoundry上。
应用程序使用的其中一个库(“somelib.jar
”)由另一个开发人员制作。
我希望他能够上传几个不同版本的somelib.jar
并测试应用的行为。
我设法将jar上传到部署的WEB-INF/lib
目录。我还设法将jar解压缩到WEB-INF/classes
。但是,我还没有设法使用新版本的jar。我尝试了this question和this question中描述的各种黑客,但没有任何运气。
每次,第一次加载的类/ jar都会在之后使用,即使我们替换了上述目录中的实际.class
或.jar
文件。
有没有简单的方法来实现我想要的?
注意:由于我无法控制Tomcat(运行的地方),因此我无法配置Tomcat或对服务器进行任何更改。我只能控制我的war文件,所以一切都需要以编程方式完成。
编辑:我想要的原因是减少我们的测试时间。目前有人给了我一个新版本的somelib.jar
,我将它重新打包到我的应用程序中,上传到CF,给他发送通知,然后他测试新jar的行为。我更喜欢的是他将他的罐子直接上传到CF并在他有新版本时进行测试而没有不必要的中间延迟。
答案 0 :(得分:2)
在tomcat 7中,您可以对WAR文件进行版本控制,新版本将逐步启动。
http://www.tomcatexpert.com/blog/2011/05/31/parallel-deployment-tomcat-7
答案 1 :(得分:2)
每次,第一次加载的类/ jar都会在之后使用,即使我们替换上面目录中的实际.class或.jar文件
这就是普通Tomcat(Java EE)classloading的工作方式。首次部署时会加载您的类,并且将忽略任何更改(JSP的管理方式略有不同,但仅限于开发环境中)。
您应该可以使用Equinox OSGi bridge servlet解决此问题。我自己并没有这样做,但here's是一个我尊敬的人写的。
答案 2 :(得分:2)
为了让您自己控制应用程序服务器,您需要将独立应用程序部署到Cloud Foundry中。
此博客可以帮助您解决这个问题:
http://blog.cloudfoundry.com/2012/05/11/running-standalone-web-applications-on-cloud-foundry/
这样您就可以自定义配置您的tomcat。