Вставить приложение node.js из проекта Java с J2V8 - разрешение относительных путей в node.js

Возникли проблемы при запуске приложения Node.js (1) на JVM с использованием J2V8 из другого приложения на основе Java (2). Запуск сценария приложения (1) завершается неудачно

fs.readFileSync('./lib/someFile.json') 

потому что J2V8 обеспечивает '.' путь к корневому каталогу приложения (2), но мне нужно '.' путь к корневому каталогу приложения (1).

Как я могу справиться с этим, только внося изменения в проект (2)?

ОБНОВЛЕНИЕ: добавлен код Java, который запускает приложение node.js.

public static void main(String[] args) {
        final NodeJS nodeJS = NodeJS.createNodeJS();
        File nodeScript = new File("/media/Projects/Test/start.js");
        nodeJS.exec(nodeScript);
        while(nodeJS.isRunning()) {
            nodeJS.handleMessage();
        }
        nodeJS.release();
}

1 ответ

Решение

Ты можешь использовать __dirname иметь путь к каталогу, в котором находится ваш Node-скрипт.

Например:

fs.readFileSync(__dirname + '/lib/someFile.json');

может сделать то, что вам нужно.

Или используя path.join:

var path = require('path');
fs.readFileSync(path.join(__dirname, 'lib', 'someFile.json');

с path.join Вы можете делать такие вещи, как:

console.log(path.join(__dirname, '..', 'lib', 'someFile.json'));

чтобы получить доступ lib это на один уровень выше вашей программы Node и т. д. Также, благодаря path.join вам не нужно думать о разделителях пути в разных операционных системах (например, / в Unix/Linux и \ на винде).

Внося только изменения в ваш Java-проект, вам придется запускать приложение Node с другим рабочим каталогом. Это зависит от того, как вы его запустите, но вам нужно поменять каталог на тот, который вы хотите иметь '.' укажите перед запуском Node-приложения. Вы не предоставили пример кода для фактического запуска приложения Node из вашего Java-приложения, поэтому трудно сказать что-либо еще.

Обновить

Кажется, вы используете J2V8. На GitHub есть открытая проблема, связанная с тем, что вы пытаетесь сделать: Проблема № 185: Установите рабочий каталог.

Вы можете попытаться изменить рабочий каталог, прежде чем запускать свою программу Node из Java - используя все, что является Java-эквивалентом chdir системный вызов.

В качестве альтернативы вы можете скопировать вашу программу Node в ваш проект Java, так что их '.' каталоги одинаковы, так что вы можете вызвать его с помощью:

File nodeScript = new File("./start.js");

Когда вы можете позвонить start.js как ./start.js тогда '.' в узле должен быть каталог, где start.js файл находится в.

Другие вопросы по тегам