I know there is a lot of information here... but there may be other people with problems like this, and I think it would be a great help to discuss this, or at least get some decent input/suggestions brewing.
Alright, let me start out by giving an overview of our environment.
We have a multi-module maven project with about 11 JARs. Dependent on those internal JARs are 9 WAR files, of which 8 are placed in an EAR file. The remaining WAR file is deployed on its own as a separate application. When the 8 WAR files are built (that reside in the EAR), they are built as skinny WAR files, so the resultant EAR file is at a minimal size with all dependencies in the APP-INF/lib section. All of this works with no issues. We currently deploy to a remote WebLogic 10.3 server that has a lot of memory and CPU, so the load is not on our individual machines. We're also publishing nightly snapshots using a continuous integration build server.
Artifacts that we're deploying:
EAR file containing 8 WAR files, 11 internal JARs, and third party libs: ~70MB
Other WAR file: ~110MB
Some of our software engineers would like to work from home, over a VPN connection, and have incremental/hot deployment options. Otherwise, because of how we deploy with web logic/maven, they are forced to build an entire EAR file or the 110MB WAR file and upload them over VPN. This is not fun, and it's not fast. I have been reading on JRebel, and was wondering if anyone else uses JRebel with a multimodule maven project doing remote deployments, and how to do it efficiently.
From some of my reading, it is recommended to 'upload the changes' to the server and have the rebel.xml configurations reading those directories for that particular deployment which... well, brings us to the issue at hand. How do I tell Maven to dump changed resources/newly compiled class files to some other directory so that I can upload them to the server and to the appropriate folders (our server hosts something like 10+ WebLogic instances running on various ports, one instance per developer). Or just have the developers share their workspace folder with the network, and configure rebel.xml files (in a JAR, for example) point to the appropriate //COMPUTERNAME/workspace/jarProjectName/target/classes folder. The problem I foresee with that is, every time they start WebLogic, it's going to fish all the .class and configuration files and JSP files across the network, because the rebel.xml file wins first, and that will be terrible over VPN. AFTER the deploy is up though, then hot deployment should work as usual. I just don't want the unnecessary overhead of transferring all the classes over the network for the first boot, and not only that, sometimes developers are at the office, turn off their computer, and then go home. What happens to JRebel/WebLogic then?
It seems like a much better idea to only see what files have changed in the various maven projects, and FTP them to the proper location on the server so that JRebel can do it's thing, completely server side. Does anyone have a good way to do this? Or maybe someone has a solution that does not involve JRebel at all. Let's talk.