Использование классов из /target

Я использую JOOQ. JOOQ генерирует метаклассы, которые потом используются для генерации запросов в базу. Окей. Рекомендуется генерировать классы в /target/generated-sources/jooq... Сгенерировал. Но когда я пытаюсь вызвать этот класс в коде, IDEA не видит эти классы.

Подскажите, как мне быть?


Ответы (1 шт):

Автор решения: default locale

Нужно выделить метаклассы в отдельную библиотеку. В одном модуле maven классы генерируются, в других модулях этот модуль проставляется как зависимость и используются сгенерированные метаклассы.

При таком подходе модель базы автоматически отделяется от бизнес-логики.

Рекомендуется генерировать классы в /target/generated-sources/jooq

Это так, но в документации есть раздел (Code generation and version control) в котором вопрос генерации освещается подробнее. Разделяются два общих подхода:

  1. Генерированный код является частью кода приложения.

    Метаклассы генерируются в исходном коде (src/main/java), хранятся в системе контроля версий. Генерация проводится, как правило, вручную, а не при сборке, т.к. возможны изменения.

    Преимущества:

    • Генерация отделена от сборки. Для сборки проекта не нужна БД.
    • Метаклассы не зависят от БД. Это может быть удобно если схема БД изменяется внешними силами (например, другими разработчиками).
    • Изменения схемы БД явно хранятся в системе контроля версий.

    Недостатки:

    • Метаклассы могут расходиться с базой данных.
  2. Генерированный код является частью производных артефактов.

    Метаклассы генерируются в процессе сборки автоматически (target/generated), не хранятся в системе контроля версий.

    Преимущества:

    • Модель данных всегда соответствует БД.
    • Метаклассы не занимают место в исходном коде.

    Недостатки:

    • Сборка зависит от базы данных.

Как правило используют второй подход, чтобы избежать разночтений между БД и Java-кодом, но при необходимости можно использовать как первый подход, так и некое промежуточное решение.

В любом случае метаклассы лучше хранить отдельно.

→ Ссылка