Problem
I have a CLI app using Thor with jruby and created a compiled jar file using warbler. When viewing the CLI help, the app name shows as <script> instead of my_app_name when running the jar file using java -jar my_app_name.jar help. If I run my_app_name ruby executable directly under jruby using bin/my_app_name, then the app name shows correctly in the help text. See below.
Root Cause
The root cause is because $PROGRAM_NAME is set to <script> when running the jar file so the following method doesn't return the correct app file name as expected. https://github.com/erikhuda/thor/blob/master/lib/thor/base.rb#L674
$PROGRAM_NAME is correctly set when running directly in jruby.
Tried setting package_name but that doesn't work because it only changes Commands: to my_app_name commands:.
Possible fix
One option is to use __FILE__ instead of $PROGRAM_NAME.
Example Test Case
# bin/my_app
class MyApp < Thor
desc "hammer", "Thor's hammer"
def hammer()
"Thor's hammer"
end
end
# run in project folder -> works as expected
$ bin/my_app help
Commands:
my_app hammer
my_app help [COMMAND]
# package into jar file
$ warble compiled jar
-> creates my_app.jar
# run jar file -> doesn't work as expected
$ java -jar my_app.jar help
Commands:
<script> hammer
<script> help [COMMAND]
Ruby: jruby v9.2.13
Thor: 1.0.1
Warbler: 2.0.5
Problem
I have a CLI app using Thor with
jrubyand created a compiledjarfile using warbler. When viewing the CLI help, the app name shows as<script>instead ofmy_app_namewhen running thejarfile usingjava -jar my_app_name.jar help. If I runmy_app_nameruby executable directly underjrubyusingbin/my_app_name, then the app name shows correctly in the help text. See below.Root Cause
The root cause is because $PROGRAM_NAME is set to
<script>when running thejarfile so the following method doesn't return the correct app file name as expected. https://github.com/erikhuda/thor/blob/master/lib/thor/base.rb#L674$PROGRAM_NAME is correctly set when running directly in
jruby.Tried setting package_name but that doesn't work because it only changes
Commands:tomy_app_name commands:.Possible fix
One option is to use
__FILE__instead of$PROGRAM_NAME.Example Test Case
Ruby: jruby v9.2.13
Thor: 1.0.1
Warbler: 2.0.5