我需要从 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)
}
}
我收到此错误消息:
What went wrong: Execution failed for task ':t1'. Could not get unknown property 'FastMath' for task ':t1' of type org.gradle.api.DefaultTask.
我知道我缺少类导入,例如添加以下语句,但我不知道如何或在哪里:
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)
}
}
最佳答案
嗯,您的构建脚本中有多个问题。
如果您使用
mavenCentral()
作为存储库,请使用那里的依赖项,您将获得传递依赖项解决和自动冲突解决,并且不必将库保留在 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 一样。即使您同时执行这两项操作,也不会起作用,因为您将依赖项添加到实际项目的编译类路径中。相反,您需要将它放在构建脚本的类路径中,因此您需要将
dependency
block 移动到buildscript
block 内,如果您遵循建议 1,那么当然还有存储库
block 。您还需要在依赖项声明中使用classpath
而不是compile
。
关于java - 从 gradle 任务执行 commons-math Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041836/