从Perl脚本运行gradle

我试图从服务器上的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变量有关。