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