Здравствуйте, ·, Вы писали:
·>Ты врёшь. Скрипт не только это делает. Он там много что делает — скачивает не что-то одно, а несколько вещей, потом тулзы в определённом порядке вызывает.
·>Вот тут по-твоему что? https://github.com/JamesNK/Newtonsoft.Json/blob/master/Build/build.ps1#L48-L165 плюс L267-L329 Даже что-то с XML шаманят
Я тебе уже давно перечислил что он делает. То, что ты выделил — очистка рабочей папки.
Эту очистку можно было в 3 строки прописать в csproj, тут захотели отдельным скриптом вручную сделать.
Есть встроенная функция dotnet clean, но там может не всё удаляться. Папки пустые остаются, если сам какие-то ресурсы туда закинул, то останется и т.д.
У меня CI с нуля всегда собирает и очищать ничего не нужно, т.е. это не обязательная вещь.
L267 — версию сборки определяют, это тоже не обязательно делать и в каждом проекте что-то своё могут выдумывать.
Версию можно и через csproj задать, можно и при сборке аргументы прокинуть.
L284 — найдёшь где там вызывается эта функция Edit-XmlNodes ?
L310 — чисто функция чтобы долбить удаление папок из рабочей директории до победного, т.к. какие-то файлы наверно могут быть заняты и сразу не удалится.
·>Анекдот №10056243
А по делу есть что сказать?
·>Не очень понял. А для разработки на дотнете фреймворк не обязателен?
·>В случае mvnw или gradlew нужно только jdk (идёт в поставке с каждой ide для java ну или "apt install" и т.п.). Дальше всё само разворачивается. А у тебя там в скрипте куча чего скачивается и куча шагов выполняется.
Это не у меня в скрипте, а ты взял библиотеку и у меня спрашиваешь почему её разработчики так сделали.
И скрипты эти не для разработки используются, а для деплоя.
На L167 вот ставят .NET SDK
·>Нет, не нужно.
А как без CI и подготовленных скриптов локально потом собирать? Вызывать в командной строке mvn и передавать каждый раз 100500 параметров?
·>Ну там тоже что-то есть для jdk1.6, который был deprecated ещё до выхода Core. Не знаю накой всё ещё держат... наверное удалять просто лень.
В pom.xml же прописано, что собирается под 1.8 где там под 1.6?
Я вот эту фичу даже нагуглить нормально не могу, есть ссылка как это делают в Java?
Нашёл только такое:
https://www.baeldung.com/java-multi-release-jar
Выглядит как-то неудобно.
·>Если такое действительно надо, просто добавляют два pom-модуля с разными <target>.
А с кодом что делают? Ну, вот в старой версии не было асинхронной загрузки байт из файла, а в новой появилась.
Мне хочется для старого .NET использовать реализацию с синхронным чтением, а для нового пусть стильное, модное, молодёжное с Async вызывается.
ну, типа как тут:
https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/JsonReader.Async.cs
Если собирается без ключа HAVE_ASYNC, то файла в проекте считай нет. Там дальше и отдельные блоки кода включаются/выключаются.
·>Собранная либа на jdk8 будет работать и в jdk21 — это backward compatibility.
Так Newtonsoft собирается и под .NET FW 2.0 и под более современный .NET 6.0.
При этом код для них несколько разный и разный набор методов в сборку попадает, в зависимости от того, что поддерживается в соответствующем рантайме.
·>Из mvn deploy.
Зачем тогда yml для CI github есть, если весь деплой уже в mvn deploy?
·>Можно, но не обязательно. Просто из командной строки "mvn deploy -DaltDeploymentRepository=myCoolRepo..." ну или просто поставить через "mvn install" себе локально, для экспериментов, например.
И это всё каждый раз конечно ручками будет прописываться, а не будут написаны скрипты или не отредактирован уже файл?
·>Поскандалить изволите или так, от чистого сердца? Секреты и пароли, ясен пень надо предъявлять отдельно. На то они и токены-пароли.
Куда отдельно? Какое отдельно? У нас же уже есть деплой и ничего больше не надо.
·>Нет. Как видно по исходникам — не нужно.
т.е. сборка будет выполняться ручками? Каждый раз будут набиваться команды типа mvn clean для очистки рабочей папки, потом вот эти простыни для проброса токенов, репозиториев,...?
·>Молодцы в Майкрософте. Промыть мозги, что б не дай бог, чего б лишнего не захотели. Главное юзеров в узде держать, EEE. Иначе деньги не за что грести будет.
Причём тут Майкрософт? Ты мне тут рассказываешь как в mvn всё хорошо и работает. Только внезапно оказалось, что деплоймент у меня не запускается.
То надо самому для сборки JDK поставить и JAVA_HOME прописать, то ещё чего не так. Где обещанный готовый деплоймент, что ничего не надо у себя разворачивать?
·>Ты должен будешь разместить где-то в этом своём интранете требуемые бинарники. Обычно просто прокси-зеркало делают. Примерно как если ты захочешь в интранете иметь публичные nuget-либы.
И зачем мне этот скрипт с непонятным jar, если я и так сам должен что-то куда-то класть?
Так я лучше соберу docker со всем необходимым и буду его из CI дёргать без всех этих скриптов
·>Какой одной командой запустить весь цикл до деплоя? Компиляция, тесты, сборка, верификация, документация, локальная инсталляция?
Ну, при желании ты в csproj чего угодно можешь прописать. А в реальности оно всё зачем надо?
По рукам бьют, если вызывать больше одной команды?
Или чтобы потом вызывать сборку с ключом maven.test.skip=true ?
А интеграционные и нагрузочные тесты тоже в этой единственной волшебной команде постоянно гоняются?
·>Потому что это описание джобы конкретного CI-сервера.
И откуда-то там 1.6 версия появилась, хотя в pom.xml прописана 1.8.
А как я узнаю из единственной команды, что мои изменения приведут к тому, что под 1.6 больше не собирается?
Ну, вот я у себя при помощи pom.xml делаю локальную сборку, всё собирается, работает, тесты проходят.
А потом джоба для 1.6 точно не упадёт?
·>Из кода там ровно одна строка. На других серверах/локально будешь просто запускать ту же строку передавая информацию о своей конкретной инфраструктуре.
Из кода там 3 файла на пару сотен строк. Под другую инфраструктуру все эти строки нужно будет переписывать или как минимум перепроверять.
Внезапно то же самое, что и в случае с аналогичными файлами библиотек .NET
·>Эээ. Ну да, а что? Ок, не 3 строчки на всё, но по 3 строчки на контейнер — да. integration-test and verify phases.
Охотно верю.

