从perl脚本运行gradle

时间:2015-04-15 16:11:57

标签: android linux perl gradle server

我试图从服务器上的perl脚本启动gradle andrpod apk版本。我尝试了不同的解决方案,例如:

my $path = Cwd::cwd();
$build_output = `cd $appFolder && ./gradlew assembleRelease | cd $path`;

我尝试使用系统并使用管道打开,但结果是一样的。

当我尝试将其添加到现有脚本时,它不会等待gradle构建开始。 对系统命令的所有其他调用都可以正常工作,它只是看起来立即退出的gradle构建。

关于gradle call可能有什么不同的任何想法?

修改

重定向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变量设置为/ usr / local / gradle,但它仍然搜索/var/www/.gradle/。

解决

它在/ var / www中寻找.gradle的原因是因为脚本是由apache用户启动的。在那里移动文件夹并授予访问权限解决了问题。

1 个答案:

答案 0 :(得分:1)

您不需要再次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变量有关。