当前位置: 首页 > 知识库问答 >
问题:

Gradle:我如何列出某个插件引入的任务

刘修能
2023-03-14

可能是一个简单的问题,但我找不到一种方法来列出应用在build.gradle文件中的插件引入了哪些任务。所以,说你的build.gradle就是:

apply plugin: 'java'

有没有一个简单的方法可以让gradle列出那个插件引入的所有任务?

PS2:我不是问任务的依赖性。我的问题不一样,相当清楚。我应用的每个插件都引入了自己的一些任务(不必在意什么取决于什么)。问题是第一时间新推出的任务是哪些?

共有1个答案

罗俭
2023-03-14

我恐怕这是不可能的,因为性质如何梯度插件的应用。

如果您查看plugin接口,您将看到它有一个apply(ProjectP)方法。插件的职责是配置一个项目--它可以添加特定的任务/配置/等等。例如,gradle JavaPlugin是无状态的,所以你不能从它那里获取任务。

想到的唯一解决方案是在应用插件后获得不同的任务:

Build.Gradle

def tasksBefore = [], tasksAfter = []    
project.tasks.each { tasksBefore.add(it.name) } // get all tasks

apply(plugin: 'idea') // apply plugin

project.tasks.each { tasksAfter.add(it.name) } // get all tasks
tasksAfter.removeAll(tasksBefore); // get the difference

println 'idea tasks: ' + tasksAfter;

这将打印由Idea插件添加的任务:

想法任务:[cleanIdea,cleanIdeaModule,cleanIdeaProject,cleanIdeaWorkspace,idea,ideaModule,ideaProject,ideaWorkspace]

您可以使用这段代码并构建一个可接受的解决方案。

 类似资料:
  • 我有一个ShadowJar和一个ProGuard任务,它们在我的Gradle构建中生成两个jar文件。 我的问题是,在本例中,发布jar文件包含影子jar和模糊jar文件,作为jar本身中的两个文件。我想把它们作为zipTree输入。 我的问题是我不知道如何将任务引用转换为该任务实际输出的zipTree。 我的尝试使我从,但这仍然失败了: 如何正确引用上述任务的输出jar文件?

  • 我有什么? 现在我想知道在任务执行之前是否可以使用clean task(常见的构建任务)来清理构建目录。 这背后是有原因的,我想确保每次gradle都应该编译java文件,并且所有.class文件都应该被刷新(这是一些要求) 我试过什么? 我想知道什么? 有没有什么方法可以避免编写包装器任务,并做一些梯度魔术来达到要求?

  • 请注意:虽然我在这里特别提到了两个Gradle插件,但这完全是一个关于理解Gradle中任务依赖性的问题,不需要任何关于单个插件的知识(我认为)! 我有一个项目将使用两个Gradle插件: < Li > Gradle Shadow插件,它将生成一个自包含的“fat jar”(基本上是一个包含我的所有类以及我的所有可传递依赖项的类的大jar,这样我就可以运行< code>java -jar myap

  • 我正在使用带有sonarqube插件的Gradle并使用 然而,它调用了内置的“测试”任务,该任务运行所有类型的测试,包括目前尚未全部通过的集成测试。我希望能够指定sonarqube任务使用类似“unitTest”的任务,而不是运行所有内容的“test”任务。 团队中的其他人在IDE中运行cucumber测试,IDE也使用测试任务,因此当前当我在主“测试”任务中排除cucumber测试时,他们必须

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • 我想通过Gradle运行脚本来运行任务,在编译之前运行所有任务,以自动生成运行Android应用程序的工件。 任务: 我想运行一个<代码>。cmd生成工件的文件 将生成的工件复制到Android资产文件夹 这是build.gradle模块: 因此,我想在