Reputation: 5471
I am having issue with the way tomcat deploys my files to the server.
I have installed Tomcat 7 to /opt/tomcat7
.
In my eclipse i have specified this path as my tomcat server.
my workspace directory is /home/maciej/workspace/<projects here>
now if I edit a class file and i add simply log statement
log.info("blabla");
and then deploy 'NEW' version of the file via - run on server, i do not see this 'blabla'
in my output. It seems like although i have modified the class file, it was not properly deployed into tomcat. Tomcat is reading god knows what but certainly not the file it should read.
EDIT: I have recofnigured my tomcat in eclipse and now:
Server Path = /opt/tomcat7
Deploy Path = /opt/tomcat7/webapps <- used to be .metadata/blablabla default
eclipse tomcat location
When I open 'Open Lunch Configuration' under arguments/working directory the default option is ticket with greyed out path /home/maciej/Desktop
Should this also be changed?
Isn't tomcat working directory /opt/tomcat7/work
?
Any suggestions / ideas? As this issue is slightly getting on my nerves as i can not develop the app.
Upvotes: 7
Views: 1264
Reputation: 3567
The Server Path
is the same as the Tomcat installation directory
in the modal you see in Window
> Preferences
> Server
> Runtime Environments
after hitting Edit
. That should be set to /opt/tomcat7
or wherever the root of your Tomcat installation lives.
The Deploy Path
is relative to the Server Path
. It should be webapps
, unless you already have stuff there and you want a separate directory. You will not be able to edit this until you shut down Tomcat and remove all webapps underneath it through the Servers
view.
Try unchecking Modules auto reload by default
if you trust the JDK hot-swapping, which you should if you're using JDK 1.7 or 1.8 and just want to see a log statement inserted.
The working directory you mentioned is just the root directory that Tomcat uses to spit out thread dumps on crashes and the like. It has nothing to do with the Tomcat "work" directory.
Upvotes: 1
Reputation: 3121
If you change something in the project then Eclipse will build automatically and "deploy" the files to the location you have specified. By default, Eclipe's work stops there and the rest is up to tomcat.
Tomcat, like any Java web server, detects changes in JSPs and recompiles them. Nevertheless, changes in classes have no effect because of the way Java class loading works. For the new version of a class to be used by tomcat you need to:
The easiest way to reload an application, by default, is to make a change to web.xml
. If you look into tomcat's configuration conf/context.xml
you can see that WEB-INF/web.xml
is monitored. Any change will trigger a reload of the context. So you can either make an artificial change in the file or add a resource like WEB-INF/version.properties
and generate a different version.properties
with any build.
In any case, reloading a complex application takes time. That is why there are plugins like JRebel. But before you go down that path (which adds another moving piece to your setup) you can also try to use Eclipe's support for hot code replacement. You start tomcat in debug, connect to it with Eclipse, and then change some class. Eclipse will try to recompile the class and upload the new definition to tomcat. If it fails it will tell you. As a general rule it will fail when you change the structure of the program and succeed when you just change method's implementations.
Upvotes: 0
Reputation: 7540
Open server view: Window->Show view->Other->Servers. The select correct server, right click, select "Clean" and then restart tomcat. It should help.
Upvotes: 0