Пример подключения зеркала в проекта Java
Настоящий проект доступен в репозитории GitVerse, в ветке maven-mirror (opens in a new tab) и показывает пример подключения maven-пакета com.fasterxml.jackson
через зеркало https://mvn-mirror.gitverse.ru
.
Проект использует класс ObjectMapper
для преобразования формата JSON в объекты Java и наоборот, результат сериализации и десериализации выводится в консоль.
Подробнее смотрите ниже в описании файла JsonExample.java.
Структура проекта
gitverse-registry-mirrors/
├── README.md
├── dependency-reduced-pom.xml
├── pom.xml
├── settings.xml # приведен для справки
├── src
│ └── main
│ └── java
│ └── ru/gitverse/tutorials/jsonexample
│ └── JsonExample.java
└── target/
Краткое описание:
- README.md — настоящее руководство;
- dependency-reduced-pom.xml — информация о зависимостях в объединенном JAR-файле. Создается автоматически в Maven-проекте при использовании плагина maven-shade-plugin;
- pom.xml — описание зависимости нашего проекта;
- src/main/java — каталог для исходного кода Java;
src/main/java/ru/gitverse/tutorials/jsonexample/JsonExample.java
— файл класса, гдеru.gitverse.tutorials.jsonexample.JsonExample
— полное квалифицированное имя класса. Компилятор Java использует полное имя класса для поиска соответствующего файла с исходным кодом;- target/ — каталог создается автоматически при выполнении команд сборки проекта и автоматические удаляется при пересборке и очистке.
dependency-reduced-pom.xml
Файл dependency-reduced-pom.xml создается автоматически в Maven проекте при использовании плагина maven-shade-plugin, в нем содержится информацию о зависимостях в объединенном JAR-файле (fat JAR) после процесса упаковки.
Плагин maven-shade-plugin позволяет упаковать все зависимости в один JAR-файл (fat JAR), подключение плагина в pom.xml описано далее.
pom.xml
pom.xml (Project Object Model) - основной файл конфигурации в проектах, использующих систему сборки Maven. Он представляет собой XML-файл, который содержит всю необходимую информацию о проекте: от его названия и версии до зависимостей от других библиотек и плагинов, используемых для сборки.
Код файла pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>your-group-id</groupId>
<artifactId>jsonexample</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<!-- put your configurations here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
Секции pom.xml:
<modelVersion>
— указывает версию модели POM;<groupId>
— идентификатор группы проекта, используется для уникальной идентификации проекта;<artifactId>
— идентификатор артефакта проекта, обычно это имя проекта;<version>
— версия проекта. Версия 1.0-SNAPSHOT означает, что проект находится в стадии разработки (SNAPSHOT);<properties>
— используется для определения свойств, которые могут быть использованы в других частях pom.xml:<java.version>
— версия Java для сборки проекта. Посмотреть свою версию Java можно командойjava -version
;
<dependencies>
— список зависимостей проекта, здесь подключется maven-пакет com.fasterxml.jackson через зеркалоhttps://mvn-mirror.gitverse.ru
. Ключевая зависимость проекта;<build>
— определяет конфигурацию сборки проекта.
Секция <build>
в pom.xml
maven-jar-plugin используется для создания JAR-файла из результатов компиляции проекта. Он упаковывает классы, ресурсы и метаданные в стандартный JAR-формат:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
maven-compiler-plugin отвечает за компиляцию исходного кода Java в байт-код. Он позволяет настроить уровень совместимости Java, оптимизацию компиляции и другие параметры:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
maven-shade-plugin используется для создания «толстых» JAR-файлов (fat JAR), которые включают все необходимые зависимости. Он объединяет классы и ресурсы из зависимостей в один JAR-файл:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<!-- put your configurations here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
exec-maven-plugin позволяет запускать исполняемые классы непосредственно из командной строки Maven (mvn compile exec:java
). Он полезен для тестирования и отладки приложений без необходимости запуска их отдельно:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
</configuration>
</plugin>
settings.xml
Файл приведен для примера подключения зеркала https://npm-mirror.gitverse.ru
. Секции зеркала и профиля следует указать settings.xml, уже существующем на в вашей операционной системе. Если файла нет, его следует создать.
Расположение файла settings.xml:
- для Windows —
C:\Users\<YourUsername>\.m2\settings.xml
; - для MacOS и Linux —
/home/username/.m2/settings.xml
(домашняя директория пользователя).
Код файла settings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<!-- Секция mirrors -->
<mirrors>
<mirror>
<id>mvn-mirror</id>
<name>GitVerse Maven Mirror</name>
<url>https://mvn-mirror.gitverse.ru</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>gitverse</id>
<repositories>
<repository>
<id>mvn-mirror</id>
<url>https://mvn-mirror.gitverse.ru</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>mvn-mirror</id>
<url>https://mvn-mirror.gitverse.ru</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- Секция активации профиля -->
<activeProfiles>
<activeProfile>gitverse</activeProfile>
</activeProfiles>
</settings>
JsonExample.java
Класс JsonExample.java является точкой входа программы и содержит основной метод main()
, который запускается при выполнении программы.
В коде подключается пакет пакет com.fasterxml.jackson, класс ObjectMapper
которого преобразовывает формат JSON в объекты Java и наоборот. Результаты сериализации и десериализации выводятся в консоль.
JSON задается в двух местах:
- Временно в процессе сериализации в первой части кода в строке:
String jsonString = mapper.writeValueAsString(person);
- В предопределенной строке во второй части кода:
String json = "{\"name\":\"Jane Smith\", \"age\": 25}";
Код файла JsonExample.java:
package ru.gitverse.tutorials.jsonexample;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonExample {
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
// Serialize a Java object to JSON
Person person = new Person("Jane Smith", 25);
String jsonString = mapper.writeValueAsString(person);
System.out.println(jsonString);
// Deserialize a JSON string to a Java object
String json = "{\"name\":\"Jane Smith\", \"age\": 25}";
Person deserializedPerson = mapper.readValue(json, Person.class);
System.out.println(deserializedPerson.getName() + ", " + deserializedPerson.getAge());
}
static class Person {
public String name;
public int age;
public Person() {
// Optionally, initialize default values for name and age here
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;;
}
}
}
Пояснения:
-
package ru.gitverse.tutorials.jsonexample;
— имя пакета, указывается в секциях pom.xml для корректной сборки проекта. Полное квалификационное имя формируется из имени пакета и имени класса (JsonExample
); -
import com.fasterxml.jackson.databind.ObjectMapper;
— подключения maven-пакета com.fasterxml.jackson; -
public class JsonExample JsonExample
:-
внутри метода
main
:- сериализация (преобразование объекта в JSON):
- создается объект
ObjectMapper
под названиемmapper
. Этот объект используется для работы с данными JSON; - создается объект
Person
с именем person и определенными значениями имени и возраста.; - объект
person
сериализуется (преобразуется) вjsonString
с помощью методаmapper.writeValueAsString(person)
; jsonString
выводится в консоль с помощьюSystem.out.println(jsonString);
;
- создается объект
- десериализация (преобразование JSON в объект):
- определяется строка
json
с уже существующим представлением объектаPerson
в формате JSON; - объект
mapper
десериализаует строкуjson
; - десериализованный объект
Person
выводится в консоль с помощьюSystem.out.println(deserializedPerson.name + ", " + deserializedPerson.age);
;
- определяется строка
- сериализация (преобразование объекта в JSON):
-
static class Person
:- имеет два приватных поля:
name
— строковая переменная для хранения имени человека;age
— целочисленная переменная для хранения возраста человека;
- имеет два конструктора:
- конструктор по умолчанию без аргументов;
- Конструктор, принимающий аргументы
name
(строка) иage
(целое число);
- содержит методы
getName()
иsetName()
для доступа к полю name, а также методыgetAge()
иsetAge()
для доступа к полю age.
- имеет два приватных поля:
-
Каталог target
Каталог target создается автоматически при выполнении команд сборки и очистки проекта, например:
mvn package
— компилирует исходный код, выполняет тесты и упаковывает проект в JAR- или WAR‑файл. Скомпилированные классы, ресурсы и итоговый артефакт помещаются в каталог target.mvn clean
— yдаляет все содержимое каталога target;mvn clean package
— последовательно выполняет очистку и сборку проекта.
Запуск и проверка кода
Запуск кода должен показать результат сериализации объекта в JSON и на следующей строке результат обратной операции:
{"name":"Jane Smith","age":25}
Jane Smith, 25
Компиляция и выполнение
Компиляция и выполнение командой mvn compile exec:java
для быстрого запуска и тестирования:
$ mvn compile exec:java
...
[INFO] --- exec-maven-plugin:3.5.0:java (default-cli) @ jsonexample ---
{"name":"Jane Smith","age":25}
Jane Smith, 25
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.076 s
[INFO] Finished at: 2024-11-25T20:40:42+03:00
[INFO] ------------------------------------------------------------------------
Сборка и выполнение JAR-файла
Команда для сборки и JAR-файла:
mvn clean package && java -jar target/jsonexample-1.0-SNAPSHOT.jar
Вы должны увидеть в консоли:
$ mvn clean package && java -jar target/jsonexample-1.0-SNAPSHOT.jar
...
{"name":"Jane Smith","age":25}
Jane Smith, 25