Перед тем, как пометить это как дубликат, внимательно прочтите. Задача gradle (kotlin dsl), которую я выполняю, выполняет команду maven в подкаталоге. Странно то, что у меня есть maven в переменной PATH как в System, так и в User. Если я перейду в этот каталог с помощью CMD или git bash, я могу выполнить любую команду maven. Так что проблема не может быть в том, что он просто не находится в переменных среды. На самом деле у меня была эта проблема в каждом проекте, где команда mvn выполняется с помощью кода.
fun cmd(vararg args: String, directory: File, printToStdout: Boolean = false): Pair<Int, String?> {
val p = ProcessBuilder()
.command(*args)
.redirectErrorStream(true)
.directory(directory)
.start()
val output = p.inputStream.bufferedReader().use {
val lines = LinkedList<String>()
it.lines().peek(lines::add).forEach { line ->
println(line)
}
lines.joinToString(separator = "\n")
}
val exit = p.waitFor()
return exit to output
}
Вызываем это так:
cmd("mvn", "install:install-file", "-q", "-Dfile=${project.projectDir.resolve("work/1.15.2-mojang-mapped.jar").absolutePath}", "-Dpackaging=jar", "-DgroupId=me.minidigger", "-DartifactId=minecraft-server", "-Dversion=\"$minecraftversion-SNAPSHOT\"", directory = project.projectDir)
Это приводит к:
java.io.IOException: Cannot run program "mvn" (in directory "....."): CreateProcess error=2, Das System kann die angegebene Datei nicht finden
Изменить: это не должен быть код, так как у других нет этой проблемы. Я, кстати, использую windows 10
Обновление: , поэтому кажется, что, хотя «mvn» работает при вызове его вручную, он должен быть «mvn.bat», если вызывается из кода. Однако необходимость вручную изменять и проверять это в коде не кажется оптимальным решением. Тем более, что часть кода, вызывающего mvn, загружена в задачу и не может быть отредактирована вручную до