我试图从服务器上的perl脚本启动gradle和rpodapk版本。 我尝试了不同的解决scheme,如:
my $path = Cwd::cwd(); $build_output = `cd $appFolder && ./gradlew assembleRelease | cd $path`;
我尝试使用系统,并打开一个pipe道,但结果是一样的。
当我尝试添加到我现有的脚本,它不会等待gradle构build启动。 所有其他对系统命令的调用都可以正常工作,这只是看起来立即退出的gradle build。
任何关于在gradle调用上可能不同的想法?
编辑 :
redirectSTDERROR并运行以下命令:
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
所以我需要了解为什么它正在寻找/ var / www内的.gradle /文件夹,而不是我chdir的文件夹。 我尝试将GRADLE_USER_HOMEvariables设置为/ usr / local / gradle,但仍然search/var/www/.gradle/。
解决了
之所以在/ var / www中寻找.gradle是因为脚本是由apache用户启动的。 移动文件夹并授予访问权限解决了问题。
您不需要再次chdir
– 所有的shell调用都会打开一个子shell,您不能从子shell中影响父级的环境(或cwd)。
而且,即使你确实想这样做,你也会想||
而不是|
因为否则的话,你将输出管道输出到'cd',这几乎肯定不是你想要做的。
所以:
$build_output = `cd $appFolder && ./gradlew assembleRelease`;
应该做正确的事情。
如果没有,我唯一能想到的是:
STDIN
被连接。 (解决方法包括IPC::Open2
)。 编辑
重定向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
所以我需要了解为什么它正在寻找/ var / www内的.gradle /文件夹,而不是我chdir的文件夹。 它可能与GRADLE_USER_HOME变量有关。