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(); + } }