Search code examples
javajarcygwinshexecutable-jar

Why can I not execute my java project from a script?


I am working on a project that has many module jar files, one of which conains my main class; I am trying to write a shell script that will setup the class path and then start the application; here is my script.

#!/bin/sh
java -cp "modules/*;lib/*" com.example.Launcher

In this example, com.example.Launcher is the class that contains public static void main(String[] args)...

The issue that I am facing is that when executing my script by ./myscript I am give the output

Error: Could not find or load main class com.example.Launcher

This would be simple, there is something wrong with the classpath right?

But if directly from the command line I execute

java -cp "modules/*;lib/*" com.example.Launcher

the exact same command from the script, in the directory the script resides, everything works just fine.

Any thoughts?

side note
I am running this via CygWin

another side note
This might be an issue with sh in CygWin. I coppied this build to a CentOS machine and tried executing it, changing the ; to a : allowed for execution from the script.

The issue persists on my window machine even with the change.

a third sidenote
It would again appear that the issue is with sh in CygWin, my final solution was this:

launcher.sh will invoke java using a : in the classpath

launcher.bat will invoke java using a ; in the classpath


Solution

  • On Unix-like systems the seperator is a : (not a ;). Change

    java -cp "modules/*;lib/*" com.example.Launcher
    

    to

    java -cp "modules/*:lib/*" com.example.Launcher