使用 java 程序从它的目录执行 Java jar
Execute Java jar from it's directory using java program
我正在尝试使用 ClassLoader
执行另一个 java jar,一旦执行此 jar。它在其目录中查找特定文件。
启动这个 jar 时如何设置工作目录?
我在启动 jar 之前使用了 System.setProperty("user.dir", "C:\abc");
,但是它不起作用。
我正在尝试在另一个线程中启动 jar
在启动 jar 之前,我尝试设置工作目录。
System.setProperty("user.dir", "C:\abc");
File jarfile = new File("myjar.jar");
Manifest manifest = jar.getManifest();
Attributes attrs = manifest.getMainAttributes();
String mainClassName = attrs.getValue(Attributes.Name.MAIN_CLASS);
URL url = new URL("file", null, jarfile.getCanonicalPath());
ClassLoader cl = new URLClassLoader(new URL[] { url });
Class<?> mainClass = cl.loadClass(mainClassName);
Method mainMethod = mainClass.getMethod("main", new Class[] { String[].class });
mainMethod.setAccessible(true);
int mods = mainMethod.getModifiers();
if (mainMethod.getReturnType() != void.class
|| !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
throw new NoSuchMethodException("main");
}
String[] args2 = new String[1];
args2[0] = "service=slave";
mainMethod.invoke(mainClass, new Object[] { args2 });
如果您在 java 应用程序中调用 main 方法,您将不会启动新的 Java 应用程序。
在这种情况下,您正在执行静态方法,就像任何其他静态方法一样,因此当前目录与当前 Java 应用程序的工作目录相同。
如果您正在寻找一种在现有 Java 应用程序中执行 java 应用程序的方法,您必须创建另一个进程。
一个例子:
List<String> command = new ArrayList<String>();
command.add("java -jar xxxxx.jar");
command.add("argument to Main method");
command.add("another argument to Main method");
ProcessBuilder builder = new ProcessBuilder(command);
File workingDirectory = new File("/myworkingdirectory");
builder.directory(workingDirectory);
Process process = builder.start();
我正在尝试使用 ClassLoader
执行另一个 java jar,一旦执行此 jar。它在其目录中查找特定文件。
启动这个 jar 时如何设置工作目录?
我在启动 jar 之前使用了 System.setProperty("user.dir", "C:\abc");
,但是它不起作用。
我正在尝试在另一个线程中启动 jar 在启动 jar 之前,我尝试设置工作目录。
System.setProperty("user.dir", "C:\abc");
File jarfile = new File("myjar.jar");
Manifest manifest = jar.getManifest();
Attributes attrs = manifest.getMainAttributes();
String mainClassName = attrs.getValue(Attributes.Name.MAIN_CLASS);
URL url = new URL("file", null, jarfile.getCanonicalPath());
ClassLoader cl = new URLClassLoader(new URL[] { url });
Class<?> mainClass = cl.loadClass(mainClassName);
Method mainMethod = mainClass.getMethod("main", new Class[] { String[].class });
mainMethod.setAccessible(true);
int mods = mainMethod.getModifiers();
if (mainMethod.getReturnType() != void.class
|| !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
throw new NoSuchMethodException("main");
}
String[] args2 = new String[1];
args2[0] = "service=slave";
mainMethod.invoke(mainClass, new Object[] { args2 });
如果您在 java 应用程序中调用 main 方法,您将不会启动新的 Java 应用程序。
在这种情况下,您正在执行静态方法,就像任何其他静态方法一样,因此当前目录与当前 Java 应用程序的工作目录相同。
如果您正在寻找一种在现有 Java 应用程序中执行 java 应用程序的方法,您必须创建另一个进程。
一个例子:
List<String> command = new ArrayList<String>();
command.add("java -jar xxxxx.jar");
command.add("argument to Main method");
command.add("another argument to Main method");
ProcessBuilder builder = new ProcessBuilder(command);
File workingDirectory = new File("/myworkingdirectory");
builder.directory(workingDirectory);
Process process = builder.start();