試圖在java中創建一個自定義的gradle插件,我如何從任務類中獲得資源路徑?
public class MyCustomPlugin implements Plugin< 專案> {
@Override
public void apply(Project project) {
project.getTasks().register("doStuff", CustomTask.class)。
}
public class CustomTask extends DefaultTask {
//如何從這里獲得java專案資源目錄?
@Inject
public CustomTask(ProjectLayout projectLayout) {
directoryProperty = projectLayout.getBuildDirectory()。
}
@TaskAction
public void execute() {
...
}
}
uj5u.com熱心網友回復:
我建議不要在任務中獲取目錄,因為提供目錄的插件可能不會被應用。相反,我會在你注冊任務的插件中進行,這樣你也可以確保必要的插件被實際應用。如果在沒有為輸入賦值的情況下使用該任務,Gradle將顯示一個錯誤,說明沒有賦值。
使用kotlin-dsl:
@CacheableTask
abstract class CustomTask : DefaultTask() {
@get:InputFiles[/span
抽象的 val資源。檔案集合
/...
我無法回答@InputFiles是否是適合你的用例的注解,因為我不知道你想對資源做什么。請參考Gradle檔案,了解更多關于可用注解的資訊,以及它們的作用。
plugins {
java
}
tasks.register<CustomTask>("customTask"/span>) {
resources.set(sourceSets.main.map { it.resources })
注意map {},它確保了我們的任務對processResources任務的依賴性,這對我們來說是自動完成的,因為我們堅持使用Gradle的提供者API來處理一切。
注意,資源默認是在一個目錄中,但它們不一定是這樣。這就是為什么資源被定義為SourceDirectorySet而不是Provider<Directory>。對于任何源自SourceSetContainer的東西也是如此。用Java源代碼來解釋比較容易:設想你有Java和Kotlin,那么你將有src/main/java和src/main/kotlin,因此有2個目錄。前者將有一個**/*.java包含過濾器,而后者有一個**/*.kt包含過濾器。如果我們只想獲得所有的源,那么我們使用sourceSets.main.map { it.java.sourceDirectories },如果我們想獲得兩者中的一個,就會變得很復雜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333017.html
標籤:
