@scala_ru

Страница 919 из 1499
Viktor
03.09.2017
21:24:19
В статье написано что в гредле это такое же дно как и в сбт, #янисагласен
укажите на место в gradle что имеется в виду под многомодульными проектами. И как организован layout на 120 модулей

А чем оно днище в сбт?
как сотни модулей будут описываться в sbt?

Bulat
03.09.2017
21:26:46
Смотря какие модули

Если это однотипные, то что-типа val myMicroSercice = project.in(file("my-microservice")).settings(libraryDependencies +=... ).dependsOn(common, utils)

Google
Bulat
03.09.2017
21:30:54
Есть что-то сильно отдельное, то можно его в отдельной папке держать, а из других проектов на него ссылаться как val externalProject = ProjectRef("../external")

Сбт проверит что граф зависимостей ацикличен

Vladimir
03.09.2017
21:31:59
в gradle мультимодули удобнее, чем в sbt. Не надо дублировать зависимости в виде .settings(libraryDependencies +=... ).dependsOn(common, utils) для каждого модуля. Просто в аггрегирующем модуле можно указывать переопределения зависимостей и заставлять вместо скачивания артефакта смотреть в определенную директорию с исходным кодом

Bulat
03.09.2017
21:32:59
Тоже необязательно, я в качестве примера показал просто

Vladimir
03.09.2017
21:41:24
Ок, у меня есть проект из нескольких модулей. A, B, C. пусть C зависит от B, B от A Я хочу работать с кодом таким образом, чтобы мне при изменениях не приходилось собирать и пушить куда-либо артефакты. В тоже самое время, я хочу, чтобы у меня A, B, C собирались по отдельности в отдельные jar-ки. Соотв., в build.sbt проекта C у меня указана зависимость libraryDependencies += B, для B - libraryDependencies += A В аггрегирующем проекте я указываю, B как .dependsOn(A), C как .dependsOn(A, B). Когда появляется еще модуль - для него тоже приходится прописывать зависимости в .depends, чтобы можно было не пересобирать артефакты

Oleg
03.09.2017
21:41:45
А есть где-то примеры, как кодогенерацию в штанах делать?

Vladimir
03.09.2017
21:43:44
В gradle же можно глобально переопределить резолвинг зависимостей для всех проектов. Что com.megacompany.A всегда вытаскивать из директории A для всех проектов. В sbt так тоже разве можно?

Oleg
03.09.2017
21:48:44
Vladimir
03.09.2017
22:24:02
ОК, попробую у меня есть проект super-project. Пусть зависит от проектов utils, который в свою очередь зависит от commons. Каждый из проектов собирается в отдельный jar-файл. Соотв, у меня в каждом проекте лежит build.sbt, в котором описаны зависимости, например $ cat super-project/build.sbt libraryDependencies += "utils:1+" $ cat utils/build.sbt libraryDependencies += "commons:1+" Я хочу вести разработку всего проекта так, чтобы после изменения в любом из компонент мне не приходилось пушить utils.jar и commons.jar ни в какой-нибудь корпоративный репозиторий, ни даже в мой собственный локальный. Значит, что мне надо прописать зависимости от директорий с исходным кодом. Чтобы проект utils для удовлетворения своей зависимости в commons не пытался выкачать jar-файл с utils, а пошел в директорию с исходным кодом utils, которая есть у меня на компьютере, и выкачал ее. Для этого в sbt есть инструкция dependsOn. Соотв., я могу создать корневой проект root/ super-project/ utils/ commons/ в build.sbt корневого проекта я прописываю, что проект utils у меня лежит в директории utils, проект commons - в директории commons, проект super-project - в директории super-project. там же я с помощью superproject... .dependsOn(utils, commons) указываю, что super-project у меня зависит от исходников, лежащих в utils и commons, что utils ... .dependsOn(commons). Это позволяет мне не помещать информацию о моих разработческих хотелках по поводу разработки большого проекта super-project в меньшие проекты utils и commons. Позволяет даже отселить utils, commons и сам super-project в отдельные гит-сабмодули, которые не имеют между собой зависимостей на уровне исходного кода, а зависят только от собранных jar-файлов. Соотв., мой root-project в этом случае является только проектом аггрегатором, каждый из модулей можно девелопить отдельно, заботясь об обратной совместимости (конечно, возникают и проблемы у такого подхода, но речь не об этом). Речь о том, что если моему super-project нужен еще один модуль another-module, которому в свою очередь требуется util, то я для него тоже должен прописать в build.sbt корневого проекта зависимости. another-module... .dependsOn(utils, common), super-project... .dependsOn(another-module, ...) По сути - это каждый раз дублирование зависимостей, которые и так указаны в build.sbt каждого проекта в виде libraryDependencies += "utils:1+"

