Я пытаюсь запустить сборку apro gradle andrpod из скрипта perl на сервере. Я пробовал различные решения, например:Запустить град из скрипта perl
my $path = Cwd::cwd();
$build_output = `cd $appFolder && ./gradlew assembleRelease | cd $path`;
Я попытался использовать систему и открыть трубку, но результат тот же.
Когда я пытаюсь добавить это в свой существующий скрипт, он не ждет, когда начнется создание градиента. Все остальные вызовы системным командам работают нормально, это просто сборка градиента, которая сразу же исчезает.
Любые идеи о том, что может быть по-разному в вызове градации?
EDIT:
перенаправлять STDERROR и выполнив следующую команду:
my $build_output = `cd $appFolder && pwd && ./gradlew assembleRelease 2>&1`;
my $err = $? >> 8;
if ($?) {
print LOG "\n\n BUILD ERROR: \n\n$err\n$build_output\n";
} else {
print LOG "\n\n BUILD OUTPUT: \n\n$build_output\n";
}
Я получаю следующее сообщение об ошибке:
BUILD ERROR:
/var/www/html/upload/myApp
1
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: /var/www/.gradle/wrapper/dists/gradle-2.2.1-all/6dibv5rcssdffbq9klf8imrndn/gradle-2.2.1-all.zip.lck (No such file or directory)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:78)
at org.gradle.wrapper.Install.createDist(Install.java:47)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: java.io.FileNotFoundException: /var/www/.gradle/wrapper/dists/gradle-2.2.1-all/6dibv5rcssdffbq9klf8imrndn/gradle-2.2.1-all.zip.lck (No such file or directory)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:49)
... 3 more
Так что мне нужно, чтобы понять, почему он ищет. gradle/folder внутри/var/www вместо папки I chdir. Я попытался установить переменную GRADLE_USER_HOME в/usr/local/gradle, но она по-прежнему ищет /var/www/.gradle/.
решаемые
Причина, почему он искал .gradle в/вар/WWW происходит потому, что скрипт запускается пользователем апача. Перемещение папки там и предоставление доступа решило проблему.
Вам не нужно «chdir» снова - все вызовы оболочки открывают подоболочку, и вы не можете повлиять на среду родителя (или cwd) из подоболочки. – Sobrique