如何在settings.gradle文件中声明构建脚本、依赖项和插件?

如何在settings.gradle文件中声明构建脚本、依赖项和插件?,gradle,compilation,continuous-integration,liferay,continuous-deployment,Gradle,Compilation,Continuous Integration,Liferay,Continuous Deployment,运输署;LR:我希望能够通过应用一些必需的依赖项和插件来构建一个项目,以便能够在GitLab中构建一种轻量级的CI/CD 详细说明:Liferay为您提供了他们所谓的工作区,它通过在settings.gradle文件中声明一个工作区插件来添加某些依赖项。但是,为了创建这样的工作区,需要下载400Mb SDK。我可以使用预装的Blade CLI在Docker hub中创建一个映像,这一点都不坏,但我想知道是否可以只使用Gradle来创建映像 我不能包含或触摸项目的build.gradle文件,在添

运输署;LR:我希望能够通过应用一些必需的依赖项和插件来构建一个项目,以便能够在GitLab中构建一种轻量级的CI/CD

详细说明:Liferay为您提供了他们所谓的工作区,它通过在settings.gradle文件中声明一个工作区插件来添加某些依赖项。但是,为了创建这样的工作区,需要下载400Mb SDK。我可以使用预装的Blade CLI在Docker hub中创建一个映像,这一点都不坏,但我想知道是否可以只使用Gradle来创建映像

我不能包含或触摸项目的build.gradle文件,在添加一些include的意义上,因为这会破坏IDE的编译。 创建新项目时,项目的build.gradle文件包含以下内容:

dependencies {
        compileOnly group: "com.liferay", name: "com.liferay.asset.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.comment.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.dynamic.section"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.form.navigator"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.util"
        compileOnly group: "com.liferay", name: "com.liferay.journal.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.layout.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.site.taglib"
        compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel"
        compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib"
        compileOnly group: "javax.portlet", name: "portlet-api"
        compileOnly group: "javax.servlet", name: "javax.servlet-api"
        compileOnly group: "jstl", name: "jstl"
        compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations"

        cssBuilder group: "com.liferay", name: "com.liferay.css.builder", version: "3.0.2"
}
为了能够在Liferay的工作区之外编译它,我需要添加以下内容:

buildscript {
        dependencies {
                classpath group: 'com.liferay', name: 'com.liferay.gradle.plugins', version: '11.0.74'
                classpath group: "com.liferay", name: "com.liferay.gradle.plugins.target.platform", version: "2.1.9"
        }

        repositories {
                maven {
                        url "https://repository-cdn.liferay.com/nexus/content/groups/public"
                }
        }
}

repositories {
    mavenCentral()
}

apply plugin: "com.liferay.plugin"
apply plugin: "com.liferay.target.platform"

dependencies {
        targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom", version: "7.2.1"
        targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.compile.only", version: "7.2.1"
        targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.third.party", version: "7.2.1"
        compileOnly group: "com.liferay", name: "com.liferay.asset.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.comment.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.dynamic.section"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.form.navigator"
        compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.util"
        compileOnly group: "com.liferay", name: "com.liferay.journal.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.layout.taglib"
        compileOnly group: "com.liferay", name: "com.liferay.site.taglib"
        compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel"
        compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib"
        compileOnly group: "javax.portlet", name: "portlet-api"
        compileOnly group: "javax.servlet", name: "javax.servlet-api"
        compileOnly group: "jstl", name: "jstl"
        compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations"

        cssBuilder group: "com.liferay", name: "com.liferay.css.builder", version: "3.0.2"
}
我的想法是创建一个结构如下的父项目,将其克隆到CI/CD管道中,并将要编译的项目移动到modules目录中:

.
├── modules
│   └── my-project-portlet
│       ├── bnd.bnd
│       ├── build
│       ├── build.gradle
│       └── src
└── settings.gradle
问题是:如何在settings.gradle文件中包含buildscript、apply插件和四个targetplatformbom

我已经读到,也许有一种使用buildSrc的方法,但似乎不鼓励[1][2][3]使用复合构建。所以我不知道从这里往哪里走

先谢谢你

[1] :

[2] :


[3] :

如果我没弄错,您不能修改build.gradle,但可以修改settings.gradle,或者您想将settings.gradle文件添加到当前没有settings.gradle文件的项目中。在这种情况下,您可以使用用于评估settings.gradle文件的对象提供的实例简单地配置项目:

然而,对于您的特定用例,我建议使用一个。初始化脚本仅在放置在本地用户目录的.gradle文件夹中时自动执行,因此您可以将它们存储在其他位置,甚至直接与项目一起存储,并仅在需要时(例如在CI服务器上运行时)使用-I命令行选项将它们添加到生成中

