Java for Beginner
698 subscribers
609 photos
166 videos
12 files
948 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Установка Maven на Linux

Требования
JDK: Установленный JDK (версия 8 или выше).
Интернет: Для загрузки Maven.
Терминал: Доступ к командной строке.



Шаги установки

Проверка JDK:
Выполните:
java -version


Вывод должен показать версию Java. Если JDK отсутствует, установите, например, OpenJDK:
sudo apt update
sudo apt install openjdk-11-jdk # Ubuntu/Debian
sudo dnf install java-11-openjdk-devel # Fedora


Скачивание Maven:
Перейдите на сайт Apache Maven.

Скачайте архив, например, apache-maven-3.9.9-bin.tar.gz:
wget https://downloads.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz


Распакуйте в /opt:
sudo tar -xzvf apache-maven-3.9.9-bin.tar.gz -C /opt


Настройка переменных окружения:
Откройте файл /etc/environment или ~/.bashrc:
nano ~/.bashrc


Добавьте строки:
export M2_HOME=/opt/apache-maven-3.9.9
export PATH=$M2_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # Путь к JDK


Примените изменения:
source ~/.bashrc


Проверка установки:
Выполните:
mvn -version


Вывод:

Apache Maven 3.9.9
Maven home: /opt/apache-maven-3.9.9
Java version: 11.0.16, vendor: Ubuntu


Настройка локального репозитория:
По умолчанию используется ~/.m2/repository.

Опционально настройте ~/.m2/settings.xml для кастомного пути или зеркал:
<settings>
<localRepository>/custom/m2/repository</localRepository>
</settings>

В памяти: На Linux Maven запускается через скрипт mvn, который вызывает JVM. Процесс аналогичен Windows: Maven Core, плагины и зависимости загружаются в память. Локальный репозиторий кэширует артефакты, снижая сетевую нагрузку.


Нюансы:
Убедитесь, что JAVA_HOME указывает на правильный JDK.
Для системного доступа установите Maven в /opt и настройте права: sudo chown -R
$USER /opt/apache-maven-3.9.9.
Используйте mvnw для согласованности версий в проектах.


#Java #middle #Maven #Maven_install
👍3
Введение в Java


Что такое Java?

Java — это высокоуровневый, объектно-ориентированный язык программирования, созданный компанией Sun Microsystems (ныне принадлежит Oracle) в 1995 году. Главная идея Java — "Write Once, Run Anywhere" (Напиши один раз, запускай везде). Это значит, что программа, написанная на Java, может работать на любом устройстве или операционной системе, где есть подходящая среда выполнения.

Java используется повсеместно: от веб-приложений и мобильных приложений (например, Android) до серверных систем, больших корпоративных проектов и даже встраиваемых устройств, таких как "умные" телевизоры или IoT-устройства.

Её популярность обусловлена несколькими факторами:
Кроссплатформенность: Работает на Windows, macOS, Linux и других системах.
Надежность:
Java имеет строгую типизацию и встроенные механизмы обработки ошибок.
Большое сообщество: Огромное количество библиотек, фреймворков и документации.
Широкая применимость: От небольших скриптов до сложных распределенных систем.



Кроссплатформенность Java

Кроссплатформенность — это способность программы работать на разных операционных системах без необходимости переписывать код. В отличие от языков, таких как C или C++, где код компилируется в машинный код, специфичный для конкретной платформы (например, процессора или ОС), Java использует другой подход.

Когда вы пишете программу на Java, ваш код компилируется не в машинный код, а в байт-код. Это промежуточное представление программы, которое одинаково для всех платформ. Байт-код создается компилятором Java (javac) и сохраняется в файлах с расширением .class. Но сам по себе байт-код не может выполняться напрямую на вашем компьютере. Здесь на сцену выходит JVM — виртуальная машина Java.

JVM (
Java Virtual Machine) интерпретирует или компилирует байт-код в машинный код, который может быть выполнен на конкретной аппаратной платформе. Например, JVM для Windows преобразует байт-код в инструкции, понятные процессорам на Windows, а JVM для Linux делает то же самое для Linux. Таким образом, вам не нужно писать разные версии программы для каждой операционной системы — достаточно написать код один раз, а JVM позаботится об остальном.

Но чтобы запустить Java-программу, вам нужно больше, чем просто JVM. Здесь появляются JRE и JDK.


JVM: Сердце Java

JVM (Java Virtual Machine) — это виртуальная машина, которая исполняет байт-код Java-программ. Она является ключевым компонентом, обеспечивающим кроссплатформенность.

JVM выполняет несколько важных функций:
Интерпретация и JIT-компиляция: JVM может интерпретировать байт-код построчно или использовать JIT-компилятор (Just-In-Time), чтобы преобразовать байт-код в машинный код для повышения производительности.
Управление памятью: JVM включает сборщик мусора (Garbage Collector), который автоматически освобождает память, занятую объектами, которые больше не используются.
Безопасность: JVM предоставляет песочницу (sandbox), которая ограничивает доступ программ к системным ресурсам, что делает
Java-программы безопасными.

JVM — это, по сути, "переводчик" между вашим байт-кодом и конкретной аппаратной платформой. Без JVM Java-программа не сможет работать.

#Java #для_новичков #beginner
👍3
JRE: Среда выполнения

JRE (Java Runtime Environment) — это среда выполнения Java, которая включает в себя всё необходимое для запуска Java-программ.

JRE состоит из:
JVM: Виртуальная машина, о которой мы только что говорили.
Библиотеки
Java: Стандартные классы и API (например, для работы с файлами, сетью, графикой).
Дополнительные компоненты: Например, средства для загрузки классов и управления безопасностью.


Если вы хотите просто запускать Java-программы (например, запустить готовое приложение, такое как IDE или сервер), вам достаточно установить JRE. Однако JRE не включает инструменты для разработки — для этого нужен JDK.


JDK: Набор для разработки

JDK (Java Development Kit) — это комплект инструментов для разработки Java-программ.

JDK включает в себя всё, что есть в JRE, плюс дополнительные утилиты для программистов:

Компилятор (javac): Преобразует исходный код на Java в байт-код.
Отладчик (jdb): Помогает находить и исправлять ошибки в коде.
Инструменты для создания документации (javadoc): Генерирует документацию из комментариев в коде.

Другие утилиты: Например, jar для создания архивов Java.

JDK — это то, что вам нужно установить, если вы хотите писать и компилировать свои Java-программы. Без JDK вы не сможете превратить ваш код (файлы с расширением .java) в исполняемый байт-код.


Как всё это связано?

Давайте разберем процесс работы Java-программы:
Вы пишете код на Java в файле с расширением .java (например, HelloWorld.java).
С помощью компилятора из JDK (javac) ваш код компилируется в байт-код (файл .class).
Байт-код передается в JVM, которая является частью JRE.
JVM интерпретирует или компилирует байт-код в машинный код, который выполняется на вашей системе.


Вот простая схема:
Исходный код (.java) → Компилятор (javac, часть JDK) → Байт-код (.class) → JVM (часть JRE) → Выполнение на устройстве


Зачем это новичку?

Понимание JVM, JRE и JDK важно, чтобы вы могли правильно настроить свою рабочую среду и понимать, как работает ваша программа.

Вот несколько практических советов:
Установите JDK: Если вы начинаете учить Java, скачайте и установите JDK с официального сайта Oracle или используйте OpenJDK (бесплатная альтернатива). JRE уже будет включена в JDK.
Проверьте версию: Убедитесь, что вы используете актуальную версию
Java (на момент 2025 года это, например, Java 17 или новее). Команда java -version в терминале покажет, какая версия JRE установлена, а javac -version — версия JDK.
Настройте IDE: Для удобной разработки используйте среды, такие как IntelliJ IDEA, Eclipse или VS Code с плагинами для
Java.

#Java #для_новичков #beginner
👍5
Введение в Gradle и концептуальная архитектура

Что такое Gradle? Эволюция от Ant и Maven

Gradle — это инструмент автоматизации сборки с открытым исходным кодом, предназначенный для управления проектами на Java, Kotlin, Scala, C++ и других языках. Он сочетает декларативный подход Maven с гибкостью Ant, используя Groovy или Kotlin для описания сборки. Gradle был создан в 2007 году Хансом Доктером и Адамом Мердоком и с тех пор стал стандартом для многих современных проектов, включая Android и Spring Boot.

Эволюция

Ant (2000): Первый широко используемый инструмент сборки для Java. Ant применяет императивный подход, где разработчик вручную описывает задачи в XML-файле (build.xml). Он не предоставляет встроенного управления зависимостями или жизненного цикла, что делает его гибким, но сложным для крупных проектов.

Maven (2004): Ввел декларативный подход с жизненным циклом (clean, build, site) и управлением зависимостями через репозитории. Maven использует XML (POM.xml), что обеспечивает стандартизацию, но ограничивает гибкость для нестандартных сценариев.

Gradle (2007): Объединяет преимущества Ant и Maven, предлагая:
Гибкость: Возможность писать программную логику для задач с помощью Groovy или Kotlin.
Производительность: Инкрементальная сборка и кэширование задач.
Декларативность: Простое описание зависимостей и плагинов, аналогичное Maven.
Многопроектная поддержка: Эффективное управление многомодульными проектами.


Gradle стал популярным благодаря поддержке Android Studio, высокой производительности и активному сообществу.
В памяти: Gradle работает как
Java-приложение, загружая конфигурационные файлы (build.gradle, settings.gradle), плагины и зависимости в оперативную память. В отличие от Maven, Gradle использует Groovy/Kotlin для парсинга скриптов, что увеличивает потребление памяти из-за динамической природы этих языков, но оптимизируется за счет кэширования и инкрементальности.


Архитектура Gradle

Архитектура Gradle построена вокруг концепции задач (tasks) и графа выполнения, что отличает его от жизненного цикла Maven. Рассмотрим ключевые аспекты.


Task-based Model vs Lifecycle-based (в Maven)

