Получение пути скрипта в Rhino - PullRequest
2 голосов
/ 18 мая 2011

Я пытаюсь найти путь к скрипту, выполняемому в Rhino.Я бы предпочел не передавать каталог в качестве первого аргумента.Я даже не знаю, как его получить.В настоящее время я вызываю Rhino через

java -jar /some/path/to/js.jar -modules org.mozilla.javascript.commonjs.module /path/to/myscript.js

и хотел бы, чтобы myscript.js распознал / path / to в качестве его имени, независимо от того, откуда я запускаю этот скрипт.Единственный другой связанный с этим вопрос и предложение, касающееся StackOverflow, заключается в передаче аргумента / path / to, но это не решение, которое я ищу.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Невозможно делать то, что вы хотите.

Возможность обнаружения источника скрипта, выполняемого интерпретатором JavaScript, не является частью спецификации языка ECMAScript или расширений оболочки Rhino..

Однако вы могли бы написать исполняемую программу-обертку, которая принимает путь к сценарию в качестве аргумента и выполняет сценарий в Rhino (например, вызывая соответствующий основной класс), а также предоставляя расположение сценария в качествепеременная окружения (или аналогичная).

0 голосов
/ 17 сентября 2013
/**
 * Gets the name of the running JavaScript file.
 *
 * REQUIREMENTS:
 * 1. On the Java command line, for the argument that specifies the script's
 *    name, there can be no spaces in it. There can be spaces in other 
 *    arguments, but not the one that specifies the path to the JavaScript 
 *    file. Quotes around the JavaScript file name are irrelevant. This is
 *    a consequence of how the arguments appear in the sun.java.command
 *    system property.
 * 2. The following system property is available: sun.java.command
 *
 * @return {String} The name of the currently running script as it appeared 
 *                  on the command line.
 */
function getScriptName() {
    var scriptName = null;

    // Put all the script arguments into a string like they are in 
    // environment["sun.java.command"].
    var scriptArgs = "";
    for (var i = 0; i < this.arguments.length; i++) {
        scriptArgs = scriptArgs + " " + this.arguments[i];
    }

    // Find the script name inside the Java command line.
    var pattern = " (\\S+)" + scriptArgs + "$";
    var scriptNameRegex = new RegExp(pattern);
    var matches = scriptNameRegex.exec(environment["sun.java.command"]);
    if (matches != null) {
        scriptName = matches[1];
    }
    return scriptName;
}

/**
 * Gets a java.io.File object representing the currently running script. Refer
 * to the REQUIREMENTS for getScriptName().
 *
 * @return {java.io.File} The currently running script file
 */
function getScriptFile() {
    return new java.io.File(getScriptName());
}

/**
 * Gets the absolute path name of the running JavaScript file. Refer to
 * REQUIREMENTS in getScriptName().
 *
 * @return {String} The full path name of the currently running script
 */
function getScriptAbsolutePath() {
    return getScriptFile().getAbsolutePath();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...