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 ответов

30 просмотров

есть такй плагин 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 и положить в отдельное место пока не проверил.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта