从gradle任务

时间:2017-09-04 17:31:34

标签: java gradle plugins build

我需要从jar文件中包含的gradle任务类执行。

例如,我想创建一个能够执行FastMath类(http://commons.apache.org/proper/commons-math/download_math.cgi)的gradle任务。

当前的build.gradle脚本如下:

apply plugin: 'java'


repositories {
   mavenCentral()
}

dependencies {
    compile files('/pathToJars/commons-math3-3.6.1.jar')
}

task t1 {
    doLast {
        println FastMath.abs(3)
    }
}

我收到此错误消息:

  

出了什么问题:   任务':t1'的执行失败。   无法为org.gradle.api.DefaultTask类型的任务':t1'获取未知属性'FastMath'。

我理解我缺少类导入,例如添加以下语句但我不知道如何或在哪里:

import org.apache.commons.math3.util.FastMath;

我想知道我做错了什么或者如何配置脚本。任何建议将不胜感激。

编辑1:实际工作的代码如下:

apply plugin:'java'
import org.apache.commons.math3.util.FastMath;

buildscript {
  repositories {
    mavenCentral()
}

    dependencies {
      classpath 'org.apache.commons:commons-math3:3.6.1'
    }
}

task t1 {
  doLast {
      println FastMath.abs(3)
  }
}

1 个答案:

答案 0 :(得分:2)

好吧,你的buildcript中有多个问题。

  1. 如果您使用mavenCentral()作为存储库,使用那里的依赖项,您将获得传递依赖项解析和自动冲突解决,并且您不必将libs保留在VCS中或任何地方,因此{ {1}}实际应该是compile files('/pathToJars/commons-math3-3.6.1.jar')

  2. 正如您所正确指出的那样,您必须使用完全限定的类名或导入,因此,要么compile 'org.apache.commons:commons-math3:3.6.1'替换println FastMath.abs(3),要么先添加println org.apache.commons.math3.util.FastMath.abs(3)。通常,这是在文件中最顶层完成的,就像Java一样。

  3. 即使您同时执行这两项操作,也无法正常工作,因为您将依赖项添加到实际项目的编译类路径中。相反,您需要在构建脚本的类路径中使用它,因此您需要在import org.apache.commons.math3.util.FastMath块内移动dependencies块,如果您遵循建议1,那么当然也需要buildscript块。在依赖声明中,您还需要repositories而不是classpath