Параметры плагина#

Расположение параметров в секции плагина описаны в разделах «Плагин для maven проектов» и «Плагин для gradle проектов».

Параметр maven плагина

Параметр gradle плагина

Параметры в gradle.properties

Описание

meta.componentId

componentCode

metamodel.componentCode

Код компонента. Значение, которым заполняется атрибут component-code в модели

componentCode

-

-

То же, что и meta.componentId, но позволяет переопределить значение из свойств модуля

formatted-output

fromattedOutput

metamodel.fromattedOutput

Форматировать структуру генерируемого xml-файла (по умолчанию false)

strict-type-check

strictTypeCheck

metamodel.strictTypeCheck

Строгая проверка типов (по умолчанию true). Если установлен false, то в случае обнаружения неизвестного типа, он будет заменен на тип java.lang.String. Параметр может быть удобен при отладке, не рекомендуется его использовать при эксплуатации

default-class

defaultClass

metamodel.defaultClass

Параметр используется если strict-type-check установлен в false. По умолчанию — java.lang.String. Помимо полного имени класса, можно указать ключевое слово «identical». В этом случае тип поля будет браться из java-класса, без проверок

additional-primitive-types

additionalPrimitiveTypes

metamodel.additionalPrimitiveTypes

Регистрация нового примитивного типа

interrupt-on-error

interruptOnError

metamodel.interruptOnError

Завершать сборку с ошибкой при ошибках работы плагина (по умолчанию false — выводится только предупреждение)

internal-path

internalPath

metamodel.internalPath

Путь расположения папки с моделью внутри сборочной директории. По умолчанию — корень результирующего jar-файла (classes в maven и . в gradle)

outputDirectory

outputDirectory

metamodel.outputDirectory

Расположение сборочной директории. По умолчанию указывает на сборочную директорию модуля (target в maven и null в grable)

schema-version

schemaVersion

metamodel.schemaVersion

Версия схемы файла модели. По умолчанию 1.0

use-old-scanner

useOldScanner

metamodel.useOldScanner

Использование старой логики сканирования. Начиная с версии 5.6.0, для сканирования классов используется Hibernate ORM, что позволяет добавить в модель данные о физическом маппинге

hibernate-dialect

hibernateDialect

metamodel.hibernateDialect

Параметр Hibernate ORM для возможности переопределения. По умолчанию используется org.hibernate.dialect.PostgreSQL95Dialect

hibernate-implicit-naming-strategy

hibernateImplicitNamingStrategy

metamodel.hibernateImplicitNamingStrategy

Параметр Hibernate ORM для возможности переопределения, если в проекте используется не значение по умолчанию

hibernate-physical-naming-strategy

hibernatePhysicalNamingStrategy

metamodel.hibernatePhysicalNamingStrategy

Параметр Hibernate ORM для возможности переопределения, если в проекте используется не значение по умолчанию

scanning-scope - область сканирования. По умолчанию MODULE. Возможные значения:

  • MODULE — сканировать только классы текущего модуля;

  • MODULE_DEPENDENCIES — сканировать классы текущего модуля и классы зависимостей модуля (исключая зависимости зависимостей);

  • WHOLE_PROJECT — сканировать классы текущего модуля и все его зависимости (включая транзитивные)

Значение выбирается на основании структуры проекта — есть ли классы модели в подключаемых библиотеках.

Параметр применим только к maven плагину, из-за особенностей работы gradle.

Описание модели#

Параметр maven плагина

Параметр gradle плагина

Параметры в gradle.properties

Описание

model-name

modelName

modelJpa.modelName

Название

model-version

modelVersion

modelJpa.modelVersion

Версия модели

file-name

fileName

modelJpa.fileName

Название файла. Может заканчиваться на .xml, в этом случае название используется без изменений. Если расширение .xml не указано — в конец названия будет автоматически добавлено .ldm.xml

packages

packages

modelJpa.packages

Пакеты, в которых нужно искать классы модели

additional-types

additionalTypes

modelJpa.additionalTypes

Одиночные классы, которые нужно добавить к поиску

exclude-packages

excludePackages

modelJpa.excludePackages

Пакеты, которые нужно исключить из поиска

exclude-types

excludeTypes

modelJpa.excludeTypes

Классы, которые нужно исключить из поиска

whitelist-file-name

whitelistFileName

modelJpa.whitelistFileName

Название файла белого списка (который будет создан). По умолчанию whitelist.txt

blacklist-file-name

blacklistFileName

modelJpa.blacklistFileName

Название файла черного списка (который будет создан). По умолчанию blacklist.txt

version-field-override-type

versionFieldOverrideType

modelJpa.versionFieldOverrideType

Переопределение тип поля версионирования. Указанный тип будет использоваться для всех полей с аннотацией @Version при генерации файла описания модели

customModelTransformer

customModelTransformer

modelJpa.customModelTransformer

Установка класса для трансформации модели

В параметрах packages, additional-types, exclude-packages, exclude-types, additional-primitive-types можно указывать список через запятую. Параметры не чувствительны к пробелам и переносам, поэтому для удобства список можно форматировать.

С помощью этих параметров задается множество классов для поиска.

Синим отмечено множество классов, включенных в поиск. Красным — исключенных.

Исключение классов#

Исключать можно только классы, на которые нет ссылок из других классов, в противном случае сканирование завершится с ошибкой. Модель должна содержать все классы, даже если их нет в белом списке.

Регистрация примитивных типов#

Для проверки согласованности модели в плагине предусмотрен список примитивных типов.

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

Если тип поля фактически является примитивным, но при этом он отсутствует в списке, то зарегистрируйте новый примитивный тип, используя параметр additional-primitive-types.

Трансформация модели#

Если необходимо внести изменения в сгенерированную модель воспользуйтесь функциональностью трансформации: в параметре customModelTransformer укажите полное имя класса-трансформатора. Класс должен быть наследником Function<DataModel,Datamodel>.

Пример класса-трансформатора:

package my.packag;

import com.sbt.eip.metamodel.integration.ldm.dto.DataModel;
import java.util.function.Function;

public class MyTransformer implements Function<DataModel, DataModel> {

    @Override
    public DataModel apply(DataModel dataModel) {
        ... // необходимые изменения в модели
        return transformedDataModel;
    }
}

Необходимая зависимость DataModel находится в артефакте:

<dependency>
    <groupId>sbp.eip.metamodel</groupId>
    <artifactId>eip-metamodel-ldm</artifactId>
    <version>6.0.0</version>
</dependency>

Для того, чтобы класс-трансформатор не попадал в состав дистрибутива, расположите его в тестовом исходном коде.

При расположении в тестах есть несколько особенностей:

  • класс должен быть размещен в том же модуле, к которому подключен плагин-сканер;

  • класс должен быть скомпилирован к моменту запуска сканирования (для maven проектов нужно будет поменять фазу работы плагина на <phase>process-test-classes</phase>);

  • тестовые классы попадут в область сканирования. Если в них присутствуют Entity-классы, они так же попадут в результирующую модель. Для их исключения используйте параметры exclude-packages или exclude-types.