Опустить источники частично в Лейнингене

У меня есть 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
  • Чтобы создать приложение, которое не требует генерации байт-кода во время выполнения и пользовательских загрузчиков классов
Другие вопросы по тегам