2015-04-21 3 views
0

Я пытаюсь выполнить еще одну java-банку, используя ClassLoader, как только эта банка выполнена. Он ищет определенный файл в его каталоге.Выполнить Java-jar из его каталога с помощью java-программы

Как настроить рабочий каталог при запуске этой банки?

Я использовал System.setProperty("user.dir", "C:\\abc"); перед запуском банки, но он не работает.

Я пытаюсь запустить банку в другом потоке и перед запуском 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 }); 
+1

Я не могу понять ваш вопрос. Выполняете ли вы внешний процесс в своем приложении java, который запускает другое приложение java? – jfcorugedo

+1

Если вы запустите какой-то код из jar, загруженного через загрузчик классов, то свойства системы совпадают. Возможно, покажите нам, как вы «исполняете еще одну банку java». –

ответ

0

Если вы вызываете основной метод в своем приложении Java, вы не запустите новое приложение 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();