问题标签 [gradle-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3764 浏览

gradle - 如何让 Gradle 扩展延迟评估由任务动态设置的属性?

我对使用 Gradle 很陌生,我正在尝试开发一个有助于管理版本编号的插件。这个插件定义了一个任务来设置project.version它所应用的项目的属性。

我要做的是让它在每个 Gradle 构建开始时设置此属性。使用Peter 对另一个 Gradle 问题的回答gradle.startParameter.taskNames = [":setProjectVersionNumber"] + gradle.startParameter.taskNames,我通过在我的插件apply方法中添加,设法让我的任务在任何其他任务之前执行。

但是,其他插件(特别是“Maven-publish”)依赖于在配置阶段指定的版本:

我想知道的是,是否有一种方法可以使对version这些扩展中的属性的评估尽可能地懒惰-这样在调用依赖于它们的任务之前不会对它们进行评估,在这种情况下可能是:publishToMavenLocal

下面是一个 SSCCE,它展示了我希望实现的目标:

如果您可以在上面的示例中提供一种使ext.version平等的方法1.2.3,我相信您已经解决了我的问题。

如果这要求太多,我可以让我的插件在配置时而不是执行时生成版本字符串。不过,很高兴知道我是否可以这样做。

编辑

在一个实验分支中,我尝试将所有版本字符串分配逻辑移动到配置阶段(通过在插件应用程序期间而不是在任务执行期间进行),但我不相信这会起作用,因为插件扩展没有尚未处理并尝试引用其中定义的属性失败。

编辑 2

将版本字符串分配逻辑包装在project.afterEvaluate闭包中似乎有效:

在一个模拟项目中,我实现build.gradle如下:

出于某种原因,这似乎有效。尽管版本字符串分配逻辑包含在 'afterEvaluate' 闭包中,而测试发布版本分配不是,但前者仍然发生在后者之前:

我将这个问题悬而未决,因为我仍然想知道是否有可能按照我最初的意图去做。此外,我希望能解释一下为什么在设置项目版本之后分配发布版本,以及我是否可以依赖这种情况总是如此,或者这是否只是偶然发生的。

0 投票
2 回答
5443 浏览

groovy - 仅在特定子项目上运行 Gradle ShadowJar 插件

请注意:即使我myapp-server是一个DropWizard 应用程序,这也只是一个Gradle问题;我只提到 DropWizard 是为了很好的衡量标准。

我有一个使用 Gradle 构建的多项目构建:

哪里settings.gradle看起来像:

我已成功让 Gradle 编译我的 Groovy 源代码、运行单元测试、生成 GroovyDocs,并为所有 3 个子项目打包二进制和源 JAR。其构建调用是:gradle clean build groovydoc sourcesJar -Pversion=<whatever version I specify>.

myapp-server实际上是我需要在其上运行Shadow JAR 插件的项目,通常通过gradle clean build shadowJar.

这是我的myapp-server/build.gradle

我的问题:如何将 Gradle 配置为仅shadowJar在我的子项目上运行任务myapp-server,而不是在其他任何项目上运行?理想情况下,我可以让我的构建调用类似于:

然后以某种方式将 Gradle 配置为忽略shadowJar除. 想法? myapp-server


更新

当我运行时,gradle clean build groovyDoc sourceJar shadowJar -Pversion=0.1.3我看到一堆以以下结尾的 Gradle 输出:

但是,当我深入myapp-server/build/libs/myapp-server-0.1.3.jar并打开它(像 ZIP 一样提取它)时,我只看到我在其中编译的类,而不是它所有依赖 JAR 中的所有类(它应该是一个“Fat JAR”)。例如,myapp-server依赖于 DropWizard。所有 DropWizard 类都应该在这个 JAR 中。DropWizard 的所有传递依赖项都应该在这个 JAR 中包含类文件,等等。

0 投票
1 回答
582 浏览

groovy - 从单个 Gradle 构建调用打包和运行可执行 JAR?

这是我的 Groovy 应用程序的驱动程序类:

我正在尝试增强我的 Gradle 构建,以便我可以:

  1. 让 Gradle 打包我的可执行 JAR;和
  2. 运行我的可执行 JAR,将命令行参数传递给它的 main 方法

理想情况下,我可以通过以下方式简单地运行我的应用程序:

并查看以下控制台输出:

这是我的build.gradle

我需要做什么才能让 Gradle 包 + 像这样运行我的应用程序?

0 投票
5 回答
4517 浏览

java - Java Gradle API 的 Maven 依赖参数是什么?

我正在用 Java 编写 Gradle 插件。为了使用 IDE 进行开发(尤其是代码完成),我需要将类pom.xml的依赖信息添加到项目文件中org.gradle.api.*

我在哪里可以找到它?

我试过mvnrepository.com,但在那里找不到。

0 投票
1 回答
2062 浏览

gradle - 从 gradle 项目目录中创建 jacoco exec 文件

如何exec从自定义 gradle 插件将 jacoco 文件的位置更改为项目目录之外。我的插件中有以下代码:

但是当我运行测试时,.exec文件是在下面生成的<projectDir>/jacoco/<taskName>.exec

当我更改destinationFile目录中的值时build.gradle,它工作得很好。

我在这里想念什么?

编辑:这里是插件的完整代码

0 投票
0 回答
344 浏览

java - 使用 Gradle 构建 Android 应用程序时出现 OutOfMemoryError

我正在尝试在 jenkins 中构建一个 android 应用程序。我有配置几乎相同的漂亮虚拟机(至少它们具有相同数量的 RAM),但其中一个正在返回:

好吧,我想我应该为这个 dx 构建工具提供超过 1GB 的空间,但我该怎么做呢?如何将-Xmx选项传递给 Gradle 以使用它而不是-JXmx1g

0 投票
3 回答
2032 浏览

gradle - Gradle 任务 tomcatRun 成功但 webapp 抛出 404 错误

我在 Eclipse 中有一个 Spring MVC webapp,它是用 Gradle 构建的。我也在使用 Gradle Tomcat 插件。

当我运行 Gradle tomcatRunWar任务时,一切都按预期工作,并且我的 web 应用程序响应正常。但是,当我运行 Gradle tomcatRun任务时,虽然它似乎成功并显示“服务器正在http://localhost:8080/运行”,但 web 应用程序只会抛出 404 错误,并显示“请求的资源不可用”消息。

然后我使用 -i(信息)和 -d(调试)选项运行 Gradle 任务,当我尝试访问服务器时看到以下内容:

如果我再等 10 秒左右,我会看到:

我很困惑,非常感谢您的帮助!我的 build.gradle 包含在下面。

0 投票
1 回答
6225 浏览

groovy - 如何在 IntelliJ 中设置 Gradle 插件项目?

我想创建一个独立的 Gradle 插件项目,如Gradle 文档中所述。我想将IntelliJ与GroovyGradle的代码完成一起使用。由于没有专门的向导来创建 Gradle 插件项目,我必须手动完成。
我已经设法通过以下方式在 IDE中添加Groovy SDK(二进制) :文件/其他设置/默认项目结构,如屏幕截图所示。

IntelliJ / 项目结构

首先,我创建了一个新的 Gradle 项目,其中还包含 Gradle 包装器。然后我创建了一个按照sdk-manager-pluginMyExamplePlugin.groovy的项目结构命名的 Groovy 脚本;如果此项目不遵循所需的设置,请注意我。

然后我开始实现这个类:

问题是org.gradle.api.*找不到。

0 投票
1 回答
1330 浏览

gradle - 将复制任务添加为现有 Gradle 任务的依赖项

我有一个具有以下目录结构的 Groovy 应用程序:

目前,当我运行时gradle clean build shadowJar(使用ShadowJar 插件, 尽管我认为这与此处无关)我留下了一个已编译的可执行 JAR,位于build/distributions. 我想向我的 Gradle 文件添加一个任务,该文件还将文件复制src/main/resources/config.json到此build/distributions位置,理想情况下无需更改我的构建调用。

我试过这个:

然而,这迫使我使用以下构建调用:gradle clean build shadowJar copyJson,这不是我想要的。

所以我问:我怎样才能在我的 Gradle 构建中添加一个任务,这样运行不仅gradle clean build shadowJar会在.build/distributionssrc/main/resources/config.json

0 投票
0 回答
1209 浏览

android - 如何使用 Gradle 插件向 android.defaultConfig 添加函数?

我想创建一个 Gradle 插件,为Android Gradle 插件添加功能。我想向此处概述的功能添加getGreeting功能android.defaultConfig-但通过插件:

我开始准备 Groovy 项目。现在我在这一点上:

由于我从未使用过 Groovy,我什至不知道如何调试到类中。注释行可能是访问该android.defaultConfig块的一种方式。如何在那里添加功能?