module.cfx

module.cfx - это файл с описанием конфигурации модуля. Формат файла - cfx.

Файлы с таким же форматом:

  • app.cfx - описание конфигурации приложения
  • test.cfx - описание конфигурации приложения для тестов

Структура файла

Пример файла module.cfx:

<root>

    <x-depends module="MODULE-NAME"/>

    <!-- любые другие теги - конфигурация модуля -->

</root>

root

По соглашению корневой тег cfx-файлов имеет имя root, хотя это требование не принципиально, имя корневого тега может быть любым, оно просто игнорируется.

depends

Функция depends (тег x-depends) определяет модули, от которых зависит описываемый модуль.

Пример:

<root>
    <x-depends module="jandcode.core.db"/>
    <x-depends module="jandcode.core.db.mysql"/>
</root>

Подстановки #{VAR}

При загрузке файла модуля module.cfx (и всех файлов, которые он включает в себя через x-include), в дополнение к стандартным, доступны следующие подстановки #{VAR}, где VAR:

  • appdir - Каталог приложения. В этом каталоге лежит файл app.cfx.
  • env.test - при значении true - выполняются unit-тесты
  • env.dev - при значении true - режим разработки
  • env.source - при значении true - проект запущен из исходников
  • module - имя модуля
  • module.name - синоним для module
  • module.path - полный путь VFS до каталога модуля (до каталога с module.cfx)
  • module.package - корневой java-пакет модуля
  • module.package.cur - текущий java-пакет, в котором находится файл cfx
  • module.package.rel - java-пакет, относительно корня модуля, в котором находится файл cfx
  • module.packagepath - путь модуля (имя пакета модуля, где точки заменены на '/')
  • module.packagepath.cur - путь модуля для текущего каталога с файлом cfx (имя пакета модуля, где точки заменены на '/')
  • module.packagepath.rel - путь модуля, относительно корня модуля, для текущего каталога с файлом cfx (имя пакета модуля, где точки заменены на '/')
  • module.projectpath - путь до проекта модуля в исходниках, в этом каталоге лежит project.jc. Используется только в тестах! Если исходники не доступны, будет сгенерирована ошибка.
  • env.XXX - свойства среды. Вместо XXX можно подставлять, например, имя переменной среды (в верхнем регистре, например env.PATH). См: jandcode.commons.env.Env#getProperties

Пример для лучшего понимания. Допустим имеется модуль с именем proj1.mod1, который лежит в jar по пути d:/lib/proj1-mod1.jar, а файл, в котором используется переменная, находится в пакете модуля proj1.mod1.a.b.c Тогда:

ПеременнаяЗначение
module.nameproj1.mod1
module.pathfile:jar:d:/lib/proj1-mod1.jar!/proj1/mod1
module.packageproj1.mod1
module.package.curproj1.mod1.a.b.c
module.package.rela.b.c
module.packagepathproj1/mod1
module.packagepath.curproj1/mod1/a/b/c
module.packagepath.rela/b/c

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

<root>
    <web>
        <mount name="#{module}-root1"
               realPath="#{module.path}"
               virtualPath="#{module.packagepath}"/>
    </web>
</root>

Указанные переменные предназначены для использования с текущим загружаемым модулем. Можно воспользоватся форматом module.xxx:MODULENAME для получения аналогичных переменных из любого доступного модуля.

Например:

ПеременнаяЗначение
module.name:proj1.mod1proj1.mod1
module.path:proj1.mod1file:jar:d:/lib/proj1-mod1.jar!/proj1/mod1

Эта возможность предназначена в основном для тестов.

Остальные свойства

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

Однако следует помнить, что многие модули вводят правила, по которым рассматривают часть свойств в описании модуля особым способом. Следует придерживатся этих правил.