Search code examples
javaeclipsespring-tool-suitetools.jar

Missing tools.jar in SpringTools Suite when invoking via command line


I'm seeing the following screen:

similar question

upon STS startup via script:

start /B C:\"Program Files"\SpringTools4\sts-4.5.0.RELEASE\SpringToolSuite4.exe -data %~dp0 -clean -showlocation -vmC:\Java\jdk1.8.0_144\bin\java.exe -vmargs -Xmx1024m -XX:MaxPermSize=256m -vmargs -javaagent:lombok.jar

Here's my SpringToolSuite4.ini:

-startup
plugins/org.eclipse.equinox.launcher_1.5.600.v20191014-2022.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1100.v20190907-0426
-product
org.springframework.boot.ide.branding.sts4
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-javaagent:C:\Program Files\SpringTools4\sts-4.5.0.RELEASE\lombok.jar

JAVA_HOME environment variable is defined:

enter image description here

According to Eclipse documentation:

-vm (Executable, Main)

when passed to the Eclipse executable, this option is used to locate the Java VM to use to run Eclipse. It should be the full file system path to an appropriate: Java jre/bin directory, Java Executable, Java shared library (jvm.dll or libjvm.so), or a Java VM Execution Environment description file. If not specified, the Eclipse executable uses a search algorithm to locate a suitable VM. In any event, the executable then passes the path to the actual VM used to Java Main using the -vm argument. Java Main then stores this value in eclipse.vm.

I checked this for possible pointers and tried different variations of configurations, i.e.:

  • start STS from its .exe file and not from the above script and then specifying the workspace
  • putting -vm option into the .ini file before the -vmargs
  • pointing the -vm to the folder containing the java.exe instead of to that specific file
  • pointing to the javaw.exe instead of java.exe
  • having the -vm point to a JRE directory and not to a JDK one.
  • etc.

Same error persists.

Looks like something redirects STS to look inside C:\Program Files\Java\jre1.8.0_191 instead of C:\Java\jdk1.8.0_144\bin or C:\Java\jdk1.8.0_144\jre\bin where I'm pointing it to.

What could be wrong here?

Thank you in advance.

UPDATE:

As Martin suggested, the following modification:

enter image description here

if invoked by double-clicking the STS executable, results in opening 2 STS windows: a regular STS one (now without the initial missing tools.jar prompt) plus this one:

enter image description here

however, when run via script from the command line, as before, fails to open STS altogether:

enter image description here


THE FINAL SOLUTION:

As correctly pointed out by Martin in his comment, there are several issues with the above script:

  • -vm requires a space after it and the path to the JDK
  • duplicated -vmargs was the culprit causing the initial erroneous behavior
  • pointing to the javaw.exe instead of java.exe helps to hid the second window.
  • -XX:MaxPermSize=256m is no longer necessary under Java 8.

With the above in mind, here is what's working now:

1) The SpringToolSuite4.ini can stay intact, there's no need (although it's possible and working) to add the path to JDK there as pointed in my previous update:

  -startup
    plugins/org.eclipse.equinox.launcher_1.5.600.v20191014-2022.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1100.v20190907-0426
    -product
    org.springframework.boot.ide.branding.sts4
    --launcher.defaultAction
    openFile
    -vmargs
    -Dosgi.requiredJavaVersion=1.8
    -Xms256m
    -Xmx1024m
    -XX:+UseG1GC
    -XX:+UseStringDeduplication
    --add-modules=ALL-SYSTEM
    -javaagent:C:\Program Files\SpringTools4\sts-4.5.0.RELEASE\lombok.jar

2) The STS can now be successfully invoked via the following (on Windows):

start /B C:\"Program Files"\SpringTools4\sts-4.5.0.RELEASE\SpringToolSuite4.exe -data %~dp0 -clean -showlocation -vm C:\Java\jdk1.8.0_144\bin\java.exe -vmargs -Xmx1024m  

Solution

  • Adding the -vm arg to the .ini file should work, but you need to carefully put that into the right place inside of that file. -vm has to be the first line in that file, followed by an additional like pointing to the java executable of the JDK. Then the third line should proceed with the -startup part that you have in your .ini file.