理解java中的一些groovy代码

理解java中的一些groovy代码,java,groovy,Java,Groovy,出于某种原因,我需要将groovy代码重写为java。如果重要的话,那是gradle插件。但有些代码我不懂。你能用java代码一步一步地解释一下吗 class DeployPlugin implements Plugin<Project> { @Override void apply(Project project) { project.with { apply plugin: 'org.hidetake.ssh'

出于某种原因,我需要将groovy代码重写为java。如果重要的话,那是gradle插件。但有些代码我不懂。你能用java代码一步一步地解释一下吗

class DeployPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.with {
            apply plugin: 'org.hidetake.ssh'
            ssh.settings {
                identity = file(ssh_file)
                knownHosts = allowAnyHosts
                passphrase = ssh_passphrase
            }
    ...
class DeployPlugin实现插件{
@凌驾
无效申请(项目){
计划{
应用插件:“org.hidetake.ssh”
ssh.settings{
标识=文件(ssh\u文件)
knownHosts=allowAnyHosts
密码短语=ssh\u密码短语
}
...
据我所知,
project.with{}
意味着
project
实例中调用的方法(哪些?)

apply plugin:'org.hidetake.ssh'
-它可以用
project.getPlugins().apply(“org.hidetake.ssh”)
表示吗

ssh.settings
-这里的
ssh
是什么?如果它是一个变量,如何在java中获取它的实例


ssh.settings{someExpressions}
-在这个上下文中,花括号是用来做什么的?

在Java中,代码可能看起来像这样:

public class DeployPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.getPlugins().apply("org.hidetake.ssh");
        org.hidetake.groovy.ssh.core.Service ssh = project.getExtensions().getByType(org.hidetake.groovy.ssh.core.Service.class);
        ssh.settings(new MethodClosure(this, "configureSettingsClosure"));
    }

    private void configureSettingsClosure(org.hidetake.groovy.ssh.core.settings.GlobalSettings settings) {
        settings.setIdentity(ssh_file);
        settings.setKnownHosts(settings.getAllowAnyHosts());
        settings.setPassphrase("p@ssw0rd");
    }

在Java中,代码可能与此类似:

public class DeployPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.getPlugins().apply("org.hidetake.ssh");
        org.hidetake.groovy.ssh.core.Service ssh = project.getExtensions().getByType(org.hidetake.groovy.ssh.core.Service.class);
        ssh.settings(new MethodClosure(this, "configureSettingsClosure"));
    }

    private void configureSettingsClosure(org.hidetake.groovy.ssh.core.settings.GlobalSettings settings) {
        settings.setIdentity(ssh_file);
        settings.setKnownHosts(settings.getAllowAnyHosts());
        settings.setPassphrase("p@ssw0rd");
    }

ssh
可能是通过
project.getSsh()获得的
ssh
可能是通过
project.getSsh()获得的
非常感谢!我正试图了解脚本是否可以用java代码正确重写。似乎不太方便。至于ssh:我决定使用JSch,它是gradle-ssh-plugin的基础。好吧,我的第一个版本是正确重写,我不知道你的问题是什么。而且这并不是很不方便,是吗?当然代码有点冗长,但这就是为什么Groovy是一种很好的脚本语言。你可以编写非常精简的代码。你的回答帮助我了解Groovy是如何工作的。Groovy本身很不错,但在我的例子中——长部署脚本——似乎很难支持。可能是因为我以前从未使用过Groovy(我的团队都没有)是的,就像你不懂的任何语言一样。如果你懂Java,那么学习Groovy就相对容易。大多数语法都非常相似,但你有很多额外的语法糖分和动态性,可以用来编写紧凑、可读性好的代码,与更长的Java代码相同。:-)非常感谢!我正试图了解脚本是否可以用java代码正确重写。似乎不是很方便。至于ssh:我决定使用JSch,它是gradle-ssh-plugin的基础。嗯,我的第一个版本是正确的重写,我不知道你的问题是什么。这并不是很不方便,是吗?当然,代码有点冗长,但这就是为什么Groovy是一种很好的脚本语言。你可以编写非常精简的代码。你的回答帮助我了解了Groovy的工作原理。Groovy本身很不错,但在我的例子中——长部署脚本——似乎很难支持。可能是因为我以前从未使用过Groovy(我的团队都没有)是的,就像你不懂的任何语言一样。如果你懂Java,那么学习Groovy就相对容易。大多数语法都非常相似,但你有很多额外的语法糖分和动态性,可以用来编写紧凑、可读性好的代码,与更长的Java代码相同。:-)