Вставить приложение 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
файл находится в.