Java 定制的独立gradle插件不是';像平常一样强大的build.gradle代码?

Java 定制的独立gradle插件不是';像平常一样强大的build.gradle代码?,java,gradle,groovy,Java,Gradle,Groovy,如果这似乎是一个愚蠢的问题,我很抱歉。但我是Java和Gradle的初学者,有时我真的会遇到“Gradle文档”这样的问题 我只是想找到一种简单的方法来重用我项目的build.gradle文件中的代码。因此,将这些代码打包到一个插件中,并在我的公司repo中上传和版本控制,似乎是理想的选择。但是那些独立的插件是java/groovy项目/程序,它们的语法与gradledsl不同。所以它们不会像gradle.build文件中那样提供相同的可能性和闭包,对吗 例如,如果我希望存储库闭包可以重用,如下

如果这似乎是一个愚蠢的问题,我很抱歉。但我是Java和Gradle的初学者,有时我真的会遇到“Gradle文档”这样的问题

我只是想找到一种简单的方法来重用我项目的
build.gradle
文件中的代码。因此,将这些代码打包到一个插件中,并在我的公司repo中上传和版本控制,似乎是理想的选择。但是那些独立的插件是
java/groovy
项目/程序
,它们的语法与gradledsl不同。所以它们不会像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上传到我的repo上吗?正如您所看到的,它是关于配置阶段的代码


提前感谢您。

您当然也可以使用插件build.gradle中提供的所有功能

build.gradle文件本质上只是一个groovy脚本,使用project对象集作为委托执行,其中使用的大多数神奇词汇(如
任务
)都只是类的方法。最显著的区别是,在自定义插件或任务中,您必须显式地与project交互

像这样的事情应该可以做到:

class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.repositories {
            maven {
                url project.Repo_GP_Internal
                credentials {
                    username project.Repo_GP_User
                }
            }
        }
    }
}
classmyplugin实现插件{
无效申请(项目){
project.repositories{
马文{
url project.Repo\u GP\u内部
证书{
用户名project.Repo\u GP\u用户
}
}
}
}
}
有关
存储库中可用的方法,请参见


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

在我从
gradle.properties
文件中努力读取插件中的属性之后,我想在Andrei的答案之外发布一些东西。这是以下代码:

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

然后你可以访问如下属性:
props.Repo\u GP\u Internal

谢谢!有了这个解释,我肯定能实现我的目标。奇怪的是:你不必费心亲自阅读这些属性。相反,Gradle应该解析user.home/Gradle.properties和project.dir/Gradle.properties,并从这些文件中生成属性可作为project.myProperty访问。但如果在两个文件中都未设置属性,则会失败,在这种情况下,您可以使用project.property(“myProperty”)为了安全地获取它的值。一定是Stackoverflow魔法之类的东西。我像你写的那样尝试访问属性,如
project.myProperty
。仔细检查拼写和所有内容。它不起作用。现在,在我再次尝试后,它完全起作用了…再次感谢