From f53070f3b52c530ff73da7b2169d083ee15b685f Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 14 May 2019 14:40:40 -0400 Subject: [PATCH] PT #165978425: Exploded LS Jar for VSCode --- nodejs-packages/jvm-launch-utils/package.json | 2 +- .../jvm-launch-utils/src/jvm-util.ts | 23 ++++++++++ .../commons-vscode/package-lock.json | 6 +-- vscode-extensions/commons-vscode/package.json | 2 +- .../commons-vscode/src/launch-util.ts | 46 +++++++++++++++---- vscode-extensions/vscode-bosh/.gitignore | 1 + vscode-extensions/vscode-bosh/lib/Main.ts | 5 ++ .../vscode-bosh/package-lock.json | 12 ++--- .../vscode-bosh/scripts/preinstall.sh | 12 +++-- vscode-extensions/vscode-concourse/.gitignore | 1 + .../vscode-concourse/lib/Main.ts | 5 ++ .../vscode-concourse/package-lock.json | 12 ++--- .../vscode-concourse/scripts/preinstall.sh | 11 +++-- .../vscode-manifest-yaml/.gitignore | 1 + .../vscode-manifest-yaml/lib/Main.ts | 5 ++ .../vscode-manifest-yaml/package-lock.json | 12 ++--- .../scripts/preinstall.sh | 13 ++++-- .../vscode-spring-boot/.gitignore | 1 + .../vscode-spring-boot/lib/Main.ts | 5 ++ .../vscode-spring-boot/package-lock.json | 10 ++-- .../vscode-spring-boot/scripts/preinstall.sh | 10 +++- 21 files changed, 148 insertions(+), 47 deletions(-) diff --git a/nodejs-packages/jvm-launch-utils/package.json b/nodejs-packages/jvm-launch-utils/package.json index 6c17b7ed3..5b968a8f5 100644 --- a/nodejs-packages/jvm-launch-utils/package.json +++ b/nodejs-packages/jvm-launch-utils/package.json @@ -1,6 +1,6 @@ { "name": "@pivotal-tools/jvm-launch-utils", - "version": "0.0.11", + "version": "0.0.12", "description": "Provides utilities useful for launching Java processes from node packages.", "files": [ "src", diff --git a/nodejs-packages/jvm-launch-utils/src/jvm-util.ts b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts index af838faaa..dce8a43d6 100644 --- a/nodejs-packages/jvm-launch-utils/src/jvm-util.ts +++ b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts @@ -41,6 +41,8 @@ export interface JVM { * using spring-boot-maven-plugin ZIP layout. */ jarLaunch(jar: string, vmargs?: string[], execFileOptions?: ChildProcess.ExecFileOptions) : ChildProcess.ChildProcess + + mainClassLaunch(mainClass: string, classpath: string[], jvmArgs: string[], execFileOptions?: ChildProcess.ExecFileOptions): ChildProcess.ChildProcess } /** @@ -216,6 +218,27 @@ class JVMImpl implements JVM { args.push("-jar", jar); return ChildProcess.execFile(this.getJavaExecutable(), args, execFileOptions); } + + mainClassLaunch(mainClass: string, classpath: string[], jvmArgs: string[], execFileOptions?: ChildProcess.ExecFileOptions): ChildProcess.ChildProcess { + const args: string[] = []; + + // Classpath + args.push('-cp'); + let classpathStr = classpath.join(Path.delimiter); + const toolsJar = this.getToolsJar(); + if (toolsJar) { + classpathStr += Path.delimiter + toolsJar; + } + args.push(classpathStr); + + // JVM Arguments + args.push(...jvmArgs); + + // Main class + args.push(mainClass); + + return ChildProcess.execFile(this.getJavaExecutable(), args, execFileOptions); + } } function getJavaInfo(javaExe : string) : Promise> { diff --git a/vscode-extensions/commons-vscode/package-lock.json b/vscode-extensions/commons-vscode/package-lock.json index 2f9642af2..4c25b125b 100644 --- a/vscode-extensions/commons-vscode/package-lock.json +++ b/vscode-extensions/commons-vscode/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.11.tgz", - "integrity": "sha512-PSBzegFv+m1AaAlHBtWzfxdxZG3RFJaTNk0ognOjDV+URrPnMWkD2DBt4pgEGynpnnK8G5WZZGVu5flcIsKGyQ==" + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.12.tgz", + "integrity": "sha512-6VnPe6TkVYr9UCOOlVVEAxhC+mEVt4Hevzc4eoDvUKFxexOD8MY38z6VNpa+lyhdvF6p5+Its/zfCPhdQlbhrQ==" }, "@types/node": { "version": "7.10.2", diff --git a/vscode-extensions/commons-vscode/package.json b/vscode-extensions/commons-vscode/package.json index b258a3257..590c1e153 100644 --- a/vscode-extensions/commons-vscode/package.json +++ b/vscode-extensions/commons-vscode/package.json @@ -24,7 +24,7 @@ "prepack": "node ./node_modules/vscode/bin/install && tsc -p ./" }, "dependencies": { - "@pivotal-tools/jvm-launch-utils": "0.0.11", + "@pivotal-tools/jvm-launch-utils": "0.0.12", "portfinder": "^0.4.0", "deep-equal": "^1.0.1" }, diff --git a/vscode-extensions/commons-vscode/src/launch-util.ts b/vscode-extensions/commons-vscode/src/launch-util.ts index 7ef8fb51d..07180899d 100644 --- a/vscode-extensions/commons-vscode/src/launch-util.ts +++ b/vscode-extensions/commons-vscode/src/launch-util.ts @@ -25,6 +25,7 @@ import { JVM, findJvm, findJdk } from '@pivotal-tools/jvm-launch-utils'; import { registerClasspathService } from './classpath'; import {HighlightCodeLensProvider} from "./code-lens-service"; import {registerJavaDataService} from "./java-data"; +import * as path from "path"; let p2c = P2C.createConverter(); @@ -43,6 +44,13 @@ export interface ActivatorOptions { checkjvm?: (context: VSCode.ExtensionContext, jvm: JVM) => any; preferJdk?: boolean; highlightCodeLensSettingKey?: string; + explodedLsJarData?: ExplodedLsJarData; +} + +export interface ExplodedLsJarData { + lsLocation: string; + mainClass: string; + configFileName?: string; } type JavaOptions = { @@ -160,15 +168,35 @@ export function activate(options: ActivatorOptions, context: VSCode.ExtensionCon args.unshift(DEBUG_ARG); } - // Start the child java process - let launcher = findServerJar(Path.resolve(context.extensionPath, 'jars')); - let child = jvm.jarLaunch(launcher, args, processLaunchoptions); - child.stdout.on('data', (data) => { - log("" + data); - }); - child.stderr.on('data', (data) => { - error("" + data); - }) + let child: ChildProcess.ChildProcess = null; + if (options.explodedLsJarData) { + const explodedLsJarData = options.explodedLsJarData; + const lsRoot = Path.resolve(context.extensionPath, explodedLsJarData.lsLocation); + + // Add config file if needed + if (explodedLsJarData.configFileName) { + args.push(`-Dspring.config.location=file:${Path.resolve(lsRoot, `BOOT-INF/classes/${explodedLsJarData.configFileName}`)}`); + } + + // Add classpath + const classpath: string[] = []; + classpath.push(Path.resolve(lsRoot, 'BOOT-INF/classes')); + classpath.push(`${Path.resolve(lsRoot, 'BOOT-INF/lib')}${Path.sep}*`); + + child = jvm.mainClassLaunch(explodedLsJarData.mainClass, classpath, args, processLaunchoptions); + } else { + // Start the child java process + const launcher = findServerJar(Path.resolve(context.extensionPath, 'jars')); + child = jvm.jarLaunch(launcher, args, processLaunchoptions); + } + if (child) { + child.stdout.on('data', (data) => { + log("" + data); + }); + child.stderr.on('data', (data) => { + error("" + data); + }) + } }); }); }); diff --git a/vscode-extensions/vscode-bosh/.gitignore b/vscode-extensions/vscode-bosh/.gitignore index 2932a75be..0c2978e52 100644 --- a/vscode-extensions/vscode-bosh/.gitignore +++ b/vscode-extensions/vscode-bosh/.gitignore @@ -1,5 +1,6 @@ out node_modules +language-server target *.log *.log.* diff --git a/vscode-extensions/vscode-bosh/lib/Main.ts b/vscode-extensions/vscode-bosh/lib/Main.ts index 9a56654ca..e2bc43481 100644 --- a/vscode-extensions/vscode-bosh/lib/Main.ts +++ b/vscode-extensions/vscode-bosh/lib/Main.ts @@ -33,6 +33,11 @@ export function activate(context: VSCode.ExtensionContext) { extensionId: 'vscode-bosh', jvmHeap: "48m", workspaceOptions: VSCode.workspace.getConfiguration("bosh.ls"), + explodedLsJarData: { + lsLocation: 'language-server', + mainClass: 'org.springframework.ide.vscode.bosh.BoshLanguageServerBootApp', + configFileName: 'application.properties' + }, clientOptions: { documentSelector: [ { diff --git a/vscode-extensions/vscode-bosh/package-lock.json b/vscode-extensions/vscode-bosh/package-lock.json index 1f7220e11..00b9dcc68 100644 --- a/vscode-extensions/vscode-bosh/package-lock.json +++ b/vscode-extensions/vscode-bosh/package-lock.json @@ -1,22 +1,22 @@ { "name": "vscode-bosh", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@pivotal-tools/commons-vscode": { "version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz", - "integrity": "sha512-hgbMlJKDCkG3xQsTNEKFcGgic/zuSkkqRD2HOx5xeHbPdFAuQbv7eXNNFRxaw1cLU8re/s4gHWAa56bESqP5RQ==", + "integrity": "sha512-9N8DcTRaBBdduPvmlvpXLbyW8DQXTwlESUhNNUCksmik0O0TxJn3GH4c7K2I9Wdon5CGbpEROU0dY4l+rKUWEA==", "requires": { - "@pivotal-tools/jvm-launch-utils": "0.0.11", + "@pivotal-tools/jvm-launch-utils": "0.0.12", "deep-equal": "^1.0.1", "portfinder": "^0.4.0" } }, "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.11.tgz", - "integrity": "sha512-PSBzegFv+m1AaAlHBtWzfxdxZG3RFJaTNk0ognOjDV+URrPnMWkD2DBt4pgEGynpnnK8G5WZZGVu5flcIsKGyQ==" + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.12.tgz", + "integrity": "sha512-6VnPe6TkVYr9UCOOlVVEAxhC+mEVt4Hevzc4eoDvUKFxexOD8MY38z6VNpa+lyhdvF6p5+Its/zfCPhdQlbhrQ==" }, "@types/node": { "version": "7.10.2", diff --git a/vscode-extensions/vscode-bosh/scripts/preinstall.sh b/vscode-extensions/vscode-bosh/scripts/preinstall.sh index 37843a0a2..0fda00e18 100755 --- a/vscode-extensions/vscode-bosh/scripts/preinstall.sh +++ b/vscode-extensions/vscode-bosh/scripts/preinstall.sh @@ -14,6 +14,12 @@ npm install ../commons-vscode/*-commons-vscode-*.tgz cd ../../headless-services/bosh-language-server ./build.sh -rm -fr ${workdir}/jars -mkdir -p ${workdir}/jars -cp target/*-exec.jar ${workdir}/jars +#Clean old LS folder +rm -fr ${workdir}/language-server +mkdir -p ${workdir}/language-server + +# Explode LS JAR +cd ${workdir}/language-server +server_jar_file=$(find ${workdir}/../../headless-services/bosh-language-server/target -name '*-exec.jar'); +jar -xvf ${server_jar_file} + diff --git a/vscode-extensions/vscode-concourse/.gitignore b/vscode-extensions/vscode-concourse/.gitignore index 2932a75be..0c2978e52 100644 --- a/vscode-extensions/vscode-concourse/.gitignore +++ b/vscode-extensions/vscode-concourse/.gitignore @@ -1,5 +1,6 @@ out node_modules +language-server target *.log *.log.* diff --git a/vscode-extensions/vscode-concourse/lib/Main.ts b/vscode-extensions/vscode-concourse/lib/Main.ts index 1c771379b..a09f1b5f5 100644 --- a/vscode-extensions/vscode-concourse/lib/Main.ts +++ b/vscode-extensions/vscode-concourse/lib/Main.ts @@ -36,6 +36,11 @@ export function activate(context: VSCode.ExtensionContext) { extensionId: 'vscode-concourse', jvmHeap: "48m", workspaceOptions: VSCode.workspace.getConfiguration("concourse.ls"), + explodedLsJarData: { + lsLocation: 'language-server', + mainClass: 'org.springframework.ide.vscode.concourse.ConcourseLanguageServerBootApp', + configFileName: 'application.properties' + }, clientOptions: { documentSelector: [ { diff --git a/vscode-extensions/vscode-concourse/package-lock.json b/vscode-extensions/vscode-concourse/package-lock.json index d33f5a411..558aeb6cc 100644 --- a/vscode-extensions/vscode-concourse/package-lock.json +++ b/vscode-extensions/vscode-concourse/package-lock.json @@ -1,22 +1,22 @@ { "name": "vscode-concourse", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@pivotal-tools/commons-vscode": { "version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz", - "integrity": "sha512-hgbMlJKDCkG3xQsTNEKFcGgic/zuSkkqRD2HOx5xeHbPdFAuQbv7eXNNFRxaw1cLU8re/s4gHWAa56bESqP5RQ==", + "integrity": "sha512-9N8DcTRaBBdduPvmlvpXLbyW8DQXTwlESUhNNUCksmik0O0TxJn3GH4c7K2I9Wdon5CGbpEROU0dY4l+rKUWEA==", "requires": { - "@pivotal-tools/jvm-launch-utils": "0.0.11", + "@pivotal-tools/jvm-launch-utils": "0.0.12", "deep-equal": "^1.0.1", "portfinder": "^0.4.0" } }, "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.11.tgz", - "integrity": "sha512-PSBzegFv+m1AaAlHBtWzfxdxZG3RFJaTNk0ognOjDV+URrPnMWkD2DBt4pgEGynpnnK8G5WZZGVu5flcIsKGyQ==" + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.12.tgz", + "integrity": "sha512-6VnPe6TkVYr9UCOOlVVEAxhC+mEVt4Hevzc4eoDvUKFxexOD8MY38z6VNpa+lyhdvF6p5+Its/zfCPhdQlbhrQ==" }, "@types/node": { "version": "7.10.2", diff --git a/vscode-extensions/vscode-concourse/scripts/preinstall.sh b/vscode-extensions/vscode-concourse/scripts/preinstall.sh index 7d2341ba8..1ae3079bc 100755 --- a/vscode-extensions/vscode-concourse/scripts/preinstall.sh +++ b/vscode-extensions/vscode-concourse/scripts/preinstall.sh @@ -14,6 +14,11 @@ npm install ../commons-vscode/*-commons-vscode-*.tgz cd ../../headless-services/concourse-language-server ./build.sh -rm -fr ${workdir}/jars -mkdir -p ${workdir}/jars -cp target/*-exec.jar ${workdir}/jars +#Clean old LS folder +rm -fr ${workdir}/language-server +mkdir -p ${workdir}/language-server + +# Explode LS JAR +cd ${workdir}/language-server +server_jar_file=$(find ${workdir}/../../headless-services/concourse-language-server/target -name '*-exec.jar'); +jar -xvf ${server_jar_file} diff --git a/vscode-extensions/vscode-manifest-yaml/.gitignore b/vscode-extensions/vscode-manifest-yaml/.gitignore index 2932a75be..e24f6f6b9 100644 --- a/vscode-extensions/vscode-manifest-yaml/.gitignore +++ b/vscode-extensions/vscode-manifest-yaml/.gitignore @@ -5,6 +5,7 @@ target *.log.* .idea *.iml +language-server dependency-reduced-pom.xml classpath.txt *.vsix diff --git a/vscode-extensions/vscode-manifest-yaml/lib/Main.ts b/vscode-extensions/vscode-manifest-yaml/lib/Main.ts index e10036504..9fa055b52 100644 --- a/vscode-extensions/vscode-manifest-yaml/lib/Main.ts +++ b/vscode-extensions/vscode-manifest-yaml/lib/Main.ts @@ -33,6 +33,11 @@ export function activate(context: VSCode.ExtensionContext) { extensionId: 'vscode-manifest-yaml', workspaceOptions: VSCode.workspace.getConfiguration("cloudfoundry-manifest.ls"), jvmHeap: '64m', + explodedLsJarData: { + lsLocation: 'language-server', + mainClass: 'org.springframework.ide.vscode.manifest.yaml.ManifestYamlLanguageServerBootApp', + configFileName: 'application.properties' + }, clientOptions: { documentSelector: [ { diff --git a/vscode-extensions/vscode-manifest-yaml/package-lock.json b/vscode-extensions/vscode-manifest-yaml/package-lock.json index c4ec8657a..c3ef285ad 100644 --- a/vscode-extensions/vscode-manifest-yaml/package-lock.json +++ b/vscode-extensions/vscode-manifest-yaml/package-lock.json @@ -1,22 +1,22 @@ { "name": "vscode-manifest-yaml", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@pivotal-tools/commons-vscode": { "version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz", - "integrity": "sha512-hgbMlJKDCkG3xQsTNEKFcGgic/zuSkkqRD2HOx5xeHbPdFAuQbv7eXNNFRxaw1cLU8re/s4gHWAa56bESqP5RQ==", + "integrity": "sha512-9N8DcTRaBBdduPvmlvpXLbyW8DQXTwlESUhNNUCksmik0O0TxJn3GH4c7K2I9Wdon5CGbpEROU0dY4l+rKUWEA==", "requires": { - "@pivotal-tools/jvm-launch-utils": "0.0.11", + "@pivotal-tools/jvm-launch-utils": "0.0.12", "deep-equal": "^1.0.1", "portfinder": "^0.4.0" } }, "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.11.tgz", - "integrity": "sha512-PSBzegFv+m1AaAlHBtWzfxdxZG3RFJaTNk0ognOjDV+URrPnMWkD2DBt4pgEGynpnnK8G5WZZGVu5flcIsKGyQ==" + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.12.tgz", + "integrity": "sha512-6VnPe6TkVYr9UCOOlVVEAxhC+mEVt4Hevzc4eoDvUKFxexOD8MY38z6VNpa+lyhdvF6p5+Its/zfCPhdQlbhrQ==" }, "@types/node": { "version": "7.10.2", diff --git a/vscode-extensions/vscode-manifest-yaml/scripts/preinstall.sh b/vscode-extensions/vscode-manifest-yaml/scripts/preinstall.sh index 7287196dd..0e3ba60c5 100755 --- a/vscode-extensions/vscode-manifest-yaml/scripts/preinstall.sh +++ b/vscode-extensions/vscode-manifest-yaml/scripts/preinstall.sh @@ -14,6 +14,13 @@ npm install ../commons-vscode/*-commons-vscode-*.tgz cd ../../headless-services/manifest-yaml-language-server ./build.sh -rm -fr ${workdir}/jars -mkdir -p ${workdir}/jars -cp target/*-exec.jar ${workdir}/jars +#Clean old LS folder +rm -fr ${workdir}/language-server +mkdir -p ${workdir}/language-server + +# Explode LS JAR +cd ${workdir}/language-server +server_jar_file=$(find ${workdir}/../../headless-services/manifest-yaml-language-server/target -name '*-exec.jar'); +jar -xvf ${server_jar_file} + + diff --git a/vscode-extensions/vscode-spring-boot/.gitignore b/vscode-extensions/vscode-spring-boot/.gitignore index e0fd3a462..37494b06d 100644 --- a/vscode-extensions/vscode-spring-boot/.gitignore +++ b/vscode-extensions/vscode-spring-boot/.gitignore @@ -5,6 +5,7 @@ target *.log.* classpath.txt *.vsix +language-server repo .idea *.iml diff --git a/vscode-extensions/vscode-spring-boot/lib/Main.ts b/vscode-extensions/vscode-spring-boot/lib/Main.ts index 9b597a7d3..5c38d6322 100644 --- a/vscode-extensions/vscode-spring-boot/lib/Main.ts +++ b/vscode-extensions/vscode-spring-boot/lib/Main.ts @@ -27,6 +27,11 @@ export function activate(context: VSCode.ExtensionContext): Thenable