В gradle же нет необходимости делать так. В корневом проекте можно просто написать переопределение резолвинга зависимостей и сказать, что когда любому из сабпроектов понадобится библиотека "utils:1+", то надо просто собирать ее из исходников в директории utils.

Еще раз подчеркну, что это для того, чтобы не пушить jar-артефакты именно в процессе разработки, но при этом оставить каждый из проектов, кроме корневого девелоперского, в неведении относительно нашего хитроумного процесса разработки. Каждый из меньших проектов, собираемый сам по себе , совершенно не заботится о том, где лежат исходники требуемых библиотек. Ему нужны jar-файлы, описанные в его build.sbt в случае SBT. Все переопределения, нужные девелоперам для комфортной разработки на локальной машине, описываются только в одном месте - в корневом проекте, который в свою очередь предназначен только для разработки и не собирается в какой-либо артефакт

Viacheslav
03.09.2017
23:02:07
Именно поэтому я не стал отвечать)) слишком длинная история)

Google
Viacheslav
03.09.2017
23:03:34
https://docs.gradle.org/current/userguide/multi_project_builds.html

folex
03.09.2017
23:07:08
https://github.com/dbdahl/rscala

Oleg
04.09.2017
06:34:06
В gradle же нет необходимости делать так. В корневом проекте можно просто написать переопределение резолвинга зависимостей и сказать, что когда любому из сабпроектов понадобится библиотека "utils:1+", то надо просто собирать ее из исходников в директории utils.
Ясно. Очень интересно. Хотя, если бы у меня было много повторяющегося кода, бы просто определил функцию в sbt или где-то в project/ Но откровенно признаюсь, не сталкивался с проектами > 10 модулей

Viacheslav
04.09.2017
06:45:13
ну так чем пользуетесь, как организовали проекты?

Oleg
04.09.2017
06:49:04
у меня такой. Ощутимо больше 10.
а система сборки какая?

Alexandr
04.09.2017
06:51:59
а система сборки какая?
давай так. Я отвечаю, а ты не начинаешь критиковать? :)

Alexandr
04.09.2017
07:03:49
Мавен.

Oleg
04.09.2017
07:04:17
И как оно?

Marmalade
04.09.2017
07:17:18
Сорри, но что плохого в Maven до момента, когда нужны его специфические фичи и не нужны фичи sbt?

Kirill
04.09.2017
07:17:20
во, как раз про сборщики трут. вопрос - есть проект с плагином sbt-scoverage. Как сделать так, чтобы я мог одной командой делать clean build, собрать дистрибутив, и при этом у меня и coverage отработал? Если собирать как советуют на офф сайте - sbt clean coverage test, то при добававлении к этой команде dist в продакшен дистрибутив попадает инструментированный код.

Pavel
04.09.2017
07:31:50
мавен днище

сбт пушка

folex
04.09.2017
07:34:00
и только пушкой можно пробить днище...

Oleg
04.09.2017
07:35:20
@ScalaDev Заметь, я молчу

Grigory
04.09.2017
07:36:07
мавен для тех кому нравится хмл писать (в этом ничего плохого нет).

Alexandr
04.09.2017
07:36:14
@ScalaDev Заметь, я молчу
У нас мешанина языков, часть кода генерируемая... Мавен справляется.

Google
Alexey
04.09.2017
07:36:39
Alexandr
04.09.2017
07:36:48
Есть мысль перейти на гредле, он тоже обещал справиться. СБТ не пройдет, много java-стов

Oleg
04.09.2017
07:36:54
по-моему все четыре норм с мешаниной языков и генерацией кода

