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]
Problem
I have a CLI app using Thor with
jruby
and created a compiledjar
file using warbler. When viewing the CLI help, the app name shows as<script>
instead ofmy_app_name
when running thejar
file usingjava -jar my_app_name.jar help
. If I runmy_app_name
ruby executable directly underjruby
usingbin/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 thejar
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 injruby
.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