Thanks to my colleague who find out how to do a hot deploy under using these tools combination - MyEclipse, Maven and Tomcat. It is a problem which last long for a certain period of time.
In his solution, what he does is basically
1. create a Java Build Path Library which point to local maven repository
2. change the project web root directory to maven build structure, which is "/src/main/webapp", in .mymetadata file.
3. use maven-eclipse-plugin in your pom.xml
So next time you run "mvn eclipse:eclipse", you should be able to locate all classes from your local maven repository. And after that, whenever you press "save" in eclipse, it will automatically deploy all the classes to your tomcat webapps folder.
In here, I will give a bit more amendment.
Since the hot deploy will copy all needed jar file from your local repository to Tomcat webapps folder, sometimes you don't want some classes to be deployed to the Tomcat, for example, servlet-api.jar. It is because it is provided by Tomcat already. You don't want any conflict between your application and Tomcat. Please note that deployment in MyEclipse will copy every jar from maven local repository even if you specify "provided" in the dependency scope from your pom.xml.
Luckily, Tomcat is clever enough on not to use your servlet-api.jar. Instead, it will use it's own. However, if you are using servlet 2.4 and jsp 2.0, since you need to provide jsp-api.jar file. Tomcat will not be able to determine not to use it. Therefore, a conflict will happen, the error usually will happen like this if you are using JSTL:
org.apache.jasper.JasperException: Unable to read TLD "META-INF/c.tld".
In this case, the current solution that I have is to delete the jsp-api.jar file from your application deployed folder manually, which is in /webapps/{your app}/WEB-INF/lib
Then the problem will be solved. However, as you can see, the trouble is whenever you redeploy using the hot deploy solution above. You will need to delete the necessary file manually.
-----------------------------------------------------
-----------------------------------------------------
Further amendment:
As I mentioned above, Tomcat is NOT clever enough to skip the jsp-api.jar deployment. However, for my further investigation, I found that this symptom only happened in Tomcat 5.5.12 and 5.5.17. (I assume it happens in between these version as well). So if you are using the most updated Tomcat version, which I have updated to 5.5.23, it will work perfectly fine.
Happy programming!!!
Thanks. Your post helps me a lot.
ReplyDeleteMy problem was because jsp-api.jar and servlet.jar were added by maven provided dependencies and this kind of dependencies are not well managed when you try to run with a Tomcat configured in Eclipse, because all the dependencies are added to the web-inf/lib, also the provided ones.