PT #165978425: Exploded LS Jar for VSCode

This commit is contained in:
BoykoAlex
2019-05-14 14:40:40 -04:00
parent 73187f79bb
commit f53070f3b5
21 changed files with 148 additions and 47 deletions

View File

@@ -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",

View File

@@ -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<Map<string, string>> {

View File

@@ -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",

View File

@@ -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"
},

View File

@@ -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);
})
}
});
});
});

View File

@@ -1,5 +1,6 @@
out
node_modules
language-server
target
*.log
*.log.*

View File

@@ -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: [
{

View File

@@ -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",

View File

@@ -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}

View File

@@ -1,5 +1,6 @@
out
node_modules
language-server
target
*.log
*.log.*

View File

@@ -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: [
{

View File

@@ -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",

View File

@@ -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}

View File

@@ -5,6 +5,7 @@ target
*.log.*
.idea
*.iml
language-server
dependency-reduced-pom.xml
classpath.txt
*.vsix

View File

@@ -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: [
{

View File

@@ -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",

View File

@@ -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}

View File

@@ -5,6 +5,7 @@ target
*.log.*
classpath.txt
*.vsix
language-server
repo
.idea
*.iml

View File

@@ -27,6 +27,11 @@ export function activate(context: VSCode.ExtensionContext): Thenable<LanguageCli
VSCode.window.showWarningMessage('JAVA_HOME or PATH environment variable seems to point to a JRE. A JDK is required, hence Boot Hints are unavailable.');
}
},
explodedLsJarData: {
lsLocation: 'language-server',
mainClass: 'org.springframework.ide.vscode.boot.app.BootLanguagServerBootApp',
configFileName: 'application.properties'
},
workspaceOptions: VSCode.workspace.getConfiguration("spring-boot.ls"),
clientOptions: {
// See PT-158992999 as to why a scheme is added to the document selector

View File

@@ -6,17 +6,17 @@
"dependencies": {
"@pivotal-tools/commons-vscode": {
"version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz",
"integrity": "sha512-4nZnq7/ehz1nfZcHz5YZInEfWowepSysA2fTW0bAKoTsAQivmP92qly88HXf4tM1tOLxahyqAK5Rx7lbbct2wQ==",
"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=="
},
"@pivotal-tools/pipeline-builder": {
"version": "0.0.5",

View File

@@ -18,10 +18,18 @@ sed -i -e 's/constant/identifier/g' properties-support/java-properties.tmLangua
rm -fr ${workdir}/jars
mkdir -p ${workdir}/jars
#Clean old LS folder
rm -fr ${workdir}/language-server
mkdir -p ${workdir}/language-server
# Use maven to build fat jar of the language server
cd ${workdir}/../../headless-services/spring-boot-language-server
./build.sh
cp target/*-exec.jar ${workdir}/jars
# Explode LS JAR
cd ${workdir}/language-server
server_jar_file=$(find ${workdir}/../../headless-services/spring-boot-language-server/target -name '*-exec.jar');
jar -xvf ${server_jar_file}
cd ${workdir}/../../headless-services/jdt-ls-extension
cp org.springframework.tooling.jdt.ls.extension/target/*.jar ${workdir}/jars/jdt-ls-extension.jar