Synopsis
I am attempting to export a WAR to my webapps folder but everytiime I update the war it deletes all of the content of the webapp minus /WEB-INF/lib/struts.jar
System info
- Windows 2K3
- Tomcat 5.5
- JRE 1.6.23
Ok here is what is happening:
- Export project as .WAR via Eclipse (Helios) to /webapps directory
- Tomcat sees the change in the war and attempts to rebuild webapp
- Tomcat deletes contents of webapp folder (/webapps/public)
- (/webapps/public/WEB-INF/lib/struts.jar) is locked preventing it from being deleted.
- Tomcat gives up rebuild leaving me wi开发者_如何学Pythonth nothing in the folder besides the struts.jar causing the application to break.
Question(s)
- Is there a way to keep the jar from being locked?
- (OR) a better deployment process I should be using (and can pick up quickly)?
Using antiResourceLocking="true"
and antiJARLocking="true"
on the <Context>
element did not solve the problem. Appreciate any help.
Does adding unloadDelay
to your Context help?
Which is the:
Amount of ms that the container will wait for servlets to unload. If not specified, the default value of the flag is 2000 ms.
Source: http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
Apparently sometimes the web app is in the middle of a large GC / the ClassLoader hasn’t been garbage collected and cannot release in time. Try experimenting with the timeout to see if that helps.
There is also some anecdotal evidence of strange file locking on Windows platforms.
Also, assuming you're referring to a development (not production) build environment, look at one of my questions, showing my approach to Tomcat / Eclipse hot deploy environments:
Tomcat and Eclipse Zero Turnaround Deployment
Update
This helpful thread comes up on a Google search of the same issue and is referred to by a number of others:
http://blog.exis.com/colin/?s=I+Put+A+Spell+On+You
I guess your requirement is to deploy and rebuild quickly given eclipse is ur IDE. As you have figured out exporting war file to webapps folder is not the best option. Few other options are
a) Use sysdeo tomcat plugin -- sysdeo deploys the project folder
b) Update build script to deploy in exploded format. -- deploy the \build folder as exploded application
First option is easiest. Second option is cleaner.
[OFF TOPIC] consider switching to tomcat 7
Could this thread be of relevance? Cites the DTD in the tiles-config.xml causing issues.
This is probably not the optimal solution but I have had similar issues with Tomcat 6 before now. At the time I was using Ant, so I wrote an Ant script which would deploy to Tomcat locally and in the process it would stop / start Tomcat where necessary (Tomcat was deployed as a service so I could use NET STOP / NET START commands). This included deleting the old expanded WAR folder.
I think there probably are better options, but this worked for me.
精彩评论