Gradle构建失败,无法运行程序没有此类文件或目录

时间:2016-05-19 09:53:38

标签: gradle

我有一个gradle构建文件,其中包含以下任务,需要运行sphinx-build,我在Mac OS X上使用gradle信息运行它。

task makeDocs(type:Exec) {
    workingDir 'sphinx'
    commandLine 'sphinx-build'
    args = ["-b", "html", "-d", "build/doctrees", "-t", "$platformDir", "build/ppsource", "build/html"]
}

当我运行此任务时,我得到以下异常:

Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'sphinx-build'
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
    at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:65)
    ... 1 more
Caused by: java.io.IOException: Cannot run program "sphinx-build" (in directory "/Users/idoran/Documents/Seebo/dev/SDK/seebosdk_docs/sphinx"): error=2, No such file or directory
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    ... 3 more
Caused by: java.io.IOException: error=2, No such file or directory

当我从同一个终端运行sphinx-build时,一切正常。

$ gradle --version

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_65 (Oracle Corporation 25.65-b01)
OS:           Mac OS X 10.10.5 x86_64

4 个答案:

答案 0 :(得分:5)

您不应该使用commandLine + argscommandLine包含可执行文件和所有参数,或executable + args通常是更好的选择。

答案 1 :(得分:3)

我有类似的问题..借助Vampire的解决方案,我能够加强..然而问题似乎是sh文件无法指向确切的文件位置。

意思是,即使正确设置workingDir(其中实际的sh文件驻留),仍然会出现以下异常。

Caused by: java.io.IOException: error=2, No such file or directory

最后,这个post解决了这个问题..

虽然此帖子的问题的原始问题已经解决,但考虑共享将绝对文件路径添加到实际sh文件的解决方案将在未来解决"No such file or directory"问题。

我遇到了类似的问题,并通过对sh文件的绝对路径引用解决了问题。

我的是,

workingDir = "path_to_the_actual_sh_file_to_be_executed"
executable = new File(workingDir, 'actual.sh')
args = ['configure', 'manageRepo', '-tenant', 'etc...']

答案 2 :(得分:1)

尝试使用./gradlew --stop停止gradle守护程序

我也遇到了类似的问题,例如:

commandLine = [ "node", "--version"]

它归结为gradle守护程序,该守护程序的缓存位置已不存在(我之前曾更新过节点)。

答案 3 :(得分:0)

可能由于多种原因而发生此错误。不幸的是,从错误消息中并不能始终始终清楚是哪个问题。

  1. hour('2009-07-30 12:58:59') = 12不存在。在任务运行之前,请确保指定的目录存在,或在hour('12:58:59') = 12块中创建该目录,如下所示:

    import org.apache.spark.sql.expressions.Window
    import org.apache.spark.sql.functions._
    
    val rawData = spark.read.csv("data.csv")
    
    // Busy Hours calculation
    val windowSpecBusyHours = Window.partitionBy("_c4").orderBy(col("transactions").desc)
    val busyHours = rawData
      .withColumn("hours", hour(col("_c3")))
      .groupBy("_c4", "hours").agg(count("*").alias("transactions"))
      .withColumn("dense_rank", dense_rank().over(windowSpecBusyHours))
      .select("_c4", "hours", "transactions").where(col("dense_rank") === 1)
    busyHours.show(false)
    
    // Less Busy Hours calculation
    val windowSpecLessBusyHours = Window.partitionBy("_c4").orderBy(col("transactions").asc)
    val lessBusyHours = rawData
      .withColumn("hours", hour(col("_c3")))
      .groupBy("_c4", "hours").agg(count("*").alias("transactions"))
      .withColumn("dense_rank", dense_rank().over(windowSpecLessBusyHours))
      .select("_c4", "hours", "transactions").where(col("dense_rank") === 1)
    lessBusyHours.show(false)
    
  2. 指定的可执行文件不存在或不在路径上。如其他答案所述,请确保同时指定 workingDir doFirsttask makeDocs(type: Exec) { workingDir 'sphinx' executable 'sphinx-build' args = ["-b", "html", /* other args... */] doFirst { workingDir.mkdirs() } } 。所以:

    commandLine

    或等效地

    executable