2017-04-08 8 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); 
    } 
} 

である私は、テストを実行すると、それは見つけることができなかったというエラーが表示されますdirプロパティ

Caused by: groovy.lang.MissingPropertyException 

私に何かが不足していますか?

+0

なぜプラグインクラスを 'project.tasks.create'に渡していますか? @OliverCharlesworth。 –

+0

コピーするときに間違いを起こした。 – 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

関連する問題