So, project A which compiles to JAR A requires classes in JAR B.
Project B which compiles to JAR B requires classes in JAR A.

I was asked about this, so I suggested decoupling the projects such that on a clean system with no JARs, project A and project B can be built.

On thinking about this, there is two approaches to the solution.

Solution 1 - Declare methods in interfaces and then have project A use these interfaces instead of depending on the classes directly, and similarly for project B. This will require implementing class factories, which returns singleton classes that implements these interfaces.

Solution 2 - An approach that is quite tedious.

  1. Remove project/JAR B from the "Required Libraries" of project A.
  2. Add all the source for the classes in project B to project A.
  3. Build A. 
  4. Remove project/JAR A from the "Required Libraries" of project B.
  5. Add all the source for the classes in project A to project B.
  6. Build B.
  7. Remove all the classes from project B in project A. Add to "Required Libraries" - project/JAR B. Build A.
  8. Remove all the classes from project A in project B. Add to "Required Libraries" - project/JAR A. Build B.
In the process of thinking about Solution 2, I think I've come up with an idea for a make application that can automate solution 2.