Опустить источники частично в Лейнингене
У меня есть API, который мне нужно экспортировать, но много кода, который я бы хотел скрыть от посторонних глаз. Если я добавлю:omit-sources true, тогда вся кодовая база исчезнет, и мой API больше не будет доступен для компиляции.
Как этого достичь? Я попытаюсь использовать подмодули git, но мне интересно, есть ли альтернативный подход, совместимый с моим текущим макетом проекта, например, исключить все, кроме пакета.
Редактировать: у меня есть data_readers.clj, который не попадет в JAR, если я использую:omit-sources
В настоящее время я делаю следующее:filespecs [{:type:bytes:path "data_readers.clj":bytes ~(slurp "src/main/shared/clj/data_readers.clj")}]
включить файл вручную, но это вызывает проблемы в плагине Cursive IntelliJ.
1 ответ
Вам нужны оба :aot
(заблаговременная компиляция) и :omit-source
,
когда :aot
не используется (это по умолчанию), clojure попытается скомпилировать классы на лету из источников в банке, поэтому ему нужны источники.
Ты можешь использовать :aot :all
, или же :aot [my.awesome.api]
если вы собираетесь выставить только свои api ns.
Итак, ваш project.clj будет выглядеть так:
(defproject my-project ...
...
:aot :all
:omit-source true)
Эта ветка из списка рассылки clojure содержит информацию об этом. Также страница компиляции в clojure.org очень хорошо объясняет преждевременную компиляцию:
Clojure компилирует весь код, который вы загружаете на лету, в байт-код JVM, но иногда выгодно компилировать заранее (AOT). Некоторые причины использовать компиляцию AOT:
- Чтобы доставить ваше приложение без источника
- Чтобы ускорить запуск приложения
- Для генерации именованных классов для использования Java
- Чтобы создать приложение, которое не требует генерации байт-кода во время выполнения и пользовательских загрузчиков классов