2017-04-08 69 views
0

我在將其他屬性傳遞給gradle任務時遇到問題。這是我的構建文件將額外屬性傳遞給Gradle任務的問題

buildscript { 
    repositories { 
} 


ext { 
    dir = '' 
} 

apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'groovy' 

group = 'group' 
version = 'version' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.4' 
} 

repositories { 

} 
dependencies { 
    compile gradleApi() 
    compile localGroovy() 

} 

正如你所看到的,我有一個額外的屬性爲dir初始化爲''。現在,這裏是我的任務

class MyTask extends DefaultTask { 
    File myDir = project.dir 

    @TaskAction 
    public void action() { 
    } 
} 

我的插件

class MyPlugin implements Plugin<Project> { 
    @Override 
    def void apply(Project project) { 
     project.tasks.create("myTask", MyTask) 
    } 

} 

而這個單元測試

public class TestPlugin { 
    @Test 
    public void testPlugin() { 
     Project project = ProjectBuilder.builder().build(); 
     project.getPlugins().apply(TestPlugin.class); 
     Assert.assertTrue(project.getProject().getTasks().findByName("myTask") instanceof MyTask); 
    } 
} 

現在,當我運行測試,它顯示了錯誤,它找不到目錄屬性。

Caused by: groovy.lang.MissingPropertyException 

我錯過了什麼嗎?

+0

爲什麼你將插件類傳遞給'project.tasks.create'? –

+0

@OliverCharlesworth。複製時發生錯誤。修正了它 – user12331

回答

0

您的build.gradle腳本和您的測試沒有任何關聯。在你的測試中,你創建一個乾淨的新項目,你做的第一件(也是唯一)的事情就是應用你的自定義插件,然後創建你的自定義任務。任務屬性myDir即將設置,但被調用的屬性dir不存在於項目中,因此引發異常。

您可以定義額外的屬性dir爲您的測試項目......

Project project = ProjectBuilder.builder().build(); 
project.ext.dir = '' 
project.getPlugins().apply(TestPlugin.class); 
Assert.assertTrue(project.getProject().getTasks().findByName("myTask") instanceof MyTask); 

...或將您的新插件您build.gradle腳本的項目(當您完成)。

+0

project.ext.dir =''不起作用。它沒有找到ext屬性 – user12331