Управление зависимостями в IntelliJ IDEA
В этом руководстве, в продолжение темы просмотра зависимостей, мы рассмотрим управление зависимостями в IntelliJ IDEA.
Мы рассмотрим различные способы добавления зависимостей в ваш проект, а также способы добавления, обновления и удаления зависимостей с помощью Package Search.
https://habr.com/ru/post/710802/
👉@BookJava
В этом руководстве, в продолжение темы просмотра зависимостей, мы рассмотрим управление зависимостями в IntelliJ IDEA.
Мы рассмотрим различные способы добавления зависимостей в ваш проект, а также способы добавления, обновления и удаления зависимостей с помощью Package Search.
https://habr.com/ru/post/710802/
👉@BookJava
👍3
Перестаём бояться генерировать байт-код
Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. На самом деле, я считаю такую точку зрения ошибочной. JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти. В отличие от CPU, который легко уронить криво сгенерированным машинным кодом, JVM заботливо отверифицирует любой байт-код и в общем не даст выстрелить в ногу.
Но с чего начать погружение в байт-кодную магию? В сети есть некоторое количество туториалов по этому вопросу. Как мне кажется, они либо показывают слишком простые случаи, от которых непонятно, как перейти к чему-то более интересному, либо очень основательные и требуют вникать в теорию, собирать целиком картину в голове по кусочкам. Я хотел бы попробовать внести свой вклад в эту тему — надеюсь, у меня получится показать, как можно побороть первый страх и написать что-то похожее на реалистичный сценарий без особого вникания в теорию на первом этапе.
Весь приведённый код доступен в моём репозитории.
https://habr.com/ru/articles/759990/
👉@BookJava
Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. На самом деле, я считаю такую точку зрения ошибочной. JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти. В отличие от CPU, который легко уронить криво сгенерированным машинным кодом, JVM заботливо отверифицирует любой байт-код и в общем не даст выстрелить в ногу.
Но с чего начать погружение в байт-кодную магию? В сети есть некоторое количество туториалов по этому вопросу. Как мне кажется, они либо показывают слишком простые случаи, от которых непонятно, как перейти к чему-то более интересному, либо очень основательные и требуют вникать в теорию, собирать целиком картину в голове по кусочкам. Я хотел бы попробовать внести свой вклад в эту тему — надеюсь, у меня получится показать, как можно побороть первый страх и написать что-то похожее на реалистичный сценарий без особого вникания в теорию на первом этапе.
Весь приведённый код доступен в моём репозитории.
https://habr.com/ru/articles/759990/
👉@BookJava
👍2
Лямбды — гибкие и анонимные фрагменты кода
Лямбды в Java полезны во многих направлениях. Лямбда-выражения можно использовать для более простых задач, а лямбда-утверждения — для более сложных. Лямбды могут вызывать другие методы для текущего объекта (this) и объектов, которые находятся в области видимости, таких как текущий элемент итерации и конечная локальная переменная за пределами лямбды. Лямбду всегда можно упростить, поместив код в другой метод.
Написание хороших лямбд требует дисциплины. Например, важно называть параметры понятным образом — так, чтобы названия раскрывали их назначение. Вот простой пример лямбды для фильтрации списка строк:
https://medium.com/javarevisited/the-elusive-and-beautiful-java-method-reference-97e566d2088b
👉@BookJava
Лямбды в Java полезны во многих направлениях. Лямбда-выражения можно использовать для более простых задач, а лямбда-утверждения — для более сложных. Лямбды могут вызывать другие методы для текущего объекта (this) и объектов, которые находятся в области видимости, таких как текущий элемент итерации и конечная локальная переменная за пределами лямбды. Лямбду всегда можно упростить, поместив код в другой метод.
Написание хороших лямбд требует дисциплины. Например, важно называть параметры понятным образом — так, чтобы названия раскрывали их назначение. Вот простой пример лямбды для фильтрации списка строк:
@Test
public void filterStringsLambda()
{
var list = Lists.mutable.with(
"Atlanta",
"Atlantic City",
"Boston",
"Boca Raton");
var actual = list.stream()
.filter(string -> string.startsWith("At"))
.collect(Collectors.toList());
var expected = List.of("Atlanta", "Atlantic City");
Assertions.assertEquals(expected, actual);
}
https://medium.com/javarevisited/the-elusive-and-beautiful-java-method-reference-97e566d2088b
👉@BookJava
👍4
Что такое phase, goal и lifecycle в Maven?
Phase – виртуальные шаги из, которых состоит lifecycle в Maven. Вообще, существует три жизненных цикла:
• Clean – фазы pre-clean, clean, post-clean;
• Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
• Site – pre-site, site, post-site, site-deploy.
Goal – это конкретное выполняемое плагином действие. Плагин привязывает свои голы к фазам. Например, когда мы вызываем
Когда аргументом команды mvn передается фаза, кроме нее самой выполнятся все предшествующие ей в том же лайфсайкле. Вместо фазы возможно явно передать цель (
Фазы всегда выполняются в том порядке, в котором они следуют в жизненном цикле. Если к одной фазе привязано несколько целей, они отработают в порядке объявления в pom.xml.
Некоторые плагины могут предоставлять цели, не привязанные ни к каким фазам. Их можно вызвать только явно.
Если в команду mvn передается несколько фаз/целей, они выполнятся последовательно. Каждая цель в процессе выполняется только однажды.
Так, вызов
👉@BookJava
Phase – виртуальные шаги из, которых состоит lifecycle в Maven. Вообще, существует три жизненных цикла:
• Clean – фазы pre-clean, clean, post-clean;
• Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
• Site – pre-site, site, post-site, site-deploy.
Goal – это конкретное выполняемое плагином действие. Плагин привязывает свои голы к фазам. Например, когда мы вызываем
mvn clean
, работу по удалению файлов сборки делает не сама фаза clean, а привязанная к ней цель clean:clean из встроенного maven-clean-plugin
.Когда аргументом команды mvn передается фаза, кроме нее самой выполнятся все предшествующие ей в том же лайфсайкле. Вместо фазы возможно явно передать цель (
mvn clean:clean
вместо mvn clean
), но тогда никакие другие цели вызваны не будут (в данном примере цели фазы pre-clean
).Фазы всегда выполняются в том порядке, в котором они следуют в жизненном цикле. Если к одной фазе привязано несколько целей, они отработают в порядке объявления в pom.xml.
Некоторые плагины могут предоставлять цели, не привязанные ни к каким фазам. Их можно вызвать только явно.
Если в команду mvn передается несколько фаз/целей, они выполнятся последовательно. Каждая цель в процессе выполняется только однажды.
Так, вызов
mvn test package
– то же самое что mvn package, потому что в первом случае все цели из фазы test
(и предыдущих) уже будут исполнены и пропущены в package. mvn clean install
так заменить не получится, потому что это фазы из разных жизненных циклов.👉@BookJava
👍3
Изучение основ Spring для начинающих - полный курс
Module 1: Course Overview
Module 2: Set up the development Environment
Module 3: Spring Core Introduction
Module 4: XML Based configuration
Module 5: Autowiring
Module 6: Java Configuration
Module 7: Spring Beans in Depth
Module 8: Spring Aspect Oriented Programming
Module 9: Spring Task Executor
Module 10: Communication between Beans - ApplicationEvent Management
Module 11: Conclusion
https://www.youtube.com/watch?v=DrMmHTHTcCo
👉@BookJava
Module 1: Course Overview
Module 2: Set up the development Environment
Module 3: Spring Core Introduction
Module 4: XML Based configuration
Module 5: Autowiring
Module 6: Java Configuration
Module 7: Spring Beans in Depth
Module 8: Spring Aspect Oriented Programming
Module 9: Spring Task Executor
Module 10: Communication between Beans - ApplicationEvent Management
Module 11: Conclusion
https://www.youtube.com/watch?v=DrMmHTHTcCo
👉@BookJava
YouTube
Learn Spring Fundamentals for Beginners - Full Course
Learn about Spring Fundamentals in this full course for beginners. You'll learn: Core Concepts, Dependency Injection, Bean Configuration, Autowiring, AOP, SpEL, and more
Build a Microservices Architecture with Spring Boot and Spring Cloud
☞ https://morio…
Build a Microservices Architecture with Spring Boot and Spring Cloud
☞ https://morio…
👍3
Чем IllegalArgumentException лучше чем NullPointerException?
Phase – виртуальные шаги из, которых состоит lifecycle в Maven. Вообще, существует три жизненных цикла:
• Clean – фазы pre-clean, clean, post-clean;
• Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
• Site – pre-site, site, post-site, site-deploy.
Goal – это конкретное выполняемое плагином действие. Плагин привязывает свои голы к фазам. Например, когда мы вызываем
Когда аргументом команды
Фазы всегда выполняются в том порядке, в котором они следуют в жизненном цикле. Если к одной фазе привязано несколько целей, они отработают в порядке объявления в pom.xml.
Некоторые плагины могут предоставлять цели, не привязанные ни к каким фазам. Их можно вызвать только явно.
Если в команду
Так, вызов
👉@BookJava
Phase – виртуальные шаги из, которых состоит lifecycle в Maven. Вообще, существует три жизненных цикла:
• Clean – фазы pre-clean, clean, post-clean;
• Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
• Site – pre-site, site, post-site, site-deploy.
Goal – это конкретное выполняемое плагином действие. Плагин привязывает свои голы к фазам. Например, когда мы вызываем
mvn clean
, работу по удалению файлов сборки делает не сама фаза clean
, а привязанная к ней цель clean:clean
из встроенного maven-clean-plugin
.Когда аргументом команды
mvn
передается фаза, кроме нее самой выполнятся все предшествующие ей в том же лайфсайкле. Вместо фазы возможно явно передать цель (mvn clean:clean
вместо mvn clean
), но тогда никакие другие цели вызваны не будут (в данном примере цели фазы pre-clean
).Фазы всегда выполняются в том порядке, в котором они следуют в жизненном цикле. Если к одной фазе привязано несколько целей, они отработают в порядке объявления в pom.xml.
Некоторые плагины могут предоставлять цели, не привязанные ни к каким фазам. Их можно вызвать только явно.
Если в команду
mvn
передается несколько фаз/целей, они выполнятся последовательно. Каждая цель в процессе выполняется только однажды.Так, вызов
mvn test package
– то же самое что mvn package
, потому что в первом случае все цели из фазы test (и предыдущих) уже будут исполнены и пропущены в package. mvn clean instal
l так заменить не получится, потому что это фазы из разных жизненных циклов.👉@BookJava
😁7❤2👍1
Удобная подсветка покрытия кода тестами в Merge Request GitLab
Основным средством для командной работы с репозиторием компании, в которой я работаю, является Gitlab. На первый взгляд, он хорош: и бесплатной версии хватает сполна, и CI/CD - пайплайн имеется, и хранить артефакты тоже можно (долой Nexus). Однако, и у GitLab есть свои минусы.
Так, например, разработчики до сих пор не смогли реализовать визуализацию покрытия тестов. Да, она у них есть, но для её реализации нужно сгенерировать и загрузить в GitLab отчет о покрытии в устаревшем формате Cobertura, а не в актуальном Jacoco. Основная же проблема в том, что Cobertura plugin последний раз обновлялся в далеком 2015 году.
https://habr.com/ru/articles/758066/
👉@BookJava
Основным средством для командной работы с репозиторием компании, в которой я работаю, является Gitlab. На первый взгляд, он хорош: и бесплатной версии хватает сполна, и CI/CD - пайплайн имеется, и хранить артефакты тоже можно (долой Nexus). Однако, и у GitLab есть свои минусы.
Так, например, разработчики до сих пор не смогли реализовать визуализацию покрытия тестов. Да, она у них есть, но для её реализации нужно сгенерировать и загрузить в GitLab отчет о покрытии в устаревшем формате Cobertura, а не в актуальном Jacoco. Основная же проблема в том, что Cobertura plugin последний раз обновлялся в далеком 2015 году.
https://habr.com/ru/articles/758066/
👉@BookJava
👍2
JavaDoc: добро или необходимое зло?
Привет! Меня зовут Андрей Костров, я старший разработчик в X5 Tech.
При создании проекта А мы вложили много сил в JavaDoc. Многим казалось это излишним. Затем проект А заморозили и начали новый – проект Б. При этом переиспользовали много кода из проекта А, вместе с JavaDoc. Рассказ о том, принёс ли JavaDoc пользу (спойлер: да). А также немного слов о том, где усилия по JavaDoc всё-таки были избыточны.
https://habr.com/ru/companies/X5Tech/articles/752338/
👉@BookJava
Привет! Меня зовут Андрей Костров, я старший разработчик в X5 Tech.
При создании проекта А мы вложили много сил в JavaDoc. Многим казалось это излишним. Затем проект А заморозили и начали новый – проект Б. При этом переиспользовали много кода из проекта А, вместе с JavaDoc. Рассказ о том, принёс ли JavaDoc пользу (спойлер: да). А также немного слов о том, где усилия по JavaDoc всё-таки были избыточны.
https://habr.com/ru/companies/X5Tech/articles/752338/
👉@BookJava
👍3
Forwarded from Книги по Java | Books Java 📚
12992683-dzone-refcard318-java13.pdf
1 MB
Подборка шпаргалок по Java
Основы синтаксиса;
Особенности Java;
Горячие клавиши в IntelliJ IDEA;
Лаконичное руководство по основам языка.
👉 @java_360
Основы синтаксиса;
Особенности Java;
Горячие клавиши в IntelliJ IDEA;
Лаконичное руководство по основам языка.
👉 @java_360
👍7
Media is too big
VIEW IN TELEGRAM
Вопросы с senior java интервью
Тайм-коды:
0:00 - Вступление
0:25 - Эти вопросы реально спрашивают
0:52 - Как устроен ролик
1:53 - Примитивы и доступ по значению (доступ всегда по значению)
3:53 - Пример с Boolean, который был несколько раз
4:58 - Хэш мапа и equals
6:00 - Как сломать мапу мутабельным ключом
7:30 - Плохое распределение хэшей
11:36 - Фреймворк коллекций (Collection framework)
12:30 - Устройство листов, почему linkedlist не используют в проде
13:50 - Иерархия исключений
14:48 - Optional и хитрости работы с ними
16:50 - Thread-local и то как его использовать
17:50 - Наследуемый Thread-local
19:20 - Стримы и примитивные стримы
22:25 - Хитрости try-catch-finally
23:38 - Try-with resource, Autoclosable
25:15 - Conditionalы, как создать свой стартер, логика конфигураций
28:05 - Жизненный цикл бинов, логика создания объектов
30:14 - Докер и зачем он нужен
источник
👉@BookJava
Тайм-коды:
0:00 - Вступление
0:25 - Эти вопросы реально спрашивают
0:52 - Как устроен ролик
1:53 - Примитивы и доступ по значению (доступ всегда по значению)
3:53 - Пример с Boolean, который был несколько раз
4:58 - Хэш мапа и equals
6:00 - Как сломать мапу мутабельным ключом
7:30 - Плохое распределение хэшей
11:36 - Фреймворк коллекций (Collection framework)
12:30 - Устройство листов, почему linkedlist не используют в проде
13:50 - Иерархия исключений
14:48 - Optional и хитрости работы с ними
16:50 - Thread-local и то как его использовать
17:50 - Наследуемый Thread-local
19:20 - Стримы и примитивные стримы
22:25 - Хитрости try-catch-finally
23:38 - Try-with resource, Autoclosable
25:15 - Conditionalы, как создать свой стартер, логика конфигураций
28:05 - Жизненный цикл бинов, логика создания объектов
30:14 - Докер и зачем он нужен
источник
👉@BookJava
👍5🤔2❤1👎1
TestNG или JUnit – что выбрать?
Ответ на такого рода вопросы всегда зависит от дополнительных деталей контекста. Не просто так TestNG и JUnit – два самых популярных фреймворка для unit-тестирования, у каждого есть свои плюсы.
JUnit – золотой стандарт. Это библиотека из семейства xUnit, которое во многом сформировало unit-тестирование таким, каким мы знаем его сегодня. И до сих пор, оставаясь самой популярной библиотекой для тестирования, она продолжает активно развиваться.
Фреймворк TestNG был вдохновлен JUnit, но добавляет небольшой набор дополнительных фич. Некоторые из указанных на сайте возможностей на самом деле доступны и в JUnit: например data-driven тесты, или параллельное выполнение. Подробное сравнение JUnit 4 и TestNG доступно в статье от mkyong.
Стоит отметить, что современный JUnit 5 имеет достаточно заметные отличия от JUnit 4, их можно рассматривать как разные фреймворки. Подробнее об отличиях читайте на хабре.
👉@BookJava
Ответ на такого рода вопросы всегда зависит от дополнительных деталей контекста. Не просто так TestNG и JUnit – два самых популярных фреймворка для unit-тестирования, у каждого есть свои плюсы.
JUnit – золотой стандарт. Это библиотека из семейства xUnit, которое во многом сформировало unit-тестирование таким, каким мы знаем его сегодня. И до сих пор, оставаясь самой популярной библиотекой для тестирования, она продолжает активно развиваться.
Фреймворк TestNG был вдохновлен JUnit, но добавляет небольшой набор дополнительных фич. Некоторые из указанных на сайте возможностей на самом деле доступны и в JUnit: например data-driven тесты, или параллельное выполнение. Подробное сравнение JUnit 4 и TestNG доступно в статье от mkyong.
Стоит отметить, что современный JUnit 5 имеет достаточно заметные отличия от JUnit 4, их можно рассматривать как разные фреймворки. Подробнее об отличиях читайте на хабре.
👉@BookJava
👍3
Как работает jvm - Архитектура JVM
Развитие виртуальных технологий привело к созданию jvm. JVM решает проблему переносимости скомпилированного кода между системами, возникшую по сравнению с предыдущими языками программирования, такими как c/c++. JDK преобразует программный код в байткод, что обеспечивает переносимость и независимый запуск независимо от операционной системы.
https://awstip.com/how-jvm-works-jvm-architecture-4f5b15946e6d
👉@BookJava
Развитие виртуальных технологий привело к созданию jvm. JVM решает проблему переносимости скомпилированного кода между системами, возникшую по сравнению с предыдущими языками программирования, такими как c/c++. JDK преобразует программный код в байткод, что обеспечивает переносимость и независимый запуск независимо от операционной системы.
https://awstip.com/how-jvm-works-jvm-architecture-4f5b15946e6d
👉@BookJava
👍4
Исчерпывающее руководство по одномерным массивам в Java
Для хранения данных, используемых при работе программы, применяются переменные того или иного типа. Например, если требуется сохранить имя игрока, то создается переменная String name, если целочисленное значение, то int number и т. д. Когда таких значений немного или их количество заранее известно, то для них приемлемо использовать отдельные переменные.
Но что делать, когда в программе задействовано не одно, а 10 чисел, или их количество становится известно только на этапе запуска приложения, когда пользователь вводит его с клавиатуры? Или в какой-то игре может участвовать разное количество игроков, устанавливаемое при ее старте. В таких ситуациях отдельными переменными уже не обойтись, т. к. их точное количество будет невозможно определить. Да и, если все же попытаться это сделать, код станет громоздким и не универсальным, а работа с ним будет крайне ограниченной из-за невозможности использования цикла для автоматизированной обработки данных.
https://habr.com/ru/articles/753638/
👉@BookJava
Для хранения данных, используемых при работе программы, применяются переменные того или иного типа. Например, если требуется сохранить имя игрока, то создается переменная String name, если целочисленное значение, то int number и т. д. Когда таких значений немного или их количество заранее известно, то для них приемлемо использовать отдельные переменные.
Но что делать, когда в программе задействовано не одно, а 10 чисел, или их количество становится известно только на этапе запуска приложения, когда пользователь вводит его с клавиатуры? Или в какой-то игре может участвовать разное количество игроков, устанавливаемое при ее старте. В таких ситуациях отдельными переменными уже не обойтись, т. к. их точное количество будет невозможно определить. Да и, если все же попытаться это сделать, код станет громоздким и не универсальным, а работа с ним будет крайне ограниченной из-за невозможности использования цикла для автоматизированной обработки данных.
https://habr.com/ru/articles/753638/
👉@BookJava
👍2
Mastering the Main Thread in Java
Язык Java, известный своими мощными возможностями многопоточности, основан на концепции потоков, выполняющихся параллельно. В основе каждого Java-приложения лежит главный поток. Этот поток организует точку входа в программу, инициирует другие потоки и управляет жизненным циклом приложения. В этом учебном пособии по программированию мы погрузимся в мир главного потока, рассмотрим его роль, нюансы и лучшие практики оптимального управления потоками.
https://www.developer.com/java/java-main-thread/
👉@BookJava
Язык Java, известный своими мощными возможностями многопоточности, основан на концепции потоков, выполняющихся параллельно. В основе каждого Java-приложения лежит главный поток. Этот поток организует точку входа в программу, инициирует другие потоки и управляет жизненным циклом приложения. В этом учебном пособии по программированию мы погрузимся в мир главного потока, рассмотрим его роль, нюансы и лучшие практики оптимального управления потоками.
https://www.developer.com/java/java-main-thread/
👉@BookJava
👍5
Реквием по «Расскажи, как работает HashMap?»
За долгие годы коммерческого опыта я прошел огромное количество технических собеседований, посвященных Java и друзьям. Менялись интервьюеры и язык повествования, глубина вопросов и количество собеседований, но что‑то оставалось неизменным —
«разогревочный» вопрос «расскажи, как работает HashMap?»
Давайте разберемся, почему это не только бесполезный, но и вредный вопрос, который противопоказано задавать в большинстве собеседований на позицию Java-разработчика.
https://habr.com/ru/articles/757510/
👉@BookJava
За долгие годы коммерческого опыта я прошел огромное количество технических собеседований, посвященных Java и друзьям. Менялись интервьюеры и язык повествования, глубина вопросов и количество собеседований, но что‑то оставалось неизменным —
«разогревочный» вопрос «расскажи, как работает HashMap?»
Давайте разберемся, почему это не только бесполезный, но и вредный вопрос, который противопоказано задавать в большинстве собеседований на позицию Java-разработчика.
https://habr.com/ru/articles/757510/
👉@BookJava
👍6
Media is too big
VIEW IN TELEGRAM
Разрешаем фронту подписаться на бэкенд. Server Sent Events на Java Spring Boot.
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉@BookJava
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉@BookJava
👍5
Разработка децентрализованных приложений на Spring Boot: инструменты Web3 Tech
Привет! Меня зовут Даниил, я разработчик в Web3 Tech. Недавно в JVM-инструментарии для нашей основной платформы «Конфидент» состоялся новый релиз, в который вошли библиотеки клиента для взаимодействия с нодой и Spring Boot стартеры. Далее в посте я расскажу об этих библиотеках, которые помогут вам комфортно и эффективно создавать на JVM-языках программирования полноценные приложения, взаимодействующие со смарт-контрактами нашей платформы.
https://habr.com/ru/companies/web3_tech/articles/768310/
👉@BookJava
Привет! Меня зовут Даниил, я разработчик в Web3 Tech. Недавно в JVM-инструментарии для нашей основной платформы «Конфидент» состоялся новый релиз, в который вошли библиотеки клиента для взаимодействия с нодой и Spring Boot стартеры. Далее в посте я расскажу об этих библиотеках, которые помогут вам комфортно и эффективно создавать на JVM-языках программирования полноценные приложения, взаимодействующие со смарт-контрактами нашей платформы.
https://habr.com/ru/companies/web3_tech/articles/768310/
👉@BookJava
❤1👍1