2010-12-02 2 views
2

У меня есть программа, которая создаст дочерний процесс, и я хочу, чтобы он наследовал весь путь к классу от родителя. В Javadoc, он говорит:Java, inherit classpath с Runtime.exec()

общественного процесса Exec (String [] cmdarray, String [] envp) бросает IOException

Выполняет указанную команду и аргументы в отдельном процессе с указанной средой.

Учитывая массив строк cmdarray, представляющий маркеры командной строки и массив переменных envp, представляющий переменные переменной «среда», этот метод создает новый процесс, в котором выполняется указанная команда.

Если envp равно null, подпроцесс наследует настройки среды текущего процесса.

Когда я установил envp нулевое значение, ничего не наследуют.

Вот код:

System.out.print("Debug system path: "+System.getProperty("java.class.path")); 
      startTime(); 
Process proc = Runtime.getRuntime().exec(cmd,null); 

Я могу видеть информацию о пути, но эти данные путь не наследуется новым созданный процессом.

ответ

4

Как вы указали путь к классу вашего приложения? Если бы не переменная среды CLASSPATH, она не будет унаследована.

Метод Runtime.exec может вызывать любое собственное приложение, а envp здесь относится к системной среде, а не к вашей среде java.

Если вы хотите передать свой путь к классам процесса ребенок Java, вы можете сделать это явно:

String[] cmdarray = new String[] { 
    "java", "-classpath", System.getProperty("java.class.path"), "com.example.MyChildApp", "appParam"}; 

Process p = Runtime.getRuntime().exec(cmdarray); 
+0

Я пробовал и не работает должным образом. Не знаю, где это неправильно – Kavin 2010-12-02 02:55:34

0

Нет может сделать. Ваш «путь к классам» в момент вызова exec - это то, что скрывается в вашем текущем загрузчике классов во время его вызова. В общем случае вы не можете попросить загрузчика классов рассказать вам путь к классу. Это может быть выборка классов из базы данных или планеты Марс.

Чтение java.class.path покажет вам, что происходит, когда ваше приложение запускается, но не то, что происходит в то время, когда вы запускаете что-то еще.

0

Наконец, мне нужно вставить «-cp System.getProperty (« java.class.path ») в cmd, чтобы он работал.

Есть ли лучший способ сделать это?

+0

Как я уже говорил, я думаю, что это лучший способ, но я полагаю, вы также можете настроить переменную среды CLASSSPATH для соответствия System.getProperty ("java.class.path") `для дочерний процесс через envp. – ykaganovich 2010-12-02 03:11:35