英文:
gradle: switching to implementation/testImplementation causing errors when accessing configuration
问题
def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath
它会报错 无法在空对象上获取属性'absolutePath'
当我尝试像这样更改它时
def jmockit = configurations.testImplementation.files.find { it.name.contains("jmockit") }.absolutePath
我会得到错误
不允许直接解决配置'testImplementation'
根据其他相关问题,我尝试了
def jmockit = configurations.compileClasspath.files.find { it.name.contains("jmockit") }.absolutePath
这再次导致了无法在空对象上获取属性'absolutePath'
的错误。
测试依赖项(testImplementation)进入哪个配置?我如何以这种方式访问它们?
不确定是否相关,但这是IntelliJ中的Java项目。
英文:
I have a project which was building fine when I was using the depricated compile
and testCompile
, but when I switch it to implementation
and testImplementation
, this reference breaks.
def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath
It gives the error Cannot get property 'absolutePath' on null object
When I try to change it like so
def jmockit = configurations.testImplementation.files.find { it.name.contains("jmockit") }.absolutePath
I get the error
Resolving configuration 'testImplementation' directly is not allowed
Based on other related questions, I've tried
def jmockit = configurations.compileClasspath.files.find { it.name.contains("jmockit") }.absolutePath
which again gives the Cannot get property 'absolutePath' on null object
error.
What configuration are testImplementation dependencies going into? How do I access them in this way?
not sure if it's relevant but this is a java project in IntelliJ.
答案1
得分: 3
它出错是因为testCompile
不是继承自testImplementation
,事实上是相反的。
你可以在Dependency configurations文档中的Figure 3. Java plugin - test source set dependency configurations中查看完整的测试配置层次结构。
你必须使用testCompileClasspath
来获取你所寻找的absolutePath
。下面是完整的示例(Kotlin DSL):
plugins {
id("java")
}
repositories {
mavenCentral()
}
group = "io.mateo.test"
dependencies {
testImplementation("org.apache.commons:commons-lang3:3.11")
testImplementation("org.jmockit:jmockit:1.49")
}
val jmockit = configurations.testCompileClasspath.get().files.filter { it.name.contains("jmockit") }[0]
println(jmockit.absoluteFile)
通过上述代码,你将看到你所需的路径:
$ ./gradlew assemble
> Configure project :
C:\Users\fmate\.gradle\caches\modules-2\files-2.1\org.jmockit\jmockit.49\e281fc6778c43060402505f062f6515c2adeb037\jmockit-1.49.jar
BUILD SUCCESSFUL in 731ms
2 actionable tasks: 2 up-to-date
英文:
It breaks because testCompile
does not extend from testImplementation
. In fact it's the other way around.
You can see the full test configuration hierarchy in Figure 3. Java plugin - test source set dependency configurations from
Dependency configurations docs.
You must use the testCompileClasspath
to retrieve the absolutePath
you seek. Full example below (Kotlin DSL):
plugins {
id("java")
}
repositories {
mavenCentral()
}
group = "io.mateo.test"
dependencies {
testImplementation("org.apache.commons:commons-lang3:3.11")
testImplementation("org.jmockit:jmockit:1.49")
}
val jmockit = configurations.testCompileClasspath.get().files.filter { it.name.contains("jmockit") }[0]
println(jmockit.absoluteFile)
With the above, you will see the path you're after:
$ ./gradlew assemble
> Configure project :
C:\Users\fmate\.gradle\caches\modules-2\files-2.1\org.jmockit\jmockit.49\e281fc6778c43060402505f062f6515c2adeb037\jmockit-1.49.jar
BUILD SUCCESSFUL in 731ms
2 actionable tasks: 2 up-to-date
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论