从gradle任务执行commons math java类

fd3cxomn  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(418)

我需要从jar文件中包含的gradle任务类执行。
例如,我想创建一个gradle任务来执行类fastmath(http://commons.apache.org/proper/commons-math/download_math.cgi).
当前的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)
  }
}
lx0bsm1f

lx0bsm1f1#

嗯,您的构建脚本中有多个问题。
如果你使用 mavenCentral() 作为存储库,从那里使用依赖关系,您将获得可传递的依赖关系解决方案和自动冲突解决方案,并且您不必将libs保存在vcs中或任何地方,因此 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) ,或添加 import org.apache.commons.math3.util.FastMath 以前的任何地方。通常,这是在文件中最上面完成的,就像java一样。
即使两者都要做,也不会起作用,因为您将依赖项添加到实际项目的编译类路径中。相反,您需要将它放在构建脚本的类路径中,因此您需要移动 dependencies a内的块 buildscript 如果你遵循建议1,那么当然 repositories 阻止。你还需要 classpath 而不是 compile 在依赖关系声明中。

相关问题