Oleg
04.09.2017
07:37:21
Но я всё ещё хочу узнать, как генерить код для pants

Alexandr
04.09.2017
07:38:13
Не знаю, у нас его нет. У нас есть зоопарк и собирается не только собственно код, но и что-то вроде ресурсных и миграционных ьандлов и черти что ещё.

Oleg
04.09.2017
07:39:30
Make)
bash

Alexandr
04.09.2017
07:42:45
bash
Надо было в первоначальное ТЗ вставить "и не ерничать" :) Мавен справляется. У него многословный xml, есть пара странностей с кэшем, но он всегда работает. В планах gradle. Make и bash, конечно, занятные опции, но не сегодня.

sbt опасаюсь.

У них случился, кстати, релиз, или все еще бета?

Nick
04.09.2017
07:44:03
Меик ? Не сегодня?))) ты че в 22 веке живёшь?)

Alexandr
04.09.2017
07:44:20
Случился. 1.0.1 с ума сойти

Kirill
04.09.2017
07:44:39
А доки к плагинам как были говёные, так и остались

Alexandr
04.09.2017
07:44:44
Меик ? Не сегодня?))) ты че в 22 веке живёшь?)
пока не знаю, сейчас до кофе доберусь, отвечу : )

Andry
04.09.2017
07:53:33
сбт пушка
Да градл тоже вполне себе пулемёт :)))

Yan?
04.09.2017
08:20:10
Добрый день, я так понимаю, что дебажить future, то есть, узнать что лежит в нем, без грязных хаков, аля map по нему, не получится?

Nick
04.09.2017
08:21:03
Точку останова поставь внутри футура

Aleksei
04.09.2017
08:21:12
мап это хак!

ХА!

Google
Nick
04.09.2017
08:21:41
мап это хак!
А ты че не знал? Нужно везде Await юзать

Nikolay
04.09.2017
08:38:59
foreach

Не такой грязный как map

Yan?
04.09.2017
08:40:50
Вот есть метод, который future возвращает

Marmalade
04.09.2017
08:41:05
Это если ДЕБАЖИТЬ future

Вот есть метод, который future возвращает
Тогда, очевидно, нужно ждать результата выполнения - map/for each/onComplete

Yan?
04.09.2017
08:42:37
Понял, спасибо

Aliaksandr
04.09.2017
08:44:58
andThen может быть полезен для всякого вида логирования

Marmalade
04.09.2017
08:46:00
Хотя, если в при дебаге сделать suspend thread основного треда, то получится ли дождаться исполнения future в дебаггере?

Да, работает



Alexander
04.09.2017
13:00:46
А может кто видел реализацию Monad Open для Скалы?

Mikhail
04.09.2017
14:02:19
https://github.com/thricejamie/sbt-meow

кажется я вызвал сатану

Viktor
04.09.2017
14:33:21
напомнило)) https://youtu.be/cpOIyGeS4H4

Alex
04.09.2017
14:55:20
у меня кстати тоже никогда не получалось эти картинки увидеть :)

Grigory
04.09.2017
15:51:48
Scalalaz #28 - с Виктором Тараненко http://scalalaz.ru/series-28.html

Google
Alex
04.09.2017
15:59:13
Юху!

Alexander
04.09.2017
16:18:55
о Виктор классный

Vadim
04.09.2017
16:49:16
Ждемс player.fm

Oleg
04.09.2017
17:22:18
Блин, я ещё с Мариной не послушал, и ещё 24 предыдущих

KrivdaTheTriewe
04.09.2017
17:27:49
Kirill
04.09.2017
17:28:40
Так, вечер, все уже не на работе, повторю вопрос: есть проект с плагином sbt-scoverage. Как сделать так, чтобы я мог одной командой делать clean build, т.е. собрать дистрибутив, и при этом у меня и coverage отработал? Если собирать как советуют на офф сайте - sbt clean coverage test, то при добававлении к этой команде dist в продакшен дистрибутив попадает инструментированный код.

Nick
04.09.2017
17:29:21
А Олег ж уже был в эфире у рп

Daniel
04.09.2017
17:30:13
пора тебе саому просвещать народ
лучше мастеркласс а не подкаст

Страница 919 из 1499