This commit is contained in:
@@ -3,16 +3,19 @@ tags:
|
||||
- maturity/🌱
|
||||
date:
|
||||
- - 2024-01-10
|
||||
zero-link: []
|
||||
parents:
|
||||
---
|
||||
```shell
|
||||
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 Криптография]]
|
||||
|
||||
@@ -21,7 +21,7 @@ Output:
|
||||
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`: игнорирует отсутствующие зависимости, чтобы избежать ошибок при их отсутствии.
|
||||
- `-q`: отключает подробный вывод, что делает команду менее «шумной» и оставляет только ключевые данные.
|
||||
- `-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:
|
||||
- maturity/🌱
|
||||
- maturity/🌳
|
||||
date:
|
||||
- - 2024-01-10
|
||||
---
|
||||
Первым делом необходимо [скачать сертификат сайта](../cryptography/Скачать%20сертификат%20сайта.md).
|
||||
> [!NOTE] Инструкция по скачиванию сертификата
|
||||
> Первым делом необходимо [скачать сертификат сайта](../cryptography/Скачать%20сертификат%20сайта.md).
|
||||
|
||||
Теперь используя `keytool` добавим сертификат в JVM.
|
||||
Используя `keytool` добавим сертификат в JVM.
|
||||
|
||||
```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` - алиас для сертификата
|
||||
|
||||
> [!WARNING]
|
||||
> Возможно потребуется выход из системы, чтобы применились изменения.
|
||||
> Потребуется выход из операционной системы, чтобы применились изменения.
|
||||
|
||||
Проверка, что сертификат был добавлен:
|
||||
|
||||
```shell
|
||||
keytool -list -keystore keystore_path -alias alias_cert
|
||||
```
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]
|
||||
|
||||
Reference in New Issue
Block a user