169 похожих чатов

Всем привет. Как научить sbt складывать создаваемые в процессе компиляции бинарники

не в структуру самого проекта (git-репа), а в отдельный каталог? (например /opt/sbt-cache/staging/...)
В SBT_OPTS указываю параметр -Dsbt.global.staging, но дело в том что этот параметр игнорируется до тех пор, пока есть доступ на запись в каталог с репой. Если я например подключаю git-репу только как read-only, тогда sbt использует эту опцию (sbt.global.staging).
При этом другие опции (для ivy, coursier, boot) используются правильно (вне зависимости от прав на запись)

Мне нужно сложить все собранные файлы чтобы сделать образ-артефакт, в котром я смогу запустить sbt test без необходимости перекомпиляции исходников.

19 ответов

12 просмотров

есть такй плагин sbt-out-of-tree но он для старого сбт (легко поправить под 1.х) и с кросспроектами не умеет

Вообще простейший способ - publishLocal и отдельный проект с тестами, который зависит от основного как от библиотеки.

Сергей-Голод Автор вопроса
Simon
Вообще простейший способ - publishLocal и отдельны...

и в таком случае при выполнении sbt test он не полезет в зависимости основного проекта и не начнёт повторную компиляцию основного проекта заново? Пока у меня проблема в том что я делаю sbt compile и sbt test:compile в одном месте (в одном контейнере), а sbt test и дальнейший sbt assembly мне нужно сделать в другом месте (в другом контейнере, которому будут "подложен" sbt-cache/ со всеми бинарными файлами созданными на этапе compile)

Сергей Голод
и в таком случае при выполнении sbt test он не пол...

В таком случае sbt вообще не знает, что основной проект и проект с тестами хоть как-то связаны

Сергей-Голод Автор вопроса
Simon
В таком случае sbt вообще не знает, что основной п...

но при этом компилируются оба проекта (основной и тест) сразу или тест будет компилироваться только при самом sbt test?

Сергей Голод
и в таком случае при выполнении sbt test он не пол...

Он "подкладывается" копированием или монтированием? Если копированием, то там атрибуты файлов (например даты) не меняются? Инкрементальная компиляция, насколько помню, не на основе хеша файла, а на основе даты последнего изменения.

Сергей-Голод Автор вопроса
Simon
Он "подкладывается" копированием или монтированием...

первоначально было через монтирование, откуда проблема и полезла. Т.е. git-репа была общая для первого этапа (compile) и для второго этапа (test+assembly). Я так и не понял до конца что именно "увидел" sbt тест в структуре репы (она была локально склонирована и содержимое в ней не менялось, за исключением созданных target/....), но в режиме sbt --debug --verbose было указано [debug] Recompiling all sources: number of invalidated sources > 50.0% of all sources и начинался процесс повторной сборки

Simon
Он "подкладывается" копированием или монтированием...

в последних сбт что-то делали с датами файлов вроде, чтоб получать каждый раз одинаковые бинари на выходе

Сергей-Голод Автор вопроса
den_po
в последних сбт что-то делали с датами файлов врод...

хотите "прикол"? cd project sbt compile (компиляция успешно проходит, повторный запуск sbt compile не перекомпилирует заново проект) cd .. cp -a project/ project2/ cd project2 sbt compile И оно заново ВСЁ перекомпилирует! Почему? Просто потому что имя каталога с проектом изменилось? (project -> project2). Возвращаюсь опять в project/, далее sbt compile - и опять не требуется перекомпиляция

Сергей-Голод Автор вопроса
Сергей Голод
хотите "прикол"? cd project sbt compile (компиляци...

даже переименование собственного каталога в котором расположен проект приводит к его перекомпиляции

Сергей Голод
даже переименование собственного каталога в которо...

Вполне вероятно: имя проекта берется из имени каталога и затем уже переопределяется в проекте (или не переопределяется при желании), так что имя каталога важно

Сергей-Голод Автор вопроса
Simon
Вполне вероятно: имя проекта берется из имени ката...

а как переопределить имя проекта таким образом, чтобы имя каталога с репой проекта могло иметь любое название и процесс компиляции не зависел от этого (от имени каталога)?

thisProject id все еще висит имя папки, так что не факт, что поможет.

Сергей-Голод Автор вопроса
Simon
thisProject id все еще висит имя папки, так что не...

а имя хоста может иметь аналогичную ососбенность? Я переношу папки с проектом на другой хост (отличие только в имени хоста, в остальном полная копия каталога и путей) - и опять идёт перекомпиляция

Сергей-Голод Автор вопроса
Сергей-Голод Автор вопроса
Simon
thisProject id все еще висит имя папки, так что не...

отзыв. после апгрейда до 1.4.0RC2 проблема с перекомпиляцией при изменении имени каталога репы ушла, а также проект больше не перекомпилируется при запуске в новом контейнере @odomontois

Сергей-Голод Автор вопроса
Tachi Войцишевский
Просто обновили?

только обновил. Новую фишку в возможности сложить все .class в jar и положить в отдельное место пока не проверил.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта