Невозможно запустить программу "mvn", хотя maven по пути - PullRequest
2 голосов
/ 29 мая 2020

Перед тем, как пометить это как дубликат, внимательно прочтите. Задача 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, загружена в задачу и не может быть отредактирована вручную до

1 Ответ

1 голос
/ 29 мая 2020

Проверьте, что ваш ProcessBuilder.environment показывает как доступные переменные. Возможно, вам придется определить эти переменные самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...