Разбиение проекта на модули

Добрый день!

Коллеги, начинаю новый проект с использованием библиотек Jmix. Но пока не могу определиться со структурой проекта. Нужна помощь. Планировал отдельные модули для сущностей, REST-сервисов, консоли администрирования. Пробовал разные варианты: и делать несколько модулей в одном проекте и на каждый модуль создавал отдельный Jmix-проект, только убирал из него ненужные библиотеки (в частности jmix-ui). Но в обоих случаях при вызове сборки получаю одну и ту же ошибку:

Running EclipseLink enhancer in project ':psbfscore' for source set 'main'
Exception in thread "main" Local Exception Stack: 
Exception [EclipseLink-40007] (Eclipse Persistence Services - 2.7.7.4-jmix): org.eclipse.persistence.exceptions.StaticWeaveException
Exception Description: An exception was thrown while weaving: [Ljava.lang.String;@5649fd9b
Internal Exception: java.nio.file.NoSuchFileException: D:\PROJECTS\PSBFS\core\psbfscore\build\tmp\entitiesEnhancing\main\persistence
	at org.eclipse.persistence.exceptions.StaticWeaveException.exceptionPerformWeaving(StaticWeaveException.java:140)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeave.main(StaticWeave.java:88)
Caused by: java.nio.file.NoSuchFileException: D:\PROJECTS\PSBFS\core\psbfscore\build\tmp\entitiesEnhancing\main\persistence
	at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
	at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:53)
	at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38)
	at java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:198)
	at java.base/java.nio.file.Files.readAttributes(Files.java:1763)
	at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1217)
	at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
	at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:836)
	at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
	at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
	at java.base/java.util.jar.JarFile.<init>(JarFile.java:348)
	at java.base/java.util.jar.JarFile.<init>(JarFile.java:319)
	at java.base/java.util.jar.JarFile.<init>(JarFile.java:285)
	at org.eclipse.persistence.internal.jpa.deployment.ArchiveFactoryImpl.createArchive(ArchiveFactoryImpl.java:95)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveClassTransformer.buildClassTransformers(StaticWeaveClassTransformer.java:108)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveClassTransformer.<init>(StaticWeaveClassTransformer.java:78)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveProcessor.process(StaticWeaveProcessor.java:252)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveProcessor.performWeaving(StaticWeaveProcessor.java:174)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeave.start(StaticWeave.java:117)
	at org.eclipse.persistence.tools.weaving.jpa.StaticWeave.main(StaticWeave.java:86)

> Task :psbfscore:compileJava FAILED

Т.е. похоже не работает расширение JPA-сущностей. Чего то не хватает в файле сборки gradle. Может кто знает чего? Спасибо!

Ошибку поборол добавлением в исходники модуля класса помеченного аннотацией @JmixModule

@Configuration
@ComponentScan
@ConfigurationPropertiesScan
@JmixModule(dependsOn = {EclipselinkConfiguration.class})
@PropertySource(name = "com.company.psbfs.core", value = "classpath:/com/company/psbfs/core/module.properties")
public class PsbfscConfiguration {

}

Посмотрим, что будет дальше… )

Действительно, для правильной работы некоторых механизмов фреймворка (entity enhancing, message overriding, etc.) требуется указать зависимости между модулями с помощью аннотации @JmixModule(dependsOn = {...}). Это активно используется в модулях самого фреймворка.

В одномодульном приложении это не обязательно, так как фреймворк считает что модуль с @SpringBootApplication просто зависит от всех остальных существующих в classpath модулей.

Если же модулей в приложении или аддоне несколько, надо сформировать дерево зависимостей явно. Для примера можно посмотреть проект https://github.com/jmix-projects/sample-new-multi-module-project.

Однако в данный момент мы официально не поддерживаем создание многомодульных приложений и не тестируем такие варианты. У вас как минимум могут быть проблемы с таким проектом в Студии.

Планируем реализовать поддержку многомодульных проектов в релизе февраля 2022, см. Jmix Roadmap. Пока рекомендую просто продумать разделение кода на пакеты, в будущем перенести его в отдельные модули будет не сложно.

С уважением,
Константин

Константин, спасибо большое за разъяснения, советы и ссылку на пример. Обязательно посмотрю.