2017-01-07 3 views
0

Итак, я знаю, что для разных операционных систем требуются разные разделители классов. Я запускаю сборку окон, где CMD был заменен на Powershell, что вызывает проблемы при использовании разделителя с запятой.javac powershell classpath separator

Команда, которую я пытаюсь запустить, начинается с cmd /c, чтобы попытаться запустить ее в командной строке, но я думаю, что когда PowerShell анализирует всю команду, она видит точку с запятой и думает, что это конец!

Вся моя команда:

cmd /c javac -cp PATH1;PATH2 -d DESTINATION_PATH SOURCE_PATH

Я попытался с помощью пробел, двоеточие и период не дало никаких результатов. Может ли кто-нибудь предложить решение?

Это мой первый вопрос о переполнении stackoverflow, надеюсь, что сообщество может помочь и что оно в конечном итоге поможет другим. :)

+2

'-cp "PATH1; PATH2"' –

ответ

0

Я предлагаю вам начать процесс следующим образом с помощью Powershell

Start-Process cmd.exe -ArgumentList "/c javac -cp PATH1;PATH2 -d DESTINATION_PATH SOURCE_PATH" -NoNewWindow 
+0

Что вы имеете в виду под "CMD был заменен"? CMD доступен во всех операционных системах Microsoft, включая, но не ограничиваясь последними «Windows 10». – YanivK

+0

Аппарат, на котором он не работает, использует технический предварительный просмотр Windows из программы Windows Insider. Я имею в виду [link] (http://www.networkworld.com/article/3143196/windows/microsoft-is-replacing-the-cmd-prompt-with-powershell.html). Итак, CMD вокруг, но я верьте под капот из моей java-программы, которая строит команду 'String []' PowerShell используется для ее выполнения. И мои результаты от копирования вставки команды в CMD и PowerShell поддерживают это. – user2953165

+0

Благодарим за решение. Выяснить, что PowerShell «заменяет» CMD. Я думал, что с помощью последних предварительных сборных окон процесс, созданный java-кодом 'Process pro = Runtime.getRuntime(). Exec (String [] cmdArray, String [] envp, File dir);' запускался в PowerShell not Command Подскажите сейчас. Хотя мои первоначальные попытки, казалось, поддерживали эту теорию, ошибка была фактически в другом месте. – user2953165

0

javac Запуск в ЦМД не требуется. Просто поместите цитаты вокруг аргументов, которые (могут) содержать пробельные или специальные символы. Я также рекомендую использовать call operator (&). Это необязательно в этом случае, но требуется, если вы поместите исполняемый файл в кавычки (например, поскольку исполняемый файл или путь содержит пробелы или вы хотите поместить его в переменную).

& javac -cp "PATH1;PATH2" -d "DESTINATION_PATH" "SOURCE_PATH" 

Вы можете также использовать splatting для обеспечения аргументы:

$javac = "$env:JAVA_HOME\bin\javac.exe" 
$params = '-cp', "PATH1;PATH2", 
      '-d', "DESTINATION_PATH", 
      "SOURCE_PATH" 

& $javac @params 
+0

Благодарим вас за комментарий относительно помещения 'PATH1; PATH2' в двойные кавычки. Это частично решило проблему. Я могу называть 'javac' из CMD, но я не думаю, что правильно настроил PowerShell для работы только с' javac'. Я почти уверен, что ваше решение splatting сделает трюк. – user2953165

+0

Единственное, что вам нужно для базовой настройки - это переменная среды 'JAVA_HOME' (указывая на папку, где установлен ваш JDK), и путь к' javac.exe' (обычно '% JAVA_HOME% \ bin') в вашем Переменная среды PATH. Обе переменные окружения влияют на CMD и PowerShell, т. Е. Если ваша настройка работает в CMD, она также должна работать в PowerShell. –

Смежные вопросы