Per, we sort of have debated this some time ago, when groovy-all.jar was, sadly, removed.
We use a similar approach, nevertheless, we need much more complex classpath. On the other hand, since we deploy WebObjects, we just could take the standard NeXT/Apple WO launch script and very slightly change the thing. Almost surely won't be useable for anybody as-is (too much of the old, not-needed-today stuff), but just for comparation/ideas, should you want to, you may check it at https://ocs.cz/CD/ServerLaunchScript, and one of our classpaths (our build scripts generate them build-time along with JAR creation) at https://ocs.cz/CD/ClassPath.txt. All the best, OC > On 23. 2. 2025, at 12:40, Per Nyfelt <p...@alipsa.se> wrote: > > Thanks for this! > > For the use case you mention it makes perfect sense to do it that way. > > Since I don't want to include groovy jars in every jar bundle, I ended up > with this instead: https://github.com/Alipsa/groovyjar/blob/main/groovyjar > <https://github.com/Alipsa/groovyjar/blob/main/groovyjar> > I still think something similar would be nice and useful as part of the > groovy distribution (e.g. when installed by sdkman) > > Best regards, > > Per > > On 2/23/25 01:53, steve.etchel...@gmail.com > <mailto:steve.etchel...@gmail.com> wrote: >> Hi Per, >> >> I have had (very) good luck with a slightly different approach. >> >> Rather than ‘groovy -jar myapp.jar’ I went with ‘java -jar myapp.jar’. >> >> And this had another, somewhat unexpected, benefit. Building my app with >> shadowJar <https://gradleup.com/shadow/> (thanks to the help I received >> here) it bundled all of groovy, all my library dependencies (database >> drivers, etc), and my app into my jar file. As a result, I don’t even need >> to install groovy on a target machine – just copy the one jar file >> (myapp.jar) to the target machine and run it via ‘java -jar myapp.jar’ and >> everything completely works. Of course this assumes that Java has been >> installed but that’s pretty ubiquitous these days and a requirement anyway. >> And I don’t have to worry about the version of groovy that happens to be >> installed on that machine as the execution will use the version of groovy >> that is inside my jar file. >> >> You can review a working example of this at >> https://github.com/mre-code/groovysql >> <https://github.com/mre-code/groovysql>. >> >> Now unfortunately, due to Java’s newer encapsulation direction >> <https://dev.java/learn/modules/strong-encapsulation/> (which does make a >> lot of sense) I ended up needing to provide a shell wrapper to provide all >> of the –add-opens settings required for (older) Java database drivers (which >> I use for this app). Now if it weren’t for those older Java database >> drivers which are using reflection I would not need the little shell wrapper >> and could just use ‘java -jar groovysql.jar’ (or even the binfmt approach >> discussed in the groovysql repository where you can just make the jar file >> executable and run it as ‘groovysql’ after removing the .jar extension from >> the file). >> >> For background, the little shell wrapper is located in >> src/main/bin/groovysql in that repository. >> >> So in order to run my app, all that anyone needs to do is to copy my jar >> file and the little shell wrapper from the Releases and place them somewhere >> in their PATH and it’s ready to run. No groovy install, no database driver >> installs, no configuration, just go. >> >> Hope this helps, >> Steve >> >> From: Per Nyfelt <p...@alipsa.se> <mailto:p...@alipsa.se> >> Sent: Saturday, February 22, 2025 2:34 PM >> To: users@groovy.apache.org <mailto:users@groovy.apache.org> >> Subject: Groovy -jar >> >> Hi, >> >> I find myself missing a way to execute groovy jars e.g: `groovy -jar >> someapp.jar`. As a workaround i can do something like the following in bash >> (error handling etc. omitted) >> >> #!/usr/bin/env bash >> # takes a single parameter (the path to the jar file to execute - it assumes >> the Main-Class attribute has been set) >> jarName="$1" >> mainClass=$(unzip -p "$jarName" "META-INF/MANIFEST.MF" | grep 'Main-Class:' >> | awk '{ print $2 }' | tr -d '\r') >> java -cp $jarName:$GROOVY_HOME/lib/* $mainClass >> But it would be nice to support this "natively" in groovy with `groovy -jar` >> >> Has support for this been discussed before? >> >> Best regards, >> >> Per >>