5.3.1. Структура build.gradle

Секция allprojects задает группу и версию собираемых артефактов проекта. Имена артефактов формируются на основе имен модулей, заданных в settings.gradle. Если свойство ext.isSnapshot равно true, то в именах артефактов будет присутствовать суффикс SNAPSHOT. Свойство ext.tomcatDir задает расположение каталога установки Tomcat. Кроме того, в секции allprojects могут быть заданы следующие опциональные свойства:

  • ext.copyright - текст Copyright Notice, вставляемый IntelliJ IDEA в файлы исходных текстов.

  • ext.vcs - тип используемой в проекте VCS. Если данное свойство указано, то в сгенерированных проектных файлах IntelliJ IDEA будет установлен параметр интеграции с данной VCS. Возможные значения: svn, Git.

  • ext.uploadUrl - URL репозитория, в который будут выгружатся собранные артефакты проекта при выполнении задачи uploadArchives. По умолчанию используется репозиторий Haulmont.

  • ext.uploadUser - имя пользователя репозитория для выгрузки собранных артефактов проекта. По умолчанию используется значение переменной окружения HAULMONT_REPOSITORY_USER.

  • ext.uploadPassword - пароль пользователя репозитория для выгрузки собранных артефактов проекта. По умолчанию используется значение переменной окружения HAULMONT_REPOSITORY_PASSWORD.

  • Свойства ext.tomcatPort, ext.tomcatShutdownPort и ext.tomcatDebugPort оказывают влияние на задачу setupTomcat (см. ниже) и могут быть использованы для установки Tomcat с нестандартными портами.

Любое из свойств проекта можно задать не в самом build.gradle, а путем передачи в командной строке аргумента с префиксом -P, например:

gradlew uploadArchives -PuploadUser=myuser -PuploadPassword=mypassword

В секции buildscript выполняется следующее:

  • Задается версия базовых проектов платформы, на которой основан данный проект.

  • Задается набор репозиториев, из которых будут загружаться зависимости проекта. В качестве имени и пароля для доступа к репозиторию зависимостей используются либо значения свойств проекта repoUser и repoPass, либо стандартные значения, явно указанные в скрипте сборки. Как и другие свойства проекта, repoUser и repoPass можно передать в командной строке в аргументах -P.

  • Объявляется зависимость от плагина cuba-plugin, в котором сосредоточена специфика сборки проектов на платформе. Плагин подключается далее в конфигурацию сборки модулей с помощью метода

    apply(plugin: 'cuba')

Далее в секциях configure определяются параметры сборки модулей приложения.

