我需要从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)
}
}
答案 0 :(得分:2)
好吧,你的buildcript中有多个问题。
如果您使用mavenCentral()
作为存储库,使用那里的依赖项,您将获得传递依赖项解析和自动冲突解决,并且您不必将libs保留在VCS中或任何地方,因此{ {1}}实际应该是compile files('/pathToJars/commons-math3-3.6.1.jar')
。
正如您所正确指出的那样,您必须使用完全限定的类名或导入,因此,要么compile 'org.apache.commons:commons-math3:3.6.1'
替换println FastMath.abs(3)
,要么先添加println org.apache.commons.math3.util.FastMath.abs(3)
。通常,这是在文件中最顶层完成的,就像Java一样。
即使您同时执行这两项操作,也无法正常工作,因为您将依赖项添加到实际项目的编译类路径中。相反,您需要在构建脚本的类路径中使用它,因此您需要在import org.apache.commons.math3.util.FastMath
块内移动dependencies
块,如果您遵循建议1,那么当然也需要buildscript
块。在依赖声明中,您还需要repositories
而不是classpath
。