diff --git a/eclipse-language-servers/org.springframework.tooling.boot.java.ls/.project b/eclipse-language-servers/org.springframework.tooling.boot.java.ls/.project
deleted file mode 100644
index 17dc13dae..000000000
--- a/eclipse-language-servers/org.springframework.tooling.boot.java.ls/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- org.springframework.tooling.boot.java.ls
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.pde.ManifestBuilder
-
-
-
-
- org.eclipse.pde.SchemaBuilder
-
-
-
-
-
- org.eclipse.pde.PluginNature
- org.eclipse.jdt.core.javanature
-
-
diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java
index b2dd7f0d9..a96e8d80c 100644
--- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java
+++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java
@@ -27,6 +27,8 @@ import org.springframework.tooling.ls.eclipse.commons.JRE;
import org.springframework.tooling.ls.eclipse.commons.JRE.MissingJDKException;
import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector;
+import com.google.common.collect.ImmutableList;
+
/**
* @author Martin Lippert
*/
@@ -34,27 +36,27 @@ public class SpringBootLanguageServer extends STS4LanguageServerProcessStreamCon
public SpringBootLanguageServer() {
super(SPRING_BOOT_SERVER);
- List commands = new ArrayList<>();
JRE jre = getJRE();
- commands.add(jre.getJavaExecutable());
+ List vmargs = new ArrayList<>();
-// commands.add("-Xdebug");
-// commands.add("-Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n");
+// vmargs.add("-Xdebug");
+// vmargs.add("-Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n");
- commands.add("-Dlsp.lazy.completions.disable=true");
- commands.add("-Dlsp.completions.indentation.enable=true");
- commands.add("-Xmx1024m");
- commands.add("-cp");
- String classpath = getLanguageServerJARLocation();
- if (jre.toolsJar!=null) {
- classpath = jre.toolsJar + File.pathSeparator + classpath;
- }
- commands.add(classpath);
- commands.add("org.springframework.boot.loader.JarLauncher");
+ vmargs.add("-Dlsp.lazy.completions.disable=true");
+ vmargs.add("-Dlsp.completions.indentation.enable=true");
+ vmargs.add("-Xmx1024m");
String workingDir = getWorkingDirLocation();
- setCommands(commands);
+ setCommands(jre.jarLaunchCommand(getLanguageServerJARLocation(),
+ ImmutableList.of(
+ //"-Xdebug",
+ // "-Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n"
+ "-Dlsp.lazy.completions.disable=true",
+ "-Dlsp.completions.indentation.enable=true",
+ "-Xmx1024m"
+ )
+ ));
setWorkingDirectory(workingDir);
}
diff --git a/eclipse-language-servers/org.springframework.tooling.bosh.ls/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.bosh.ls/META-INF/MANIFEST.MF
index f2dc78719..16c49a5f7 100644
--- a/eclipse-language-servers/org.springframework.tooling.bosh.ls/META-INF/MANIFEST.MF
+++ b/eclipse-language-servers/org.springframework.tooling.bosh.ls/META-INF/MANIFEST.MF
@@ -16,7 +16,8 @@ Require-Bundle: org.eclipse.jdt.launching;bundle-version="3.9.0",
org.eclipse.lsp4j;bundle-version="0.4.0",
org.eclipse.ui.workbench,
org.eclipse.jface,
- org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0"
+ org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0",
+ com.google.guava
Import-Package: com.google.gson;version="2.7.0",
org.eclipse.jface.preference,
org.osgi.framework
diff --git a/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java
index 45f43f3cb..46848678e 100644
--- a/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java
+++ b/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java
@@ -10,12 +10,12 @@
*******************************************************************************/
package org.springframework.tooling.bosh.ls;
+import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.BOSH_SERVER;
+
import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.List;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
@@ -24,7 +24,7 @@ import org.osgi.framework.Bundle;
import org.springframework.tooling.ls.eclipse.commons.JRE;
import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector;
-import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*;
+import com.google.common.collect.ImmutableList;
/**
* @author Martin Lippert
@@ -33,22 +33,13 @@ public class BoshLanguageServer extends STS4LanguageServerProcessStreamConnector
public BoshLanguageServer() {
super(BOSH_SERVER);
- List commands = new ArrayList<>();
- commands.add(JRE.currentJRE().getJavaExecutable());
-
-// commands.add("-Xdebug");
-// commands.add("-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n");
-
- commands.add("-Dlsp.lazy.completions.disable=true");
- commands.add("-Dlsp.completions.indentation.enable=true");
-
- commands.add("-jar");
- commands.add(getLanguageServerJARLocation());
-
- String workingDir = getWorkingDirLocation();
-
- setCommands(commands);
- setWorkingDirectory(workingDir);
+ setCommands(JRE.currentJRE().jarLaunchCommand(getLanguageServerJARLocation(), ImmutableList.of(
+ //"-Xdebug",
+ //"-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n",
+ "-Dlsp.lazy.completions.disable=true",
+ "-Dlsp.completions.indentation.enable=true"
+ )));
+ setWorkingDirectory(getWorkingDirLocation());
}
protected String getLanguageServerJARLocation() {
diff --git a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/META-INF/MANIFEST.MF
index 5ff9fc65c..40a21a737 100644
--- a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/META-INF/MANIFEST.MF
+++ b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/META-INF/MANIFEST.MF
@@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.jdt.launching;bundle-version="3.8.0",
org.eclipse.lsp4e;bundle-version="0.5.0",
org.eclipse.lsp4j;bundle-version="0.4.0",
org.eclipse.lsp4j.jsonrpc;bundle-version="0.4.0",
- org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0"
+ org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0",
+ com.google.guava
Import-Package: org.eclipse.jface.preference,
org.osgi.framework
Export-Package: org.springframework.tooling.cloudfoundry.manifest.ls
diff --git a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java
index 655b93677..290810063 100644
--- a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java
+++ b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java
@@ -31,6 +31,8 @@ import org.osgi.framework.Bundle;
import org.springframework.tooling.ls.eclipse.commons.JRE;
import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector;
+import com.google.common.collect.ImmutableList;
+
import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*;
/**
@@ -46,23 +48,13 @@ public class CloudFoundryManifestLanguageServer extends STS4LanguageServerProces
public CloudFoundryManifestLanguageServer() {
super(CLOUDFOUNDRY_SERVER);
- List commands = new ArrayList<>();
-
- commands.add(JRE.currentJRE().getJavaExecutable());
-
-// commands.add("-Xdebug");
-// commands.add("-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n");
-
-// commands.add("-Dlsp.lazy.completions.disable=true");
- commands.add("-Dlsp.completions.indentation.enable=true");
-
- commands.add("-jar");
- commands.add(getLanguageServerJARLocation());
-
- String workingDir = getWorkingDirLocation();
-
- setCommands(commands);
- setWorkingDirectory(workingDir);
+ setCommands(JRE.currentJRE().jarLaunchCommand(getLanguageServerJARLocation(), ImmutableList.of(
+ //"-Xdebug",
+ //"-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n",
+ "-Dlsp.lazy.completions.disable=true",
+ "-Dlsp.completions.indentation.enable=true"
+ )));
+ setWorkingDirectory(getWorkingDirLocation());
}
@Override
diff --git a/eclipse-language-servers/org.springframework.tooling.concourse.ls/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.concourse.ls/META-INF/MANIFEST.MF
index 462c6206e..125520bb8 100644
--- a/eclipse-language-servers/org.springframework.tooling.concourse.ls/META-INF/MANIFEST.MF
+++ b/eclipse-language-servers/org.springframework.tooling.concourse.ls/META-INF/MANIFEST.MF
@@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.jdt.launching;bundle-version="3.9.0",
org.eclipse.tm4e.ui;bundle-version="0.1.0",
org.eclipse.ui.workbench,
org.eclipse.jface,
- org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0"
+ org.springframework.tooling.ls.eclipse.commons;bundle-version="4.0.0",
+ com.google.guava
Import-Package: com.google.gson;version="2.7.0",
org.eclipse.jface.preference,
org.osgi.framework
diff --git a/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java
index d511ca904..1030193fc 100644
--- a/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java
+++ b/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java
@@ -10,12 +10,12 @@
*******************************************************************************/
package org.springframework.tooling.concourse.ls;
+import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.CONCOURSE_SERVER;
+
import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.List;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
@@ -24,7 +24,7 @@ import org.osgi.framework.Bundle;
import org.springframework.tooling.ls.eclipse.commons.JRE;
import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector;
-import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*;
+import com.google.common.collect.ImmutableList;
/**
* @author Martin Lippert
@@ -33,22 +33,13 @@ public class ConcourseLanguageServer extends STS4LanguageServerProcessStreamConn
public ConcourseLanguageServer() {
super(CONCOURSE_SERVER);
- List commands = new ArrayList<>();
- commands.add(JRE.currentJRE().getJavaExecutable());
-
-// commands.add("-Xdebug");
-// commands.add("-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n");
-
- commands.add("-Dlsp.lazy.completions.disable=true");
- commands.add("-Dlsp.completions.indentation.enable=true");
-
- commands.add("-jar");
- commands.add(getLanguageServerJARLocation());
-
- String workingDir = getWorkingDirLocation();
-
- setCommands(commands);
- setWorkingDirectory(workingDir);
+ setCommands(JRE.currentJRE().jarLaunchCommand(getLanguageServerJARLocation(), ImmutableList.of(
+ //"-Xdebug",
+ //"-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=n",
+ "-Dlsp.lazy.completions.disable=true",
+ "-Dlsp.completions.indentation.enable=true"
+ )));
+ setWorkingDirectory(getWorkingDirLocation());
}
protected String getLanguageServerJARLocation() {
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/JRE.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/JRE.java
index a9882ffc3..0b724fb9c 100644
--- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/JRE.java
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/JRE.java
@@ -18,6 +18,10 @@ import java.util.Set;
import java.util.function.Consumer;
import org.eclipse.jdt.internal.launching.StandardVMType;
+import org.eclipse.ui.internal.commands.CommandService;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
@SuppressWarnings("restriction")
public class JRE {
@@ -53,11 +57,11 @@ public class JRE {
* Get a JRE, with a paired tools jar if it is needed based on current JRE version
* and whether the caller wants it.
*
- * @return The tools.jar, or null if none is needed.
+ * @return The JRE.
* @throws MissingToolsJarException If tools jar is needed but could not be found.
- * @throws MissingJava9JDKException
+ * @throws MissingJDKException
*/
- public static JRE findJRE(boolean needJdk) throws MissingJDKException {
+ public static JRE findJRE(boolean needJdk) throws MissingJDKException, MissingToolsJarException {
File mainHome = new File(System.getProperty("java.home"));
if (!needJdk) {
return new JRE(mainHome, null);
@@ -151,4 +155,23 @@ public class JRE {
}
public final File javaHome;
}
+
+ /**
+ * Creates a 'command' that can be used to launch a executable jar
+ * with this jre. The tools.jar, if available, is added automatically to the classpath
+ * via a "-Dloader.path" argument. For this to work properly, the executable
+ * jar should be packaged with Spring Boot Properties loader (i.e. specify `ZIP` layout
+ * in the spring-boot-maven plugin configuration)
+ */
+ public List jarLaunchCommand(String jarLocation, List vmargs) {
+ ImmutableList.Builder command = ImmutableList.builder();
+ command.add(getJavaExecutable());
+ if (toolsJar!=null) {
+ command.add("-Dloader.path="+toolsJar);
+ }
+ command.addAll(vmargs);
+ command.add("-jar");
+ command.add(jarLocation);
+ return command.build();
+ }
}