¿Cómo administrar un proyecto con un grupo de classs principales y diferentes versiones para diferentes frameworks de GUI?

Estoy desarrollando una aplicación en Java. Tengo un grupo de classs principales, que solo usan bibliotecas nativas de Java y una GUI JavaFX. Pero recientemente decidí portarlo a Vaadin, para convertirlo en una aplicación web. Me gustaría seguir trabajando en ambas versiones, de forma que todo el trabajo que pongo en las classs principales se transmita a ambas versiones, y solo tengo que codificar por separado las cosas que son específicas de cada marco. Eso también me permitiría fácilmente portarlo a Android en el futuro.

Ahora mi pregunta es sobre la mejor manera de administrar esto en Github. Varias opciones vienen a mi mente (y probablemente me faltan algunas buenas opciones, porque no tengo mucha experiencia):

  • Haga proyectos separados de Github para cada versión, y un proyecto separado para las classs principales, que actuaría como una biblioteca que exportaría a cada versión después de realizar cambios. Una pregunta relacionada: ¿Podrían los proyectos de versiones ser parte del proyecto principal, así que podría propagar fácilmente los cambios en las classs principales a través de requestes de extracción? No he podido bifurcar mi propio proyecto.
  • Construya todo en el mismo proyecto, donde cada versión tiene su propia twig. De esta forma, los cambios en las classs principales se propagarían mediante la fusión de sucursales.
  • Cree todo en el mismo proyecto, tenga cada implementación de GUI en un package diferente.