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

对子项目war任务的依赖性

廖琪
2023-03-14

我有以下结构:

./build.gradle
./api
./api/build.gradle
./web
./web/build.gradle
./other
./other/build.gradle

api和web项目都使用war插件,但其他项目只有java插件。

我想在根项目中为heroku定义一个任务,即:

  • 对所有拥有它的子项目执行干净任务
  • 对所有拥有它的子项目执行战争任务
  • 在所有拥有它的子项目上执行构建任务

我看到了这个答案:按顺序调用子项目和其他任务但失败的Gradle批处理任务。已尝试以下配置

task stage() {
    dependsOn subprojects.clean
    dependsOn subprojects.war
    dependsOn subprojects.build
}

并获取此错误:

* What went wrong:
A problem occurred evaluating root project 'baltona-mdm'.
> Could not find property 'war' on project ':api'.

(api有war插件,如果我取消对task stage的注释,我可以运行gradle:api:war)

我该怎么做?

共有2个答案

温嘉玉
2023-03-14

Gradle目前对声明工作流没有一流的支持,例如清洁-

使用任务关系(dependsOn、mustRunAfter等)实现工作流更加困难。您上面提出的解决方案不能保证在阶段上下文中,清理任务会在所有其他任务之前运行。

注:构建取决于战争,因此您可能不必同时处理这两种情况<可以通过推迟任务解决(例如,dependsOn{p.war})来避免code>evaluationDependsOnChildren()。

齐俊贤
2023-03-14

错误的解决方案:

Could not find property 'war' on project ':api'

将使用

evaluationDependsOnChildren()

然而,对于标题中的问题,我想到了类似的东西:

task stage() {

    subprojects.each({p ->
            dependsOn p.clean
        if(hasWarTask(p)) {
            dependsOn p.war
        } else {
            dependsOn p.build
        }
    })
}

private boolean hasWarTask(Project p) {
    !p.getTasksByName("war", false).isEmpty()
}

我不喜欢它,所以如果有人有更好的解决方案,我愿意考虑其他选择。

 类似资料:
  • 我以为这会起作用,但事情一定发生了变化(或者我犯了某种错误) 根据父项目的任务,gradle子项目任务的语法是什么? 我在根级别上有以下任务(即子项目闭包之外和所有项目闭包之外)。 我得到的错误是 然后我猜了几件事包括这个 但那给了我错误 版本信息因此

  • 问题内容: 可以运行以了解模块任务的依赖性。有没有办法找到 buildscript依赖 的 传递依赖 ? 示例: 直接取决于: 可以在MVNRepository上看到。但是,这些工件有其自己的依赖性。有没有找到方法而无需手动遍历整个依赖树的方法? 为了澄清起见,我正在谈论的类路径由以下方式定义: 问题答案: 您可以使用以下命令: Udacity提供了很棒的Android Gradle 教程,但是您

  • 我们最近迁移到Gradle build,我添加了一个war that任务,它包含web.xml和依赖的jar以及在jar任务中创建的jar。

  • 在我的例子中,我有许多子项目和子/子项目的多项目构建。 然后,我希望能够从不同的子项目调用此任务,以生成不同的JAR集(基于项目依赖关系)。这样我就可以为不同的子项目创建单独的分布。 我已经到了可以以一种丑陋的方式列出所有项目DEP JAR的阶段: 我正在执行一项任务,将所有项目jar收集在一个目录中,以创建应用程序的分发。有什么干净的方法来实现这一点吗? 谢谢!

  • 我试图通过从eclipse workspace项目导入现有maven项目来创建maven项目,但eclipse无法解决任何依赖项。每次创建项目、更新maven依赖项或清理项目时,依赖项会被下载,但它们不会从本地maven存储库中被引用。当我从命令行运行时生成构建 我已经筋疲力尽地尝试解决这个问题的所有修补程序了,比如启用索引、清理项目、Maven->update project 我的eclipse

  • 我试图通过这个Gradle插件https://github.com/theboegl/gradle-launch4j使用http://launch4j.sourceforge.net/。 当我执行时,我会得到以下输出。 这是我的年级版本信息。 这是我的构建脚本。