Skip to content

Commit a927a5a

Browse files
author
Denis Peshkov (CZ)
committed
small fixes
1 parent ef2b50a commit a927a5a

8 files changed

Lines changed: 330 additions & 24 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,5 @@ _NCrunch_WebCompiler
3131
output/
3232
rider/build/
3333
rider/.gradle/
34+
rider/gradle-truststore.jks
35+
rider/gradle-local.properties

README-RIDER.md

Lines changed: 131 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ dotnet add package TypeScriptDefinitionGenerator.MSBuild
9191
### Вариант 2: Локальный targets (для разработки в репозитории TypeScriptDefinitionGenerator)
9292

9393
```xml
94-
<Import Project="path/to/build/TypeScriptDefinitionGenerator.targets" />
94+
<Import Project="path/to/src/TypeScriptDefinitionGenerator.MSBuild/TypeScriptDefinitionGenerator.MSBuild.targets" />
9595

9696
<ItemGroup>
9797
<TypeScriptDefinitionSource Include="base\ThirdClass.cs" />
@@ -108,34 +108,146 @@ Target использует Inputs/Outputs для инкрементальной
108108

109109
## Rider Plugin
110110

111-
Плагин добавляет пункт «Generate TypeScript Definition» в контекстное меню для .cs файлов (в меню Generate и в Project View). Плагин запускает `TypeScriptDefinitionGenerator.Cli` как subprocess — без конфликтов с ReSharper SDK.
111+
Плагин добавляет пункт «Generate TypeScript Definition» в контекстное меню для .cs файлов (в меню Generate и в Project View). Плагин запускает `TypeScriptDefinitionGenerator.Cli` как subprocess. Плагин совместим с Rider 2024.1+ (включая Rider 2025.3).
112112

113113
### Сборка плагина
114114

115-
**Требования:** .NET SDK; для контекстного меню — Java 17+.
115+
**Общее требование:** .NET SDK на любой ОС.
116116

117-
```bash
118-
# Полная сборка (с контекстным меню Solution View)
119-
./build-rider-plugin.sh [Debug|Release] [версия]
120-
# Пример: ./build-rider-plugin.sh Release 1.0.0
121-
```
117+
Два варианта сборки:
118+
- **Вариант 1 (полная):** .NET backend + Kotlin frontend — контекстное меню по ПКМ по .cs в Solution View. **Kotlin устанавливать не нужно** — он подтягивается сборкой (Gradle). Нужны только **Java 17+** (JDK) и на Windows — скрипт `gradlew.bat` (см. ниже).
119+
- **Вариант 2 (только .NET):** только .NET backend — пункта в контекстном меню нет; генерация через **Find Action** (Ctrl+Shift+A / Cmd+Shift+A) → «Generate TypeScript Definition». Java и Kotlin не требуются.
122120

123-
**Без Java 17:** скрипт автоматически соберёт только .NET backend (без пункта в контекстном меню). Используйте **Find Action** (Ctrl+Shift+A / Cmd+Shift+A) → «Generate TypeScript Definition». Или явно: `./build-rider-plugin.sh --dotnet-only`.
121+
---
124122

125-
**С Java 17:** скрипт автоматически ищет Java 17 (Homebrew). Или задайте явно:
126-
```bash
127-
export JAVA_HOME=$(/usr/libexec/java_home -v 17) # macOS
128-
./build-rider-plugin.sh Release 1.0.0
123+
#### Windows
124+
125+
**Как установить предварительные требования (только для Варианта 1):**
126+
127+
1. **Разрешить выполнение PowerShell-скриптов** (если ещё не разрешено):
128+
Откройте PowerShell и выполните:
129+
`Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned`
130+
131+
2. **Установить Java 17+:**
132+
- Установите [Chocolatey](https://chocolatey.org/install) (если ещё нет).
133+
- В PowerShell от имени администратора: `choco install openjdk17`
134+
- Закройте и снова откройте терминал.
135+
136+
3. **Получить `gradlew.bat`** (для полной сборки):
137+
В репозитории есть только `rider\gradlew` (Unix). Нужен `rider\gradlew.bat`:
138+
- Установите [Gradle](https://gradle.org/install/) (или через Chocolatey: `choco install gradle`).
139+
- В терминале: `cd rider`, затем `gradle wrapper`.
140+
- Должен появиться `gradlew.bat`. Если не получается — собирайте **Вариант 2** (`--dotnet-only`).
141+
142+
| Вариант | Команда | Результат |
143+
|--------|---------|-----------|
144+
| **1 (полная)** | `.\build-rider-plugin.ps1 Release 1.0.0` | Контекстное меню + Find Action |
145+
| **2 (только .NET)** | `.\build-rider-plugin.ps1 --dotnet-only` | Только Find Action |
146+
147+
Архив плагина: `output\TypeScriptDefinitionGenerator.Rider-<version>.zip`
148+
149+
---
150+
151+
#### macOS
152+
153+
**Как установить предварительные требования (только для Варианта 1):**
154+
155+
1. **Установить Java 17+:**
156+
- Через Homebrew: `brew install openjdk@17`
157+
- Или скачайте [Eclipse Temurin 17](https://adoptium.net/) / [Oracle JDK 17](https://www.oracle.com/java/technologies/downloads/#java17) и установите вручную.
158+
159+
2. **Указать Java 17 для сборки** (если установлено несколько версий):
160+
`export JAVA_HOME=$(/usr/libexec/java_home -v 17)`
161+
Проверка: `java -version` — должна быть 17 или выше.
162+
163+
| Вариант | Команда | Результат |
164+
|--------|---------|-----------|
165+
| **1 (полная)** | `./build-rider-plugin.sh Release 1.0.0` | Контекстное меню + Find Action |
166+
| **2 (только .NET)** | `./build-rider-plugin.sh --dotnet-only` | Только Find Action |
167+
168+
Архив плагина: `output/TypeScriptDefinitionGenerator.Rider-<version>.zip`
169+
170+
---
171+
172+
#### Linux
173+
174+
Скрипт `./build-rider-plugin.sh`, те же два варианта (таблица как для macOS).
175+
176+
**Как установить предварительные требования (только для Варианта 1):**
177+
Установите Java 17+ из пакетного менеджера (например `sudo apt install openjdk-17-jdk` или аналог). При нескольких версиях Java задайте `export JAVA_HOME=/path/to/jdk-17`.
178+
179+
---
180+
181+
### Ошибка SSL при загрузке Gradle и зависимостей (Windows / корпоративный прокси)
182+
183+
Если при запуске `gradlew.bat` или сборке плагина появляется **SSLHandshakeException** / **PKIX path building failed: unable to find valid certification path to requested target**, значит JVM не доверяет сертификату (часто из‑за корпоративного прокси или своей CA). Та же ошибка возникает при загрузке **дистрибутива Gradle** (services.gradle.org) и при разрешении **зависимостей** (plugins.gradle.org, mavenCentral()). Сообщение «What went wrong: 25» без деталей — это та же SSL-ошибка: запустите `.\gradlew.bat buildPlugin --stacktrace`, чтобы увидеть полный текст.
184+
185+
**Вариант 1 — добавить сертификат в хранилище Java (рекомендуется):**
186+
Без этого не будут работать ни загрузка Gradle, ни разрешение зависимостей (IntelliJ plugin, Kotlin и т.д.).
187+
188+
1. Скачайте корневой сертификат вашей сети (или экспортируйте из браузера с https://services.gradle.org или https://plugins.gradle.org) в файл, например `gradle-ca.cer`.
189+
190+
2. **Windows** — откройте **cmd от имени администратора** (ПКМ по cmd → «Запуск от имени администратора»), перейдите в папку, где лежит `gradle-org.cer` (или укажите полный путь к файлу), и выполните (подставьте свой путь к JDK и к файлу сертификата):
191+
```bat
192+
set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-17
193+
set CER_FILE=C:\full\path\to\gradle-org.cer
194+
195+
rem Если alias "gradle" уже есть — удалите: keytool -delete -alias gradle -keystore "%JAVA_HOME%\lib\security\cacerts" -storepass changeit
196+
197+
"%JAVA_HOME%\bin\keytool" -importcert -alias gradle -file "%CER_FILE%" -keystore "%JAVA_HOME%\lib\security\cacerts" -storepass changeit
198+
```
199+
**Скрипт-помощник:** в папке `rider` лежит `import-ssl-cert.bat`. Запустите **cmd от имени администратора**, задайте `JAVA_HOME` и выполните:
200+
`rider\import-ssl-cert.bat C:\full\path\to\gradle-org.cer`
201+
В **PowerShell** вызывайте так (через cmd):
202+
`cmd /c "`"rider\import-ssl-cert.bat`" `"C:\path\to\gradle-org.cer`""`
203+
Скрипт проверит пути и выведет ошибку keytool, если что-то не так.
204+
205+
**Если не срабатывает:** (1) Убедитесь, что `JAVA_HOME` указывает на тот же JDK, которым пользуется Gradle. (2) Пароль хранилища по умолчанию — `changeit`; если keytool пишет «Password verification failed», укажите правильный `-storepass` или пустой `-storepass ""`. (3) Файл сертификата — PEM или DER (.cer/.pem). (4) Ошибка «access denied» — запустите cmd от имени администратора.
206+
207+
**Сертификат импортирован, но Gradle всё равно PKIX:** Gradle может запускаться под другим JDK. Используйте **локальный truststore** в проекте:
208+
1. В cmd: `cmd /c "rider\create-truststore.bat C:\path\to\gradle-org.cer"` (подставьте путь к .cer). Создадутся `rider\gradle-truststore.jks` и `rider\gradle-local.properties`.
209+
2. В папке rider: `gradlew.bat --stop`, затем `gradlew.bat buildPlugin`.
210+
211+
3. **macOS / Linux:**
212+
```bash
213+
sudo "$JAVA_HOME/bin/keytool" -importcert -alias gradle -file gradle-ca.cer -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit
214+
```
215+
216+
4. Перезапустите терминал и снова запустите `.\gradlew.bat buildPlugin` (или `./gradlew buildPlugin`).
217+
218+
**Вариант 2 — только обойти загрузку дистрибутива Gradle (локальный zip):**
219+
Это устраняет SSL только для скачивания Gradle. Разрешение зависимостей (plugins.gradle.org, Maven) по-прежнему идёт по HTTPS, поэтому при корпоративном прокси **всё равно нужен Вариант 1** (добавить CA в Java).
220+
221+
1. На машине с рабочим HTTPS скачайте [gradle-8.13-bin.zip](https://services.gradle.org/distributions/gradle-8.13-bin.zip) и сохраните локально.
222+
223+
2. В файле `rider\gradle\wrapper\gradle-wrapper.properties` замените `distributionUrl` на локальный путь, например:
224+
```properties
225+
distributionUrl=file\:///C:/Users/YourName/gradle-8.13-bin.zip
226+
```
227+
228+
3. Запустите снова `.\gradlew.bat buildPlugin`. Если снова появится PKIX/SSL при загрузке плагинов — добавьте CA в Java (Вариант 1).
229+
230+
**Сборка падает с «What went wrong: 25» или другой неочевидной ошибкой:** выполните из папки `rider` команду с полным выводом стека:
231+
```bat
232+
.\gradlew.bat buildPlugin --stacktrace
129233
```
234+
По выводу будет видно, какой именно task упал (часто это загрузка IDE SDK по сети или задача `patchPluginXml`). Убедитесь, что есть доступ в интернет и что корпоративный прокси не блокирует Maven/Central/Google (для загрузки зависимостей и IntelliJ runtime). Предупреждения про `System::load` и `--enable-native-access` устраняются через `rider/gradle.properties` (уже добавлены нужные JVM-аргументы).
235+
236+
---
237+
238+
### Установка плагина в Rider
130239

131-
Скрипт собирает .NET backend и при наличии Java 17 — Kotlin frontend (контекстное меню Solution View). Плагин совместим с Rider 2024.1+ (включая Rider 2025.3).
240+
1. **Соберите плагин** (см. раздел «Сборка плагина» выше). После сборки в папке `output` появится архив:
241+
- **Windows:** `output\TypeScriptDefinitionGenerator.Rider-<version>.zip`
242+
- **macOS / Linux:** `output/TypeScriptDefinitionGenerator.Rider-<version>.zip`
132243

133-
### Установка
244+
2. **Установите плагин в Rider:**
245+
- Откройте **Settings** (Ctrl+Alt+S / Cmd+,).
246+
- **Plugins** → нажмите **шестерёнку** (Gear icon) → **Install Plugin from Disk…**
247+
- Выберите файл `TypeScriptDefinitionGenerator.Rider-<version>.zip` из папки `output`.
248+
- Нажмите **OK**, затем **Restart IDE**.
134249

135-
1. Соберите плагин (см. выше)
136-
2. В Rider: **Settings****Plugins****Gear icon****Install Plugin from Disk**
137-
3. Выберите `output/TypeScriptDefinitionGenerator.Rider-<version>.zip`
138-
4. Перезапустите Rider
250+
3. После перезапуска плагин готов к работе (контекстное меню по .cs или **Find Action** → «Generate TypeScript Definition»).
139251

140252
### Настройки
141253

README.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,22 @@ dotnet add package TypeScriptDefinitionGenerator.MSBuild
123123

124124
Для использования в Rider см. [README-RIDER.md](README-RIDER.md) — плагин с контекстным меню, External Tool или dotnet tool для генерации .d.ts файлов.
125125

126-
## Сборка расширения
126+
## Сборка расширения (VSIX)
127127

128-
Расширение использует SDK-style проект (PackageReference). Сборка возможна **только на Windows** с установленной Visual Studio 2022, т.к. VSSDK требует vsct.exe для компиляции меню.
128+
Сборка возможна **только на Windows** с установленной Visual Studio 2022 (VSSDK требует vsct.exe и т.д.).
129129

130-
При сборке через `dotnet build` для проекта Visual Studio Extension (VSIX) требуется **.NET 8 SDK**: `global.json` в корне репозитория привязывает сборку к SDK 8.0.x (из‑за ограничений VSSDK.BuildTools на .NET 10+). Установите [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) или собирайте расширение из Visual Studio (Build Solution).
130+
**Рекомендуемый способ:** запустите скрипт в PowerShell (использует MSBuild из VS и избегает проблем с `dotnet build`):
131+
132+
```powershell
133+
.\build-vsix.ps1 # Debug
134+
.\build-vsix.ps1 Release
135+
```
136+
137+
Готовый VSIX будет в `src\TypeScriptDefinitionGenerator\bin\<Configuration>\net472\*.vsix`.
138+
139+
**Установка VSIX на Windows:** дважды щёлкните по файлу `.vsix` или в Visual Studio: **Extensions****Manage Extensions****Install from VSIX** и укажите собранный файл.
140+
141+
**Альтернатива:** откройте решение в Visual Studio и выполните **Build Solution**. При сборке через `dotnet build` нужен **.NET 8 SDK**: в корне репозитория задан `global.json` для SDK 8.0.x. Установите [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) при необходимости.
131142

132143
## Contribute
133144
Check out the [contribution guidelines](.github/CONTRIBUTING.md)

TypeScriptDefinitionGenerator.slnx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
<File Path="publish-marketplace.ps1" />
1919
<File Path="README-RIDER.md" />
2020
<File Path="README.md" />
21+
<File Path="rider/gradlew" />
22+
<File Path="rider/gradlew.bat" />
2123
<File Path="vs-publish.json" />
2224
</Folder>
2325
<Project Path="src/TypeScriptDefinitionGenerator.Cli/TypeScriptDefinitionGenerator.Cli.csproj" />

gradle.org.crt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDnzCCA0agAwIBAgIQPOIJVcuRvxsNB8+akoqHFjAKBggqhkjOPQQDAjA7MQsw
3+
CQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMQwwCgYD
4+
VQQDEwNXRTEwHhcNMjYwMTE4MDEyNTMwWhcNMjYwNDE4MDIyNTI5WjAVMRMwEQYD
5+
VQQDEwpncmFkbGUub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7pn8WiG4
6+
Ds1ksxs85Ux2Jt2TV7d5ZpqvLahqsmy7Lz2hQZryXPz8DZMCSrUPF/5vHWffoFLP
7+
d9A9Y69UNg3aTqOCAlAwggJMMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
8+
BgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRp1bHTc3Kz4UO1JK3PMvho
9+
3u0dQzAfBgNVHSMEGDAWgBSQd5I1Z8T/qMyp5nvZgHl7zJP5ODBeBggrBgEFBQcB
10+
AQRSMFAwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vLnBraS5nb29nL3Mvd2UxL1BPSTAl
11+
BggrBgEFBQcwAoYZaHR0cDovL2kucGtpLmdvb2cvd2UxLmNydDAjBgNVHREEHDAa
12+
ggpncmFkbGUub3JnggwqLmdyYWRsZS5vcmcwEwYDVR0gBAwwCjAIBgZngQwBAgEw
13+
NgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2MucGtpLmdvb2cvd2UxL18tNGlGd2ZD
14+
YWNNLmNybDCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB1AGQRxGykEuyniRyiAi4A
15+
vKtPKAfUHjUnq+r+1QPJfc3wAAABm87r/sQAAAQDAEYwRAIgd0rYbkdDm/O/CXmn
16+
yvmjbO+eIYRB9K9gZftBb00FANACIFUMinN61Z1ZK0nZB7JJ7NZAkH/40b5pKle5
17+
6CvoJI/NAHYAlpdkv1VYl633Q4doNwhCd+nwOtX2pPM2bkakPw/KqcYAAAGbzuv+
18+
1AAABAMARzBFAiEAwYrsQtZWl4jqKmc5AlBYhHrbvJf/gSvmlnplv5TVZvwCIBSe
19+
P/maQprDS/kNLlYDw3TVWzT6LZAepAOzZB6v0mE8MAoGCCqGSM49BAMCA0cAMEQC
20+
IDrHC+4kI8wAl2ggsQH9rfagT0s+xyvogy/9tISdgbcyAiA9FppiWYCK6tUYWC4K
21+
5dDtapnKnrV4XcNJ/labNewE4g==
22+
-----END CERTIFICATE-----

rider/README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,27 @@
55
## Требования
66

77
- **Java 17+** — IntelliJ Platform Gradle Plugin 2.x требует Java 17
8-
- Gradle 8.13+ (через `./gradlew`)
8+
- Gradle 8.13+ (через `./gradlew` или на Windows — `gradlew.bat`)
99

1010
## Сборка
1111

12+
**Из корня репозитория** (рекомендуется): используйте `./build-rider-plugin.sh` (macOS/Linux) или `.\build-rider-plugin.ps1` (Windows) — они соберут и .NET, и Kotlin, и упакуют плагин в `output/TypeScriptDefinitionGenerator.Rider-<version>.zip`.
13+
14+
**Только Kotlin (из этой папки):**
15+
1216
```bash
1317
# Убедитесь, что используется Java 17+
1418
java -version # должно быть 17 или выше
1519

1620
# Если Java 8/11 — задайте JAVA_HOME:
1721
export JAVA_HOME=/path/to/jdk-17 # macOS: $(/usr/libexec/java_home -v 17)
22+
# Windows: choco install openjdk17
1823

19-
./gradlew buildPlugin
24+
./gradlew buildPlugin # macOS/Linux
25+
# или на Windows, если есть gradlew.bat:
26+
.\gradlew.bat buildPlugin
2027
```
2128

2229
Выход: `build/distributions/TypeScriptDefinitionGenerator.Rider-1.0.0.zip`
30+
31+
**Ошибка SSL (unable to find valid certification path):** часто из‑за корпоративного прокси. Решения: добавить CA-сертификат в Java `cacerts` через `keytool` или скачать [gradle-8.13-bin.zip](https://services.gradle.org/distributions/gradle-8.13-bin.zip) вручную и в `gradle/wrapper/gradle-wrapper.properties` задать `distributionUrl=file\:///C:/path/to/gradle-8.13-bin.zip`. Подробнее — в [README-RIDER.md](../README-RIDER.md) (раздел «Ошибка SSL при первой загрузке Gradle»).

0 commit comments

Comments
 (0)