Невозможно запустить exec ("cwebp ...") с Java в Travis CI

Мое приложение Java Spring требует запуска команды cwebp (https://packages.debian.org/de/sid/libwebp-dev), и все работает нормально в Windows и Mac. Это не работает на Travis CI, хотя кажется, что "which cwebp" работает / не вызывает ошибку.

Если быть точным, мои сервисы пытаются выполнить cwebp -q 82 e83376d1-3e5e-4d35-9e2e-9aaad2976984.jpg -o e83376d1-3e5e-4d35-9e2e-9aaad2976984.webp в /tmp/converter_service. Tmp-dir происходит от System.getProperty("java.io.tmpdir"). Файлы и каталог точно существуют. Пробовал много логировать, не знаю, что еще может помочь. Он всегда терпит неудачу с исключением IO и Error-Code = 2

java.io.IOException: Cannot run program "cwebp" (in directory "/tmp/spring_webp_converter_service"): error=2, No such file or directory
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at java.base/java.lang.Runtime.exec(Runtime.java:635)
    at java.base/java.lang.Runtime.exec(Runtime.java:459)

Каким-то образом выходные данные журнала говорят мне, что каталог доступен для записи и является исполняемым. Также я определенно могу записать исходный файл (файл для преобразования), и он определенно существует. Все дело в команде exec ..

Выдержка из моего кода:

process = Runtime.getRuntime().exec(execCommand, null, tmpDir);

.travis.yml

language: java

jdk:
  - oraclejdk10

before_install:
  - sudo apt-get update
  - sudo apt-get install -y libwebp-dev

cache:
  directories:
    - $HOME/.m2

Кто-нибудь знает, как я могу заставить это работать?

Вы не показывали вывод which cwebp, но легко догадаться, что его нет на PATH в Travis, и вам нужно будет указать полное имя файла.

chrylis -cautiouslyoptimistic- 28.07.2018 22:01

После рефакторинга моего кода для лучшей отладки / ведения журнала я обнаружил, что «which» работает (чтобы показать, что что-то работает) и «which cwebp« возвращает »». Следовательно, cwebp не включен в ПУТЬ

phip1611 29.07.2018 00:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел рабочее решение, чтобы получить cwebp (даже в последней версии!) В путь

before_script:
  - wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.0-linux-x86-64.tar.gz
  - tar -xzf libwebp-1.0.0-linux-x86-64.tar.gz
  - export PATH=$PATH:$PWD/libwebp-1.0.0-linux-x86-64/bin/

Другие вопросы по теме