У меня работает сборка Maven на экземпляре Travis. В ходе своих интеграционных испытаний реактор Maven выполняет команды ОС, заданные c, используя ProcessBuilder
, скажем:
String executeable = createAbsoluteFileString("hello-world.bat"); // or "hello-world.sh" for Linux
List<String> commands = new ArrayList<>();
commands.add("\"" + executeable + "\"");
commands.add("arg1");
commands.add("arg2");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
pb.start().waitFor();
На Windows это работает из IDE и сборки Maven без проблем. ,
На моем сервере Travis, который является Ubuntu, я получаю следующее исключение:
java.io.IOException: Cannot run program ""/home/travis/build/myname/myproject/myproject-it/path/hello-world.sh"": error=2, No such file or directory
Я думал, что проблема была с разрешением, поэтому я добавил следующее в конфигурацию в .travis.yml :
before_install:
- sudo chmod a+x "/home/travis/build/myname/myproject/myproject-it/path/hello-world.sh"
- ls -ails "/home/travis/build/myname/myproject/myproject-it/path/hello-world.sh"
Он печатает разрешения в виде "-rwxrwxr-x", что выглядит нормально для меня.
Поэтому я попытался проверить, могу ли я выполнить файл перед запуском сборки Maven:
before_install:
- ...
- /home/travis/build/myname/myproject/myproject-it/path/hello-world.sh arg1 arg2
Это работает, но только если я опускаю кавычки вокруг пути к файлу.
Итак, я проверил это, и если я удаляю кавычки вокруг команды в ProcessBuilder
, она также работает. Проблема в том, что я не могу убедиться, что на пути нет пробелов, поэтому я не могу их пропустить.
Так что я думаю, что это проблема Linux (возможно, кавычки неправильные символ?) или проблема Трэвиса (на моих очень старых компьютерных кавычках Cinnamon Mint работает), но, может быть, у кого-то еще есть понимание.
Как мне исправить эту проблему на моем сервере Travis?