2017-07-25 60 views
0

這是一個在IntellJ上空新創建的Gradle/Groovy項目上設置build.gradle的示例。我在兩處使用projectDir:在任務定義和任務類定義中。 IntelliJ將第一次使用顯示爲不正確 - 無法解析符號。它認爲第二次使用是正確的。在Gradle腳本中,projectDir不可見於任務類

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有一個問題 - 搖籃不看變量projectDir

我已經習慣了不正確的IntelliJ標記錯誤。但是,如何讓任務類在運行時查看projectDir變量?

在真正的任務類中,我也不能使用exec()命令 - Gradle也沒有看到它。

回答

0

我找到了一個臨時的解決方案,到項目變量傳遞到類,並呼籲所有項目變量與它:

task ProjectDirTest(type: ProjectDirTestClass){ 
    println " -------------- $projectDir from task" 
    projectLoc = project 
} 

class ProjectDirTestClass extends DefaultTask { 
    Project projectLoc 
    @TaskAction 
    def greet() { 
     println " -------------- ${projectLoc.projectDir} from class" 
    } 
} 

消極的一面是,我必須使用通過每個任務的同一個項目該任務類。這是不是一個很好的風格。