Class projectDir在Gradle脚本中的任务类中不可见
这是IntellJ上新创建的gradle/Groovy空项目上的build.gradle集的一个示例。这里我在两个地方使用projectDir:在任务定义和任务类定义中。IntelliJ显示了第一个使用错误-无法解析符号。它认为第二种用法是正确的Class projectDir在Gradle脚本中的任务类中不可见,class,intellij-idea,groovy,gradle-task,Class,Intellij Idea,Groovy,Gradle Task,这是IntellJ上新创建的gradle/Groovy空项目上的build.gradle集的一个示例。这里我在两个地方使用projectDir:在任务定义和任务类定义中。IntelliJ显示了第一个使用错误-无法解析符号。它认为第二种用法是正确的 group 'test' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'groovy' sourceCompatibility = 1.8 repositories {
group 'test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'groovy'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.11'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
task ProjectDirTest(type: ProjectDirTestClass){
println " -------------- $projectDir from task"
}
class ProjectDirTestClass extends DefaultTask {
@TaskAction
def greet() {
println " -------------- $projectDir from class"
}
}
configure(ProjectDirTest) {
group = 'ProjectDirTest'
description = 'ProjectDirTest'
}
但是如果我运行任务,第一个println工作正常,输出正确:
12:55:41: Executing external task 'ProjectDirTest'...
-------------- C:\Users\543829657\testWorkspace from task
:ProjectDirTest FAILED
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\543829657\testWorkspace\build.gradle' line: 28
* What went wrong:
Execution failed for task ':ProjectDirTest'.
> Could not get unknown property 'projectDir' for task ':ProjectDirTest' of type ProjectDirTestClass.
但是,正如您所看到的,在第二个println中有一个问题-Gradle没有看到projectDir
变量
我已经习惯了错误的IntelliJ标记错误。但是如何使task类在运行时看到projectDir
变量呢
在真正的任务类中,我也不能使用exec()命令-Gradle也没有看到它 我找到了一个临时解决方案,将项目变量传递到类中并调用所有项目变量:
task ProjectDirTest(type: ProjectDirTestClass){
println " -------------- $projectDir from task"
projectLoc = project
}
class ProjectDirTestClass extends DefaultTask {
Project projectLoc
@TaskAction
def greet() {
println " -------------- ${projectLoc.projectDir} from class"
}
}
消极的一面是,对于使用该任务类的每个任务,我都必须通过相同的项目。这不是一种好的风格