Исполняемыми единицами в Gradle являются задачи (tasks). Они задаются как внутри плагинов, так и в самом скрипте сборки. Рассмотрим специфические для CUBA задачи, параметры которых могут быть сконфигурированы в build.gradle.

  • enhance - задача типа CubaEnhancing, выполняющая bytecode enhancement классов персистентных сущностей. Объявляется в модуле global. В параметре задачи persistenceXml указывается путь к файлу persistence.xml проекта.

    Например:

    task enhance(type: CubaEnhancing) {
        persistenceXml = "${globalModule.projectDir}/src/persistence.xml"
    }
  • enhanceTransient - задача типа CubaEnhanceTransient, выполняющая bytecode enhancement классов неперсистентных сущностей. В параметре задачи metadataXml указывается путь к файлу metadata.xml проекта.

    Например:

    task enhanceTransient(type: CubaEnhanceTransient) {
        metadataXml = "${globalModule.projectDir}/src/metadata.xml"
    }
  • setupTomcat - задача типа CubaSetupTomcat, выполняющая установку и инициализацию локального сервера Tomcat для последующего быстрого развертывания приложения. Эта задача автоматически добавляется в проект при подключении плагина сборки cuba, поэтому объявлять ее в build.gradle не нужно. Каталог установки Tomcat задается свойством ext.tomcatDir в секции allprojects. По умолчанию это подкаталог build/tomcat проекта.

  • deploy - задача типа CubaDeployment, выполняющая быстрое развертывание модуля в Tomcat. Объявляется в модулях core, web, portal. Параметры:

    • appName - имя веб-приложения, которое будет создано из модуля. Фактически это имя подкаталога внутри tomcat/webapps.

    • jarNames - список имен JAR файлов (без версии), получающихся в результате сборки модуля, которые надо поместить в каталог WEB-INF/lib веб-приложения. Все остальные артефакты модуля и зависимостей будут записаны в tomcat/shared/lib.

    Например:

    task deploy(dependsOn: assemble, type: CubaDeployment) {
        appName = 'app-core'
        jarNames = ['cuba-global', 'cuba-core', 'app-global', 'app-core']
    }
  • buildWar - задача типа CubaWarBuilding, выполняющая сборку модуля в WAR-файл. Может быть объявлена в модулях core, web, portal, если требуется развертывание приложения в WAR. Собранные WAR-файлы находятся в подкаталогах build/distributions модулей.

    Параметры задачи:

    • appName - имя результирующего WAR-файла.

    • appHome - путь к домашнему каталогу приложения. В домашнем каталоге будут располагаться файл конфигурации логгирования; каталог скриптов базы данных; конфигурационный, временный и рабочий каталоги приложения.

      В параметре appHome можно указать как абсолютный путь к домашнему каталогу, так и системную переменную, которая должна быть задана при запуске сервера. Например: appHome = '/work/sales_home' или appHome = '${app.home}'

    • appProperties - мэп свойств, которые будут записаны в файл WEB-INF/local.app.properties в дополнение к определенным в самой задаче. По умолчанию задача buildWar создает данный файл и определяет в нем свойства cuba.logDir, cuba.confDir, cuba.tempDir, cuba.dataDir для работы с домашним каталогом приложения, упомянутым выше. Кроме того, для приложения среднего слоя задается параметр

      cuba.dataSourceJndiName = jdbc/CubaDS

      а для приложения веб-клиента параметры

      cuba.connectionUrlList = http://localhost:8080/${appName}-core
      cuba.useLocalServiceInvocation = false

    Пример задачи в модуле web:

    task buildWar(dependsOn: assemble, type: CubaWarBuilding) {
        appName = 'app'
        appHome = '${app.home}'
        appProperties = ['cuba.connectionUrlList': 'http://server/app-core']
    }

  • createWarDistr - задача типа CubaWarDistribution, выполняющая подготовку дистрибутива, включающего в себя WAR-файлы приложений и их домашний каталог. Задача обязательно должна зависеть от задач buildWar модулей, и имеет следующие параметры:

    • appHome - путь к домашнему каталогу приложения (подробнее см. описание задачи buildWar).

    • distrDir - путь к каталогу, в который копируется содержимое дистрибутива. Это необязательный параметр, по умолчанию используется подкаталог build/war проекта.

    Пример описания задачи:

    task createWarDistr(dependsOn: [coreModule.buildWar, webModule.buildWar], type: CubaWarDistribution) {
        appHome = '${app.home}'
    }
  • createDb - задача типа CubaDbCreation, создающая базу данных приложения путем выполнения соответствующих скриптов. Объявляется в модуле core. Параметры:

    • dbms - тип СУБД, см. Раздел 4.3.1, «Типы СУБД».

    • dbName - имя базы данных.

    • dbUser - имя пользователя СУБД.

    • dbPassword - пароль пользователя СУБД.

    • host - хост и, опционально, порт СУБД в формате host[:port]. Если не задан, используется localhost.

    • masterUrl - URL для подключения при создании БД. Если не задан, используется значение по умолчанию, зависящее от типа СУБД и параметра host.

    • dropDbSql - команда SQL для удаления БД. Если не задана, используется значение по умолчанию, зависящее от типа СУБД.

    • createDbSql - команда SQL для создания БД. Если не задана, используется значение по умолчанию, зависящее от типа СУБД.

    • driverClasspath - список JAR файлов, содержащих JDBC драйвер. Элементы списка разделяются символом ":" на Linux и символом ";" на Windows. Если не задан, используются зависимости, входящие в конфигурацию jdbc данного модуля. Явное задание driverClasspath актуально при использовании Oracle, т.к. его JDBC драйвер не присутствует в зависимостях.

    • oracleSystemPassword - при использовании Oracle пароль пользователя SYSTEM.

    Пример для PostgreSQL:

    task createDb(dependsOn: assemble, description: 'Creates local database', type: CubaDbCreation) {
        dbms = 'postgres'
        dbName = 'sales'
        dbUser = 'cuba'
        dbPassword = 'cuba'
    }

    Пример для MS SQL Server:

    task createDb(dependsOn: assemble, description: 'Creates local database', type: CubaDbCreation) {
        dbms = 'mssql'
        dbName = 'sales'
        dbUser = 'sa'
        dbPassword = 'saPass1'
    }

    Пример для Oracle:

    task createDb(dependsOn: assemble, description: 'Creates database', type: CubaDbCreation) {
        dbms = 'oracle'
        host = '192.168.1.10'
        dbName = 'orcl'
        dbUser = 'sales'
        dbPassword = 'sales'
        oracleSystemPassword = 'manager'
        driverClasspath = "$tomcatDir/lib/ojdbc6.jar"
    }
  • updateDb - задача типа CubaDbUpdate, обновляющая базу данных приложения путем выполнения соответствующих скриптов. Аналогична задаче createDb, за исключением отсутствия параметров dropDbSql и createDbSql.

  • startDb - задача типа CubaHsqlStart, выполняющая запуск локального сервера HSQLDB. Параметры:

    • dbName - имя базы данных, по умолчанию cubadb.

    • dbDataDir - каталог, в котором размещена база данных, по умолчанию подкаталог data проекта.

    • dbPort - порт сервера, по умолчанию 9001.

    Например:

    task startDb(type: CubaHsqlStart) {
        dbName = 'sales'
    }

  • stopDb - задача типа CubaHsqlStop, выполняющая остановку локального сервера HSQLDB. Параметры аналогичны задаче startDb.

  • start - задача типа CubaStartTomcat, выполняющая запуск локального сервера Tomcat, установленного задачей setupTomcat. Эта задача автоматически добавляется в проект при подключении плагина cuba, поэтому объявлять ее в build.gradle не нужно.

  • stop - задача типа CubaStopTomcat, выполняющая остановку локального сервера Tomcat, установленного задачей setupTomcat. Эта задача автоматически добавляется в проект при подключении плагина cuba, поэтому объявлять ее в build.gradle не нужно.

  • restart - задача, выполняющая остановку, быстрое развертывание, и старт локального сервера Tomcat.

  • debugWidgetSet - задача типа CubaWidgetSetDebug, которая запускает GWT Code Server для отладки виджетов в веб-браузере.

    Пример использования:

    task debugWidgetSet(type: CubaWidgetSetDebug) {
        widgetSetClass = 'com.haulmont.cuba.web.toolkit.ui.WidgetSet'
    }

    Убедитесь, что кофигурация runtime модуля web-toolkit содержит зависимость от библиотеки Servlet API:

    configure(webToolkitModule) {
        dependencies {
            runtime(servletApi)
        }
    ...

    См. Раздел 5.7.2, «Отладка виджетов в веб-браузере» для получения информации о том как отлаживать код в веб-браузере.