自定义独立gradle插件不像通常的build.gradle代码一样强大吗?

时间:2016-07-28 14:49:33

标签: java gradle groovy

对不起,如果这似乎是一个愚蠢的问题。但我是Java和Gradle的初学者,我真的遇到了Gradle Docs'有时。

我只想找到一种简单的方法来重用我项目的build.gradle文件中的代码。因此,将此代码打包到一个插件中,该插件在我的公司仓库中上传和版本化似乎是理想的。但是这些独立插件是java/groovy projects/programs,其语法与gradle DSL不同。所以他们没有像gradle.build文件那样提供相同的可能性和闭包,对吗?

例如,如果我想要一个可重用的存储库闭包,看起来像这样:

repositories {
maven {
    url project.Repo_GP_Internal
    credentials {
        username project.Repo_GP_User
        }
    }
}

或uploadArchives闭包:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: Repo_Upload_Internal){
                authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
            }        
            snapshotRepository(url: Repo_Upload_Snapshot){
                authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
            }
        }
    }
}

我可以将这个以任何方式打包到一个插件中,该插件可以作为jar上传到我的仓库吗?正如您所看到的那样,关于配置阶段的代码。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您绝对可以在插件中使用build.gradle中可用的所有功能。

build.gradle文件基本上只是一个groovy脚本,项目对象设置为委托,你在其中使用的大多数魔术词(如task)只是Project类的方法。最重要的区别是,在您的自定义插件或任务中,您必须明确地与项目进行交互。

这样的事情可以解决问题:

class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.repositories {
            maven {
                url project.Repo_GP_Internal
                credentials {
                    username project.Repo_GP_User
                }
            }
        }
    }
}

对于repositories闭包内可用的方法,请参阅documentation for RepositoryHandler

当然,您的项目将如何访问您的插件仍然存在问题。例如,它可能是从maven存储库中检索它,在这种情况下,您需要在每个项目中明确定义带有maven存储库参数的buildscript { repositories {

答案 1 :(得分:0)

在我努力从gradle.properties文件中读取插件中的属性后,我想发布除了Andrei的答案之外的其他内容。这是代码:

Properties props = new Properties()
props.load(new FileInputStream("gradle.properties"))

然后您可以访问以下属性:props.Repo_GP_Internal