7
7
import io .vproxy .jdkman .entity .JDKManConfig ;
8
8
import io .vproxy .jdkman .ex .ErrorResult ;
9
9
import io .vproxy .jdkman .res .ResConsts ;
10
- import vjson .Stringifier ;
11
- import vjson .simple .SimpleString ;
12
10
13
11
import java .io .*;
14
12
import java .nio .charset .StandardCharsets ;
@@ -71,14 +69,14 @@ public boolean execute(JDKManConfig config, String[] options) throws Exception {
71
69
}
72
70
}
73
71
74
- var jdkman = jdkmanScriptPathFile ();
72
+ var jdkmanScriptDir = jdkmanScriptPathFile ();
75
73
76
74
for (var exe : EXECUTABLES ) {
77
75
var suffix = "" ;
78
76
if (OS .isWindows ()) {
79
77
suffix = ".exe" ; // use jdkman-proxy binary
80
78
}
81
- var path = Path .of (jdkman .getAbsolutePath (), exe + suffix );
79
+ var path = Path .of (jdkmanScriptDir .getAbsolutePath (), exe + suffix );
82
80
var file = path .toFile ();
83
81
if (file .exists ()) {
84
82
if (!file .isFile ()) {
@@ -115,25 +113,25 @@ public boolean execute(JDKManConfig config, String[] options) throws Exception {
115
113
}
116
114
}
117
115
118
- var scriptToEval = getScriptToEval (jdkman , shellType );
116
+ var scriptToEval = getScriptToEval (jdkmanScriptDir , shellType );
119
117
System .out .println (scriptToEval .trim ());
120
118
121
119
return false ;
122
120
}
123
121
124
122
private File jdkmanScriptPathFile () throws ErrorResult {
125
- var jdkman = Path .of (Utils .homedir (), "jdkman-scripts" ).toFile ();
126
- if (jdkman .exists ()) {
127
- if (!jdkman .isDirectory ()) {
128
- throw new ErrorResult (STR ."\{jdkman } is not a directory" );
123
+ var jdkmanScriptDir = Path .of (Utils .homedir (), "jdkman-scripts" ).toFile ();
124
+ if (jdkmanScriptDir .exists ()) {
125
+ if (!jdkmanScriptDir .isDirectory ()) {
126
+ throw new ErrorResult (STR ."\{jdkmanScriptDir } is not a directory" );
129
127
}
130
128
} else {
131
- var ok = jdkman .mkdirs ();
129
+ var ok = jdkmanScriptDir .mkdirs ();
132
130
if (!ok ) {
133
- throw new ErrorResult (STR ."failed to create directory: \{jdkman }" );
131
+ throw new ErrorResult (STR ."failed to create directory: \{jdkmanScriptDir }" );
134
132
}
135
133
}
136
- return jdkman ;
134
+ return jdkmanScriptDir ;
137
135
}
138
136
139
137
private static InputStream getScriptContent (String exe ) {
@@ -151,37 +149,44 @@ private static InputStream getScriptContent(String exe) {
151
149
}
152
150
}
153
151
154
- private static String getScriptToEval (File jdkman , ShellType shellType ) throws ErrorResult {
152
+ private static String getScriptToEval (File jdkmanScriptDir , ShellType shellType ) throws ErrorResult {
155
153
if (shellType == ShellType .pwsh ) {
156
- return buildPowershellEval (jdkman );
154
+ return buildPowershellEval (jdkmanScriptDir );
157
155
} else {
158
- return buildBashEval (jdkman );
156
+ return buildBashEval (jdkmanScriptDir );
159
157
}
160
158
}
161
159
162
- private static String jsonStringify (String s ) {
163
- var stringiferBuilder = new Stringifier .StringOptions .Builder ();
164
- stringiferBuilder .setPrintableChar (_ -> true );
165
- return new SimpleString (s ).stringify (stringiferBuilder .build ());
160
+ private static String writeJDKManScriptDirPathToTmpFile (File jdkmanScriptDir ) throws ErrorResult {
161
+ try {
162
+ var file = File .createTempFile ("jdkman-script-dir-path" , ".txt" );
163
+ Files .writeString (file .toPath (), jdkmanScriptDir .getAbsolutePath ());
164
+ return file .getAbsolutePath ();
165
+ } catch (IOException e ) {
166
+ throw new ErrorResult ("failed to create temporary file for jdkman-script path" , e );
167
+ }
166
168
}
167
169
168
- private static String buildBashEval (File jdkman ) {
170
+ private static String buildBashEval (File jdkmanScriptDir ) throws ErrorResult {
171
+ var jdkmanScriptDirPathTmpFile = writeJDKManScriptDirPathToTmpFile (jdkmanScriptDir );
169
172
return STR ."""
170
- JDKMAN_SCRIPT_PATH=\{ jsonStringify ( jdkman . getAbsolutePath ())}
173
+ JDKMAN_SCRIPT_PATH=`cat \{ jdkmanScriptDirPathTmpFile }`
171
174
export PATH="$JDKMAN_SCRIPT_PATH:$PATH"
172
175
function cdjh() {
173
176
builtin cd "$@"
174
177
export JAVA_HOME="`jdkman which`"
175
178
}
176
179
alias cd=cdjh
177
180
export JAVA_HOME="`jdkman which`"
181
+ rm -f \{jdkmanScriptDirPathTmpFile }
178
182
""" ;
179
183
}
180
184
181
- private static String buildPowershellEval (File jdkman ) throws ErrorResult {
182
- Path tmpFile ;
185
+ private static String buildPowershellEval (File jdkmanScriptDir ) throws ErrorResult {
186
+ var jdkmanScriptDirPathTmpFile = writeJDKManScriptDirPathToTmpFile (jdkmanScriptDir );
187
+ Path initPs1File ;
183
188
try {
184
- tmpFile = Files .createTempFile ("jdkman-init" , ".ps1" );
189
+ initPs1File = Files .createTempFile ("jdkman-init" , ".ps1" );
185
190
} catch (IOException e ) {
186
191
Logger .error (LogType .FILE_ERROR , "failed to create jdkman-init.ps1 tmp file" , e );
187
192
throw new ErrorResult ("failed to create jdkman-init.ps1 file" );
@@ -200,9 +205,9 @@ private static String buildPowershellEval(File jdkman) throws ErrorResult {
200
205
sb .append ("\n " );
201
206
sb .append ("}\n " );
202
207
}
203
- sb .append ("$JDKMAN_SCRIPT_PATH = " )
204
- .append (jsonStringify ( jdkman . getAbsolutePath ()) )
205
- .append (" | ConvertFrom-Json \n " );
208
+ sb .append ("$JDKMAN_SCRIPT_PATH = (Get-Content " )
209
+ .append (jdkmanScriptDirPathTmpFile )
210
+ .append (") \n " );
206
211
sb .append (STR ."""
207
212
$env:PATH = "$JDKMAN_SCRIPT_PATH\{pathSeparatorInPSStr ()}${env:PATH}"
208
213
$env:JAVA_HOME = jdkman which
@@ -212,16 +217,17 @@ private static String buildPowershellEval(File jdkman) throws ErrorResult {
212
217
$env:JAVA_HOME = jdkman which
213
218
}
214
219
Set-Alias -Name cd -Value cdjh -Option AllScope
215
- Remove-Item \{tmpFile }
220
+ Remove-Item \{initPs1File }
221
+ Remove-Item \{jdkmanScriptDirPathTmpFile }
216
222
""" );
217
223
218
224
try {
219
- Files .writeString (tmpFile , sb .toString ());
225
+ Files .writeString (initPs1File , sb .toString ());
220
226
} catch (IOException e ) {
221
227
Logger .error (LogType .FILE_ERROR , "failed to release jdkman-init.ps1 tmp file" , e );
222
228
throw new ErrorResult ("failed to release jdkman-init.ps1 file" );
223
229
}
224
- return STR .". \{tmpFile }" ;
230
+ return STR .". \{initPs1File }" ;
225
231
}
226
232
227
233
private static String pathSeparatorInPSStr () {
0 commit comments