На каждую компиляцию надеюсь будешь все контейнеры у себя поднимать и прогонять тесты?
Ну, и конечно docker локально сам поднимется, ведь там будет специальный плагин для maven?
·>Т.к. в pom.xml нет паролей и приватных ключей, то будем писать километровые батники, чтобы тесты запустить.
·>Ты правда не понимаешь что такое подпись? Что ты тупо не имеешь права подписывать?
Я то понимаю, это ты мне тут рассказываешь что в pom.xml есть всё готовое и работает везде, а вот эти скрипты для .NET пишут от плохой жизни и они не нужны.
·>Если ты хочешь подеплоить у себя дома для своих друзей, то ты должен использовать свой личный приватный ключ. А если у тебя есть ключ, то тебя должен быть и gpg. Ну или можешь скипнуть шаг подписи "mvn deploy -Dgpg.skip".
[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.3:deploy (injected-nexus-deploy) on project json: Execution injected-nexus-deploy of goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.3:deploy failed: Server credentials with ID "ossrh" not found! -> [Help 1]
Вот так новость
А если ещё раз вызвать, то:
[ERROR] Failed to execute goal org.moditect:moditect-maven-plugin:1.0.0.Final:add-module-info (add-module-infos) on project json: Execution add-module-infos of goal org.moditect:moditect-maven-plugin:1.0.0.Final:add-module-info failed: File F:\User\Downloads\JSON-java-master\target\modules\json-20231013.jar already exists; either set 'overwriteExistingFiles' to true or specify another output directory -> [Help 1]
т.е. оно не умеет очищать само рабочую папку и от этого ломается деплой.
Могли бы хотя бы на powershell скрипт написать, чтобы такого не происходило.
Ты обещал, что в pom.xml есть готовый деплой и всё работает из коробки.
Я попробовал, у меня не работает (я не удивлён, если что).
Где обещанное?
·>Я тебе ссылку на доку давал. Может ты поанглиццки читать не умеешь?
На доку про то почему gradlew.bat короче, чем gradlew? Не помню такого.
·>Дядя Петя?
Так ты тут по строкам кода определяешь крутость.
Почему нельзя аналогичное сравнение тут провести?
·>А у них есть выбор не делать? Вот ты такой неидиот — закинь им PR, удали им ту папочку и объясни им как это всё сделать кликнув пару тикбоксов в Студии.
Мне оно зачем надо? Я этим твоим AWS не пользовался и не собираюсь.
Я понятия не имею зачем они что-то якобы нужное назвали Dummy и Sample и при этом не написали комментариев.
·>И где это взять готовое и засунуть в мой новый проект? Да ещё и докер локально ставить-настраивать?!
Это ты рассказываешь про готовое и что ничего ставить не надо, на деле правда так не работает.
Зависит от проекта и выбранного подхода к деплою.
Зачем локально докер ставить, если за деплой отвечает какая-нибудь CI?
·>Почему этот небольшой yml ещё никто не написал и не выложил публично?
Потому что никому не нужно. Ну, вот gradle сами поставить не в состоянии и таскаете один и тот же скрипт по компам.
Деплой у всех разный и никто не переживает, что целую команду нужно самому написать, а не скопировать.
·>Чтобы что?
Чтобы проект, который разворачивается локально, на тестовом окружении или в продакшене, был один и тот же,
а не вот это, что тут мы для теста перегрузим значение, там репозиторий переназначим, а тут забудем и копипасте и что-то пойдёт не по плану.
·>Между сборкой и деплоем ты пропустил ещё несколько шагов.
Расскажешь почему это разные шаги, а не один шаг и почему вдруг их все нужно выполнять одной командой?
·>Не знаю, чтоб всё как ты любишь.
т.е. всё же в pom.xml всё прибито гвоздями к инфраструктуре?