First of all, I would like to say that there is plenty of pages on StackOverflow and I tried all I found related, but I am doing something wrong.
I have IntelliJ server set up to:
- server Tomcat 8
- JDK 8u65
- Maven
- IntelliJ 14
- In Run/Debug configuration I have set
- VM Options:
- On Update action: Update resources
- On frame deactivation: Update classes and resources
- VM Options:
- Before launch: Build xxx.war exploded
- Deployment tab set to deploy xxx.war exploded
If I change the body of any class (e.g.returned value), everything is fine and it hot swap the class as I would expect.
Unfortunatelly when I change some JSF resources(under webapp directory), nothing happens. I looked into Tomcat temp directory, where files are moved into, and I can see only the old ones.
I also tried to add webapp directory as resources in IntelliJ, and it did not help.
Where do I have mistake?
My project structure:
src
└── main
├── java
| └── *.java
├── resources
| └── spring-web-context.xml
└── webapp
├── template.xhtml
├── ...
└── index.xhtml
I decided to do fresh instalation of IntelliJ and take some JSF sample project.
I found out that the settings described is working, so there is something wrong either with my working project, or instalation of IntelliJ
In order hot-swap of resources to work, the exploded artifact must be named with resp. extension ("war", "ear").
For example if your artifact is called ROOT.war, the exploded artifact must also be called ROOT.war, although while the first one is actually a zip, the second one is a folder.
This works on my JBoss server.
I had the same problem and eventually found that javax.faces.FACELETS_REFRESH_PERIOD
was set to -1
. As described in this post, changing it to 0
worked.
来源:https://stackoverflow.com/questions/33316925/intellij-hot-swapping-classes-but-not-jsf-pages