This commit is contained in:
@@ -3,16 +3,19 @@ tags:
|
|||||||
- maturity/🌱
|
- maturity/🌱
|
||||||
date:
|
date:
|
||||||
- - 2024-01-10
|
- - 2024-01-10
|
||||||
zero-link: []
|
|
||||||
parents:
|
|
||||||
---
|
---
|
||||||
```shell
|
```shell
|
||||||
openssl s_client -showcerts -connect www.example.com:443
|
openssl s_client -showcerts -connect www.example.com:443
|
||||||
```
|
```
|
||||||
|
|
||||||
Эта команда выведет сертификат в консоль. Далее нужно скопировать все, что между `-----BEGIN CERTIFICATE-----` и `-----END CERTIFICATE-----` включая эти строки.
|
Эта команда выведет сертификат в консоль. Далее нужно скопировать все, что между `-----BEGIN CERTIFICATE-----` и `-----END CERTIFICATE-----` включая эти строки. Скопированные данные вставить в текстовый документ и сохранить с расширением `*.crt`.
|
||||||
|
|
||||||
|
Или можно сразу скачать сертификат в файл командой
|
||||||
|
|
||||||
|
```shell
|
||||||
|
openssl s_client -showcerts -connect www.example.com:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.crt
|
||||||
|
```
|
||||||
|
|
||||||
Скопированные данные вставить в текстовый документ и сохранить с расширением `*.cer`.
|
|
||||||
***
|
***
|
||||||
## Мета информация
|
## Мета информация
|
||||||
**Область**:: [[../../meta/zero/00 Криптография|00 Криптография]]
|
**Область**:: [[../../meta/zero/00 Криптография|00 Криптография]]
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Output:
|
|||||||
jdk.zipfs,jdk.management,jdk.crypto.cryptoki,java.security.jgss,jdk.crypto.ec
|
jdk.zipfs,jdk.management,jdk.crypto.cryptoki,java.security.jgss,jdk.crypto.ec
|
||||||
```
|
```
|
||||||
|
|
||||||
- `--multi-release 17`: указывает на использование многоверсионного JAR-файла для JDK 17, что позволяет учитывать разные версии классов для разных версий JDK.
|
- `--multi-release 17`: указывает на использование многоверсионного JAR-файла для JDK 17, что позволяет учитывать разные версии классов для разных версий JDK. Подробнее [[Multi-Release JAR]]
|
||||||
- `--ignore-missing-deps`: игнорирует отсутствующие зависимости, чтобы избежать ошибок при их отсутствии.
|
- `--ignore-missing-deps`: игнорирует отсутствующие зависимости, чтобы избежать ошибок при их отсутствии.
|
||||||
- `-q`: отключает подробный вывод, что делает команду менее «шумной» и оставляет только ключевые данные.
|
- `-q`: отключает подробный вывод, что делает команду менее «шумной» и оставляет только ключевые данные.
|
||||||
- `-recursive`: указывает JDeps анализировать зависимости всех модулей рекурсивно.
|
- `-recursive`: указывает JDeps анализировать зависимости всех модулей рекурсивно.
|
||||||
|
|||||||
59
dev/java/Multi-Release JAR.md
Normal file
59
dev/java/Multi-Release JAR.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
- MR-JAR
|
||||||
|
tags:
|
||||||
|
- maturity/🌱
|
||||||
|
date: 2025-02-26
|
||||||
|
---
|
||||||
|
При разработке библиотек часто требуется поддерживать несколько версий Java. В стандартном JAR-файле все классы работают на минимальной поддерживаемой версии JDK, что накладывает ограничения на использование новых возможностей языка и API.
|
||||||
|
|
||||||
|
MR-JAR решает эту проблему, позволяя включать в один JAR-файл классы, оптимизированные для разных версий Java. Это особенно полезно для библиотек, которые:
|
||||||
|
- Должны поддерживать старые версии JDK.
|
||||||
|
- Хотят использовать новые API в современных версиях.
|
||||||
|
- Избегают дублирования кода в отдельных JAR-файлах под каждую версию Java.
|
||||||
|
## Структура MR-JAR
|
||||||
|
Файлы, специфичные для версий Java, размещаются внутри JAR-файла в каталоге `META-INF/versions/{версия}/`. Пример структуры MR-JAR:
|
||||||
|
|
||||||
|
```
|
||||||
|
my-library.jar
|
||||||
|
├── META-INF/
|
||||||
|
│ ├── versions/
|
||||||
|
│ │ ├── 9/
|
||||||
|
│ │ │ ├── MyClass.class (оптимизирован для Java 9)
|
||||||
|
│ │ ├── 11/
|
||||||
|
│ │ │ ├── MyClass.class (оптимизирован для Java 11)
|
||||||
|
│ │ ├── 17/
|
||||||
|
│ │ │ ├── MyClass.class (оптимизирован для Java 17)
|
||||||
|
├── MyClass.class (базовая версия)
|
||||||
|
```
|
||||||
|
|
||||||
|
Когда JVM загружает классы, она выбирает наиболее подходящую версию:
|
||||||
|
- Если используется JDK 8, загружается `MyClass.class` из корня.
|
||||||
|
- Если JDK 9, 11 или 17, JVM выбирает класс из соответствующего каталога `META-INF/versions/{версия}/`.
|
||||||
|
|
||||||
|
## Создание MR-JAR
|
||||||
|
Создать MR-JAR можно с помощью `jar`-утилиты:
|
||||||
|
|
||||||
|
```
|
||||||
|
jar --create --file my-library.jar --main-class com.example.Main -C classes . \
|
||||||
|
--release 9 -C classes-java9 . \
|
||||||
|
--release 11 -C classes-java11 .
|
||||||
|
```
|
||||||
|
|
||||||
|
Здесь:
|
||||||
|
- `classes` — базовая версия классов (Java 8 и младше).
|
||||||
|
- `classes-java9` — версия классов для Java 9.
|
||||||
|
- `classes-java11` — версия классов для Java 11.
|
||||||
|
***
|
||||||
|
## Мета информация
|
||||||
|
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||||
|
**Родитель**::
|
||||||
|
**Источник**::
|
||||||
|
**Создана**:: [[2025-02-26]]
|
||||||
|
**Автор**::
|
||||||
|
### Дополнительные материалы
|
||||||
|
-
|
||||||
|
|
||||||
|
### Дочерние заметки
|
||||||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||||
|
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
---
|
---
|
||||||
tags:
|
tags:
|
||||||
- maturity/🌱
|
- maturity/🌳
|
||||||
date:
|
date:
|
||||||
- - 2024-01-10
|
- - 2024-01-10
|
||||||
---
|
---
|
||||||
Первым делом необходимо [скачать сертификат сайта](../cryptography/Скачать%20сертификат%20сайта.md).
|
> [!NOTE] Инструкция по скачиванию сертификата
|
||||||
|
> Первым делом необходимо [скачать сертификат сайта](../cryptography/Скачать%20сертификат%20сайта.md).
|
||||||
|
|
||||||
Теперь используя `keytool` добавим сертификат в JVM.
|
Используя `keytool` добавим сертификат в JVM.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
keytool -importcert -file cert_name.cer -keystore keystore_path -storepass "changeit" -noprompt -alias "alias_cert"
|
keytool -importcert -file cert_name.crt -keystore keystore_path -storepass "changeit" -noprompt -alias "alias_cert"
|
||||||
```
|
```
|
||||||
|
|
||||||
Где
|
Где
|
||||||
@@ -19,8 +20,13 @@ keytool -importcert -file cert_name.cer -keystore keystore_path -storepass "chan
|
|||||||
- `alias_cert` - алиас для сертификата
|
- `alias_cert` - алиас для сертификата
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Возможно потребуется выход из системы, чтобы применились изменения.
|
> Потребуется выход из операционной системы, чтобы применились изменения.
|
||||||
|
|
||||||
|
Проверка, что сертификат был добавлен:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
keytool -list -keystore keystore_path -alias alias_cert
|
||||||
|
```
|
||||||
***
|
***
|
||||||
## Мета информация
|
## Мета информация
|
||||||
**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]
|
**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]
|
||||||
|
|||||||
Reference in New Issue
Block a user