从本地文件应用Gradle插件

kqhtkvqz  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(154)

我有以下gradle插件,它可以完成启动java进程的工作。此代码位于项目的buildSrc目录下名为startAppServerPlugin.gradle的文件中。
插件的代码看起来像这样:

repositories.jcenter()
    dependencies {
        localGroovy()
        gradleApi()
    }
}

public class StartAppServer implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.task('startServer', type: StartServerTask)
    }
}

public class StartServerTask extends DefaultTask {

    String command
    String ready
    String directory = '.'

    StartServerTask(){
        description = "Spawn a new server process in the background."
    }

    @TaskAction
    void spawn(){
        if(!(command && ready)) {
            throw new GradleException("Ensure that mandatory fields command and ready are set.")
        }

        Process process = buildProcess(directory, command)
        waitFor(process)
    }

    private waitFor(Process process) {
        def line
        def reader = new BufferedReader(new InputStreamReader(process.getInputStream()))
        while ((line = reader.readLine()) != null) {
            logger.quiet line
            if (line.contains(ready)) {
                logger.quiet "$command is ready."
                break
            }
        }
    }

    private static Process buildProcess(String directory, String command) {
        def builder = new ProcessBuilder(command.split(' '))
        builder.redirectErrorStream(true)
        builder.directory(new File(directory))
        def process = builder.start()
        process
    }

}

我试图找出一种方法,有这个导入到我的主要build.gradle文件,由于一切我尝试到目前为止一直不成功。
到目前为止,我已经尝试了这个:

apply from: 'startAppServerPlugin.gradle'
apply plugin: 'fts.gradle.plugins'

但它一直在失败。我试着在网上搜索我需要做的事情的例子,但到目前为止我还没有成功。有人能提供一个提示,我应该如何做到这一点?

3zwtqj6y

3zwtqj6y1#

您走在正确的道路上。第一步是使用以下命令导入外部gradle构建:

apply from: 'startAppServerPlugin.gradle'

然后,您可以使用以下命令应用插件:

apply plugin: StartAppServer
  • 请参阅脚本插件和应用二进制插件 *
vxqlmq5t

vxqlmq5t2#

buildSrc文件夹被视为一个包含的构建,在那里代码被编译并放在周围项目的类路径上。buildSrc中的实际build.gradle文件仅用于编译该项目,您放在其中的内容在其他地方不可用。
你应该在buildSrc下创建你的类作为一个普通的Java/Groovy/Kotlin项目。我不知道你是否可以使用默认的包,但通常最好的做法是有一个包名。
例如,您的StartAppServer插件应该在buildSrc/src/main/groovy/my/package/StartAppServer.groovy中。然后您可以使用apply plugin: my.package.StartAppServer在构建脚本中应用它。
user guide中有很多很好的例子。

h43kikqp

h43kikqp3#

startAppServerPlugin.gradle脚本中,您可以调用

apply plugin: StartAppServer

相关问题