您可以对初始化脚本使用与上面示例中相同的代码,但是可以省略渐变。由于初始化脚本是直接针对Gradle实例进行计算的,因此从语句中删除部分

从settings.gradle文件内部或从初始化脚本添加存储库或依赖项应该没有问题,因此您可以像这样启动初始化脚本:

allprojects {
    repositories {
        mavenCentral()
    }
    dependencies {
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom", version: "7.2.1"
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.compile.only", version: "7.2.1"
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.third.party", version: "7.2.1"
         // ...
    }
}
我不确定是否可以从settings.gradle文件或初始化脚本调用buildscript,因为gradle对该块求值的方式有点特殊。还有一个问题是,您不能使用插件标识符从外部build.gradle应用插件。您必须使用插件类型替换为实现插件的Java类:

apply plugin: "com.liferay.plugin"
// ->
apply plugin: package.path.to.LiferayPlugin

如果我没弄错,您不能修改build.gradle,但可以修改settings.gradle,或者您想将settings.gradle文件添加到当前没有settings.gradle文件的项目中。在这种情况下,您可以使用用于评估settings.gradle文件的对象提供的实例简单地配置项目:

然而,对于您的特定用例,我建议使用一个。初始化脚本仅在放置在本地用户目录的.gradle文件夹中时自动执行,因此您可以将它们存储在其他位置,甚至直接与项目一起存储,并仅在需要时(例如在CI服务器上运行时)使用-I命令行选项将它们添加到生成中

您可以对初始化脚本使用与上面示例中相同的代码,但是可以省略渐变。由于初始化脚本是直接针对Gradle实例进行计算的,因此从语句中删除部分

从settings.gradle文件内部或从初始化脚本添加存储库或依赖项应该没有问题,因此您可以像这样启动初始化脚本:

allprojects {
    repositories {
        mavenCentral()
    }
    dependencies {
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom", version: "7.2.1"
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.compile.only", version: "7.2.1"
         targetPlatformBoms group: "com.liferay.portal", name: "release.portal.bom.third.party", version: "7.2.1"
         // ...
    }
}
我不确定是否可以从settings.gradle文件或初始化脚本调用buildscript,因为gradle对该块求值的方式有点特殊。还有一个问题是,您不能使用插件标识符从外部build.gradle应用插件。您必须使用插件类型替换为实现插件的Java类:

apply plugin: "com.liferay.plugin"
// ->
apply plugin: package.path.to.LiferayPlugin

多亏了卢卡斯的回答,我终于可以让它工作了。正如他所指出的,我不能使用构建脚本代码,因为当试图应用插件时,Gradle抱怨说找不到插件。所以,我使用了initscript来代替

我找到了g 通过查看以下目录的JAR来组+类名:

~/.gradle/caches/modules-2/files-2.1/com.liferay/com.liferay.gradle.plugins.target.platform/2.1.9/ ~/.gradle/caches/modules-2/files-2.1/com.liferay/com.liferay.gradle.plugins/11.0.74
多亏了卢卡斯的回答,我终于可以让它工作了。正如他所指出的,我不能使用构建脚本代码,因为当试图应用插件时,Gradle抱怨说找不到插件。所以,我使用了initscript来代替

我通过查看以下目录的JAR找到了group+类名:

~/.gradle/caches/modules-2/files-2.1/com.liferay/com.liferay.gradle.plugins.target.platform/2.1.9/ ~/.gradle/caches/modules-2/files-2.1/com.liferay/com.liferay.gradle.plugins/11.0.74
您是否使用gitlab缓存来存储400Mb SDK?我可能会在安装了Blade Cli的情况下创建Docker映像,但我想知道是否有一种方法可以使用Gradle来实现这一点您是否使用gitlab缓存来存储400Mb SDK?我可能会在安装了Blade Cli的情况下创建Docker映像,但是我想知道是否有一种方法可以用GradleThank让我走上正确的道路。你是对的,我不能使用buildscript,正因为如此,我在尝试应用插件时遇到了麻烦,即使我按照你的建议使用了package+类名。但是,我能够在不接触build.gradle文件的情况下编译所有内容。再次感谢你!我将修改我的问题,使其包含最终的初始化脚本。@MikelAlejoBR不必编辑您的问题以包含解决方案,您应该用最终代码添加另一个答案,因为它更适合StackOverflow的问答风格。好的!我现在就做!谢谢你让我走上了正确的道路。你是对的,我不能使用buildscript,正因为如此,我在尝试应用插件时遇到了麻烦,即使我按照你的建议使用了package+类名。但是,我能够在不接触build.gradle文件的情况下编译所有内容。再次感谢你!我将修改我的问题,使其包含最终的初始化脚本。@MikelAlejoBR不必编辑您的问题以包含解决方案,您应该用最终代码添加另一个答案,因为它更适合StackOverflow的问答风格。好的!我现在就做!