Это происходит потому, что оболочка Windows (cmd) имеет особенность: она пытается добавить расширения exe
, 'bat', 'cmd' к командной строке, которую вы запускаете.Как только он находит первое совпадение (то есть файл, который действительно существует в файловой системе), он запускает его.
В случае maven у вас есть скрипт оболочки Unix mvn
, который не может быть выполнен в Windows и пакетном файле Windows '.bat'.Командная строка добавляет «.bat» к «mvn», который вы вводите в командной строке, видит, что файл существует, и запускает его.
Когда вы запускаете процесс из Java, у вас нет оболочки, поэтому никто не выполняет эту работу.Я бы посоветовал вам проверить операционную систему и удерживать команду для каждой ОС.Если вы хотите очистить решение, создайте файл ресурсов cmd.properties:
mvn.windows = mvn.bat
mvn.unix = mvn
Теперь проверьте ОС, используя системное свойство os.name
, и создайте команду, используя данные из cmd.properties
.
Альтернативное решение для запускакоманда, использующая cmd /c
в windows и '/ bin / sh -c' в unix, но это ничего не упрощает, поэтому я бы избежал этого.