在构建之前评估Gradle插件/任务

时间:2017-09-26 09:21:02

标签: java gradle build.gradle

我的一个插件使用由另一个项目的gradle构建创建的文件。 但是gradle会在构建之前评估插件任务。有没有办法在构建完成后创建插件任务?

编辑:

这是build.gradle

apply plugin: 'confluence-export'

sourceSets {
    tools
}

compileToolsJava {
    source += sourceSets.main.java
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

dependencies {
    toolsCompile files("${System.getProperty('java.home')}/../lib/tools.jar")
}

task generateTagDoc(type: JavaExec) {
    classpath = sourceSets.tools.runtimeClasspath
    main = 'TagsDocumentation'
    outputs.upToDateWhen { false }
}


task generateTypeDoc(type: Javadoc) {
    classpath = sourceSets.tools.runtimeClasspath
    source = sourceSets.main.allJava
    options.docletpath = compileToolsJava.outputs.files.asList()
    options.doclet = "ExtractCommentsDoclet"
    options.addStringOption("Tags.java")
    outputs.upToDateWhen { false }
}
confluence {
    spaceKey = *****
    exportAll = true
    title = *******
    exportUser = "******
    exportPassword = ******
    libraryName = ******
    host = ********
}
asciidoctor {
    resources {
        from(sourceDir) {
            include 'img/**'
        }
    }
}

asciidoctor.dependsOn(generateTagDoc)
generateTagDoc.dependsOn(generateTypeDoc)
generateTypeDoc.dependsOn(compileToolsJava)

所以在这里我希望我的构建运行,它将在build文件夹中创建一个文件夹asciidoc / html5,其中包含我asciidoc文件中创建的所有html页面。我的插件遍历每个文件并为其创建任务,然后将其上传到网站。问题是在构建之前评估插件任务,因此尚未创建文件夹asciidoc / html5。如果我添加一个检查以查看该文件夹是否已创建,它确实会删除我的错误,但任务仍然是空的。这就是为什么我想知道在构建完成后是否有一种方法可以创建插件任务,以便创建文件夹。

编辑2: 这是插件创建:

class ConfluenceExportPlugin extends ConfluencePluginBase implements Plugin<Project> {
    @Override
    void apply(Project project) {
        def confluenceExtension = project.extensions.create('confluence', ConfluenceExtension)

        project.afterEvaluate {
            if (confluenceExtension.exportAll) {
                def list = []
                def dir = new File("${project.buildDir}/asciidoc/html5")
                if(dir.exists() && dir.isDirectory())
                dir.eachFileRecurse(FileType.FILES) {
                    if(it.name.endsWith('.html')) {
                        list.add(it)
                    }
                }

                Task mainTask = project.task('confluenceExport')
                mainTask.dependsOn("build")
                list.each { file ->
                    def curName = file.name.take(file.name.lastIndexOf('.'))
                    ConfluenceExportTask subTask = createTask(project, "confluenceExport${curName}", confluenceExtension, file.path, curName)
                    mainTask.dependsOn(subTask)
                }
            }
            else {
                ConfluenceExportTask task = createTask(project, "confluenceExport", confluenceExtension, getManFile(confluenceExtension, project), confluenceExtension.title)
            }
        }

    }

    ConfluenceExportTask createTask(Project project, String taskName, def confluenceExtension, manFile, String pageTitle ){
        ConfluenceExportTask task = project.task(type: ConfluenceExportTask, taskName)
        task.conventionMapping.map "user", { confluenceExtension.user }
        task.conventionMapping.map "password", { confluenceExtension.password }
        task.conventionMapping.map "spaceKey", { confluenceExtension.spaceKey }
        task.conventionMapping.map "manFile", { manFile }
        task.conventionMapping.map "pageTitle", { pageTitle }
        task
    }

    String getManFile(ConfluenceExtension configuration, Project project) {
        configuration.exportSourceFilePath ?: "${project.buildDir}/asciidoc/html5/${configuration.libraryName}.html"
    }
}

0 个答案:

没有答案