После установки jre1.8.0_121 на SLES11 и RedHat7 параметр -Dname = value игнорируется движком nashorn при запуске из командной строки с jjs, если он не префикс -J.Nashorn in jre1.8.0_121 изменил поведение для передачи аргументов?
Кроме того, разделитель аргументов «-» передается в javascript при использовании shebang.
Согласно интерактивной справке, он должен работать так:
$ /usr/java/jre1.8.0_121/bin/jjs -h
jjs [<options>] <files> [-- <arguments>]
-D (-Dname=value. Set a system property. This option can be repeated.)
В приведенном ниже примере я намеренно оставил хижину! заголовок в javascript. Он не должен быть там, но раскрывает другую разницу между u102 и u121 в том, как аргументы передаются в javascript args.js.
Прослеживание примера без -J показывает, что локальные свойства args.log.properties никогда не читаются. Вместо этого используется значение по умолчанию /usr/java/jre1.8.0_121/lib/logging.properties. Если я заменил файл /usr/java/jre1.8.0_121/lib/logging.properties своим файлом настраиваемых свойств, все будет в порядке.
Является ли это намеренно измененным поведением в u121?
args.sh:
#!/bin/bash -x
/usr/java/jre1.8.0_102/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 $*
/usr/java/jre1.8.0_121/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 $*
args.js:
#!/usr/bin/env jjs
print (arguments);
print ($ARG[0]);
var logger = java.util.logging.Logger;
var log = logger.getLogger("args");
log.info("log output");
args.log.properties:
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level=ALL
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %3$s %5$s%6$s%n
При запуске с 2-мя различными JREs это показано ниже разницы , Пользовательские параметры ведения журнала игнорируются, а разделитель аргументов «-» передается как первый аргумент javascipt. :
$ ./args.sh arg3
+ /usr/java/jre1.8.0_102/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3
arg1,arg2,arg3
arg1
2017-02-03 11:34:59 INFO args log output
+ /usr/java/jre1.8.0_121/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3
--,arg1,arg2,arg3
--
Feb 03, 2017 11:35:00 AM jdk.nashorn.internal.scripts.Script$args :program
INFO: log output
$
Добавление «-J» перед -Д решает вопрос системы собственности и работает как с JREs. Вопрос о shebang остается:
$ ./args.sh arg3
+ /usr/java/jre1.8.0_102/bin/jjs -scripting -J-Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3
arg1,arg2,arg3
arg1
2017-02-03 14:04:03 INFO args log output
+ /usr/java/jre1.8.0_121/bin/jjs -scripting -J-Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3
--,arg1,arg2,arg3
--
2017-02-03 14:04:04 INFO args log output
$
Можете ли вы помочь мне понять, что этот вопрос должен сделать с JavaScript? – evolutionxbox