# Пример проекта на платформе ncore

Здесь представлена стандартная структура проекта с основными конфигурационными
файлами и классами, а также настройки IDE (Intellij Idea) и настройки SCM (git).

Для данного проекта можно использовать базу ядра.

Таски запускаются с помощью gradle wrapper. Версия Gradle - 7.6.4.

Nix
```bash
./gradlew build

```
Win
```
gradlew.bat build

```

### Основные таски

* ncoreRestoreDatabase (или nRDB) - восстановление базы из бекапа
* ncoreLoadPatches (или patch) - загрузка патчей
* ncoreApplyPatches (или update) - применение патчей
* ncoreUpdateDb (или updateDatabase) - загрузка и применение патчей
* generateSources (или codemaker) - генерация исходников
* classes - компиляция
* build - компиляция, выполнение проверок (тесты)
* distZip - генерация zip-архива дистрибутива толстого клиента (build/distributions)
* war - генерация war-архива тонкого клиента (build/libs)
* release - выпуск сборки
* run - запуск клиента (обычно при запуске исключают этап генерации кода - generateSources)


Если нужно выполнить таск, но при этом не выполнять определенные такси из его зависимостей, то можно воспользоваться ключом -x.

Запуск проекта одной командой:
```bash
./gradlew nRDB build run
```

Компиляция классов:
```bash
./gradlew classes -x generateSources
```
Запуск клиента:
```bash
./gradlew run -x generateSources
```

Запуск клиента в режиме отладки (порт 5005):
```bash
./gradlew run --debug-jvm
```

Названия тасков можно сокращать. Например, вместо generateSources можно указать gS, вместо ncoreLoadPatches nLP и т.д.

### Intellij Idea

Синхронизация настроек  - Ctrl+Shift+A, далее выбрать пункт "Refresh All External Projects", или в окне Gradle нажать кнопку Refresh.

Для зависимостей создаются библиотеки с префиксом "Gradle__". По данному префиксу можно лего создть шаблоны для svn:ignore или .gitignore.

Таски можно запускать прямо из Idea. В конфигурациях запуска имеется соответствующий тип.

В Idea 14.1 появилось действие "Execute Gradle Task", которое позволяет выполнять таски без указания конфигурации запуска.


### Основные соглашения

* Группа проекта в gradle-скрипте соответствует основному пакету
* Основной пакет содержит классы Product и Version
* Файлы с версией (version.properties)  и переопределенными классами (register.json)
  находятся в ресурсах по следующему пути: META-INF/ncore-product/[группа проекта]
* В корне проекта обязательно присутствет файл ncore-properties.xml, содержайщий свойство
  product.name.


### Создание проекта myproject на основе sample

1. Создать директорию myproject и скопировать в нее содержимое ncore-sample

2. Удалить директорию .git

3. В build.gradle изменить значение group
```
group = 'biz.redsoft.myproject'
```
4. В settings.gradle изменить значение rootProject.name
```
rootProject.name = 'biz.redsoft.myproject'
```

5. В ncore-properties.xml (в папках ./, src/main/webapp/WEB-INF и src/dist/config  изменить значение product.name и product.title
```
<entry key="product.name">biz.redsoft.myproject</entry>
<entry key="product.title">MyProject title</entry>
```

6. В файлах starter и starter.bat поменять bin/sample на bin/biz.redsoft.myproject

7. В исходниках пакет biz.redsoft.sample заменить на biz.redsoft.myproject (это можно сделать в IDE)

8. В META-INF/ncore-product изменить имя диектории biz.redsoft.sample на biz.redsoft.myproject

9. Актуальная версия ядра указывается в файле gradle.properties:
```
biz.redsoft.ncore.version=1.10.339.9
```
Запуск толстого клиента осуществляется в собранном дистрибутиве (distTar или distZip) в каталоге bin командой:
start-client.bat (или ./start-client в линуксе)
