2017-03-09 65 views
1

我有一個基於java的gradle插件,它爲我們的gradle項目執行一些常見配置。現在,我想添加喜歡的任務(目前存在於我們的build.gradle每個項目)在基於java的插件中創建gradle任務

task javadocJar(type: Jar) { 
    classifier = "javadoc" 
    from javadoc 
} 

我需要的是如何做到這一點在Java的Gradle基於插件的提示。

在另一個插件我使用project.getTasks().create("myTask", MyTask.class);其中MyTask延伸AbstractTask並具有@TaskAction方法來履行職責已註冊的任務。但是我發現沒有辦法使它適應我想要處理上面的示例。

我試圖谷歌的解決方案,但直到現在我沒有找到一個有益的soution,因爲我發現的一切都是使用groovy或類似的東西,直接在build.gradle中剪切。

提前致謝!


看起來像我找到了解決辦法,至少對Javadoc任務...

Task javadocTask = project.getTasks().getByName("javadoc"); 
project.getTasks().create("javadocJar", Jar.class, task -> { 
    task.dependsOn(javadocTask); 
    task.setClassifier("javadoc"); 
    task.from(javadocTask); 
}); 

這似乎工作......但現在我有下一個任務的gradle問題:

task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

到現在爲止我還沒有找到一種方式來獲得一隻手在Java中的sourceSets varialbe。

提前致謝! :)


迴應asettoufs評論:

你鏈接都需要與子項目項目的文檔。我所擁有的是多個不相關的單個項目。對於那些我們有一個已經應用了一些插件並配置它們的插件。所以這些項目只需應用我們的插件即可擁有通用配置。

我們的插件是用java編寫的。而且應該繼續是java。現在我們想將一些更常見的構建配置的東西移動到插件 - 例如上面的一些基本任務。

+0

您看過https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:defining_common_behavior您能否更詳細地解釋一下您想要做的事情,因爲它不清楚。也許顯示一些代碼? – Adonis

+0

更新了問題 – Dodge

回答

1

爲了讓您的源設置,你可以問convention

project.getTasks().create("sourceJar", Jar.class, task -> { 
    task.setClassifier("sources"); 
    // grab the convention that holds the sourceSets 
    JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class); 
    // find our source set 
    SourceSet mainSourceSet = javaConvention.sourceSets.findByName('main'); 
    // user `from` like normal 
    task.from(mainSourceSet.getAllSource()); 
}); 

一些源代碼,看看如何JavaPlugin創建寫在Java

sourceSet創建Java convention https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L266

創建sourceSets https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L298