Структура библиотеки
Имя библиотеки и пакеты Libretto
Все пакеты исходных текстов на языке Libretto библиотеки должны быть прямыми пакетами или подпакетами корневого пакета библиотеки. Например, если библиотека называется com/teacode/pdf, то внутри возможны только пакеты com/teacode/pdf или подпакеты этого пакета. Это условие проверятся при подключении библиотек в Libretto-систему.
Но при распространении библиотек использование символа / затруднено из-за файловых систем или URL. Поэтому имя каталога или zip-архива, хранящего Libretto-библиотеку, составляется как имя корневого пакета, в котором символы / заменены на точки .. Например, библиотека с корневым пакетом com/teacode/pdf хранится либо в каталоге com.teacode.pdf, либо в архиве com.teacode.pdf.zip
Каталоги библиотеки
Каталоги (верхнего уровня) библиотеки:
libretto- исходные тексты Librettopublic- публичные файлыjvm- данные для JVM
Исходные тексты Libretto
Исходные тексты лежат в каталоге libretto корня библиотеки. Внутренняя структура подкаталогов и файлов ограничивается только возможностями файловой структуры, но все исходные тексты программы на Libretto должны иметь расширение .ltt. Имена каталогов и файлов могут быть никак не связаны с именами пакетов, которые используются.
Публичные файлы (для веб-приложения и publicText)
Файлы, которые будут публичными и доступными статически через веб-приложение должны располагаться в каталоге public корня библиотеки. Внутренняя структура подкаталогов и файлов ограничивается только возможностями файловой структуры.
Доступ к публичным файлам библиотеки во время исполнения возможен двумя способами:
-
Через URL веб-приложения, который формируется следующим образом:
/public/корневой пакет библиотеки/путь до файла/файл Например, если в библиотеке с корневым пакетомcom/teacode/abcв каталогеpublicесть каталогjs, в котором лежит файлtest.js, то при использовании этой библиотеки в веб-приложении этот файл будет доступен по адресу/public/com/teacode/abc/js/test.js -
Программным способом при помощи метода
publicTextбиблиотекиlibretto/lib. Этот метод принимает два строковых литерала, первых из которых указывает имя библиотеки (корневой пакет библиотеки), второй - имя файла относительноpublicв этой библиотеке (используется/в качестве разделителя каталогов вне зависимости от ОС). Существование файла проверяется в момент компиляции. Метод возвращает текстовое представление файла в кодировке UTF-8. Например, если в библиотеке с корневым пакетомcom/teacode/abcв каталогеpublicесть каталогjs, в котором лежит файлtest.js, то этот файл в текстовом виде доступен через вызовlib/publicText("com/teacode/abc", "js/test.js")
В любом случае для использования публичных файлов соответствующая библиотека должна быть подключена при помощи use в любом месте программы или веб-приложения.
jar-файлы (для JVM)
Возможно подключение jar-файлов, которые будут использоваться при запуске через JVM. jar-файлы складываются к подкаталог jar подкаталога jvm корневого каталога библиотеки (т. е. в подкаталог jvm/jar).
Имя jar-файла значения не имеет. При использовании библиотеки в приложении автоматически подключаются все jar-файлы из указанного каталога.
Libretto не делает никаких попыток разрешить конфликты jar, не занимается их версионностью. Все jar-файлы всех используемых Libretto-библиотек подключаются одновременно. Если будут дубли или разные версии, то поведение не определено (зависит от используемого JRE).
Поскольку jar-файлы берутся скопом из всех библиотек, то возможны их дубли. Поэтому желательны внутренние правила использования jar-файлов. Какие-то специфичные или обособленные Libretto-библиотеки могут сами по себе содержать jar-файлы. Соответственно, если есть желание использовать jar-файлы в своей библиотеке, то лучше подключить уже существующие, где уже есть необходимые jar-файлы. Но если jar-файлы достаточно универсальные, то лучше сделать отдельные Libretto-библиотеки, которые будут содержать только jar-файлы (и заглушку на Libretto). Тогда библиотеки смогут подключать их для использования.