[英]How to execute jar files from another folder
我目前正在为 Minecraft 构建一个 NodeJS Web 界面。 目前我正在努力启动服务器......我当前的文件夹布局如下
./node_modules
./server
./views
app.js
package-lock.json
package.json
每次我启动位于 ./servers 中的服务器时,eula.txt 和其他服务器文件都会与我的 app.js 等一起在主目录中生成。 有没有办法更改文件所在的目录?
编辑(执行 jar 的代码的缩短版本):
exec = require('child_process').exec;
exec('java -jar ' + './server/spigot-1.13.2.jar', (err, stdout, stderr) => {
if (err)
throw err;
console.log(stdout);
console.log(stderr);
});
使用spawn可以提供一个工作目录。
https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
const { spawn } = require('child_process');
const mc = spawn('java', ['-Xmx1024M', '-Xms1024M', '-jar', './server/spigot-1.13.2.jar', 'nogui'], { cwd: './new-server/' });
mc.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
mc.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
mc.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
更新:
看来您也可以使用exec这样执行此操作:
exec('java -jar ' + './server/spigot-1.13.2.jar', { cwd: './test-server' }, (err, stdout, stderr) => {
if (err)
throw err;
console.log(stdout);
console.log(stderr);
});
要加载Jar,可以使用以下类。 您只需要将罐子放在一个文件夹中,然后让它们从另一个插件加载即可。
package de.lukas.kuntze.util.utils;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class JarUtil
{
public static void loadJars()
{
System.out.println("Loading jars...");
final File jarFolder = new File("plugins" + File.separator + "jars" + File.separator);
if (!jarFolder.exists())
{
jarFolder.mkdir();
}
for (final File jar : jarFolder.listFiles())
{
try
{
final URL url = new URL("jar:" + jar.toURI().toURL().toExternalForm() + "!/");
final URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
final Class<URLClassLoader> sysclass = URLClassLoader.class;
final Method method = sysclass.getDeclaredMethod("addURL", new Class[] { URL.class });
method.setAccessible(true);
method.invoke(sysloader, new Object[] { url });
}
catch (final Exception e)
{
ExceptionUtil.handleException(e);
}
}
System.out.println("Loaded jars.");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.