Task-based Model (Gradle):
Gradle использует модель, основанную на задачах, где каждая задача (task) — это атомарная единица работы (например, компиляция, тестирование, упаковка).
Задачи определяются в build.gradle и могут быть связаны через зависимости (например, задача build зависит от compileJava).
Разработчик может создавать кастомные задачи с программной логикой, что обеспечивает гибкость.


Пример:
task hello {
doLast {
println 'Hello, Gradle!'
}
}


Lifecycle-based Model (Maven):
Maven использует фиксированный жизненный цикл (clean, default, site) с фазами (compile, test, package), к которым привязаны плагины.
Ограниченная гибкость: задачи определяются через плагины, а не напрямую.


В памяти:
В Gradle каждая задача представлена как объект в памяти, содержащий конфигурацию и зависимости. Это увеличивает потребление памяти по сравнению с Maven, где фазы жизненного цикла имеют более жесткую структуру. Однако Gradle оптимизирует выполнение, пропуская неизмененные задачи (см. инкрементальность).


Directed Acyclic Graph (DAG) исполнения задач

Gradle строит Directed Acyclic Graph (DAG) для задач, где:
Узлы — это задачи.
Ребра — зависимости между задачами (например, build зависит от test, а test — от compileJava).

Gradle анализирует DAG, чтобы определить порядок выполнения задач и избежать циклов.


Процесс:
Gradle парсит build.gradle и создает объекты задач в памяти.
Формируется DAG на основе зависимостей, указанных в dependsOn или неявно через плагины.
Gradle выполняет задачи в порядке, определенном топологической сортировкой DAG, пропуская те, которые не требуются.


Пример:
task compileJava {
doLast { println 'Compiling Java' }
}
task test(dependsOn: compileJava) {
doLast { println 'Running tests' }
}
task build(dependsOn: test) {
doLast { println 'Building artifact' }
}


#Java #middle #Gradle
👍3
Инкрементальность и кэширование

Gradle оптимизирует производительность за счет:
Инкрементальности: Gradle проверяет входные и выходные данные задач (например, исходные файлы, скомпилированные классы). Если они не изменились, задача пропускается.

Пример:
Задача compileJava проверяет хэши исходных файлов и пропускает компиляцию, если они не изменились.

Кэширование:
Локальный кэш: Gradle хранит результаты задач в ~/.gradle/caches, что позволяет повторно использовать артефакты между сборками.
Build Cache: Gradle может кэшировать результаты задач на удаленном сервере (например, в CI/CD), что ускоряет сборку на разных машинах.


Настройка в settings.gradle:
buildCache {
local {
enabled = true
}
remote(HttpBuildCache) {
url = 'https://cache.example.com/'
push = true
}
}


В памяти:
Инкрементальность требует хранения хэшей входных/выходных данных в памяти для сравнения, что добавляет overhead. Build Cache минимизирует повторные вычисления, но требует дополнительной памяти для управления метаданными кэша.


Сравнение Gradle vs Maven

Гибкость, декларативность, производительность

Гибкость:
Gradle: Позволяет писать программную логику в задачах, используя Groovy/Kotlin. Подходит для нестандартных сценариев (например, кастомные процессы сборки).
Maven: Ограничивает кастомизацию плагинами и XML, что менее гибко для сложных задач.


Декларативность:
Maven: Полностью декларативный подход через XML (POM.xml), что упрощает стандартизацию, но ограничивает выразительность.
Gradle: Сочетает декларативность (зависимости, плагины) с императивной логикой, что делает его более выразительным.


Производительность:
Gradle: Быстрее за счет инкрементальной сборки, кэширования и параллельного выполнения задач. Флаг --parallel ускоряет многомодульные проекты.
Maven: Медленнее из-за последовательного выполнения фаз и отсутствия встроенной инкрементальности. Флаг -T частично компенсирует это.


В памяти:
Gradle потребляет больше памяти из-за динамической природы Groovy/Kotlin и сложных DAG. Maven экономичнее, так как использует фиксированную структуру жизненного цикла, но менее эффективен по времени выполнения.


Groovy DSL vs XML (Maven)

Groovy DSL (Gradle):
Использует Groovy для описания сборки, что делает синтаксис компактным и выразительным.

Пример:
plugins {
id 'java'
}
dependencies {
implementation 'org.springframework:spring-core:5.3.20'
}


Преимущества: Легко читаемый код, поддержка программной логики, динамическая конфигурация.
Недостатки: Требует изучения Groovy, потенциальные ошибки из-за динамической типизации.


XML (Maven):
Использует XML (POM.xml), что делает конфигурацию строгой и стандартизированной.

Пример:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>

Преимущества: Простота для новичков, строгая структура, поддержка инструментами (IDE).
Недостатки: Многословность, ограниченная гибкость.


В памяти:
Парсинг Groovy DSL в Gradle требует загрузки Groovy-библиотек и динамической компиляции скриптов, что увеличивает потребление памяти по сравнению с XML-парсингом Maven, который использует более легковесные парсеры (например, StAX).

#Java #middle #Gradle
👍3