Gradle 如何将war构建添加到发行版

Gradle 如何将war构建添加到发行版,gradle,war,Gradle,War,我们有一个gradle项目,它使用distTar创建tar分发文件。 每个依赖项项目都可以很好地将所有依赖项和项目jar文件放置到分发libs文件夹中 我们需要添加一个构建war文件的项目。通过将项目添加为依赖项,它将添加所有war依赖项。。。我们只需要项目war任务中的war文件。 此外,war项目war任务未被执行。 相反,jar任务是从分发项目的distTar执行的 我们如何执行project war任务并将war文件添加到tar发行版的“gui”文件夹中?您需要向war任务的输出添加依赖

我们有一个gradle项目,它使用distTar创建tar分发文件。 每个依赖项项目都可以很好地将所有依赖项和项目jar文件放置到分发libs文件夹中

我们需要添加一个构建war文件的项目。通过将项目添加为依赖项,它将添加所有war依赖项。。。我们只需要项目war任务中的war文件。 此外,war项目war任务未被执行。 相反,jar任务是从分发项目的distTar执行的


我们如何执行project war任务并将war文件添加到tar发行版的“gui”文件夹中?

您需要向
war
任务的输出添加依赖项。默认情况下,
ProjectDependency
只是将依赖项添加到该项目的默认配置中

dependencies {
    compile project(':myproject').war.outputs.files
}

Edit:为了澄清,
compile
可能不是添加此依赖项的最佳配置,这只是一个示例。如果这个项目实际上只是将依赖项聚合到一个发行版归档文件中,那么配置可能与此无关。

要将构建的war文件放入发行版,请添加distTar依赖的任务。使依赖任务依赖于其他项目war任务。获取输出文件并将其放入分发版中。关键是在doLast中执行“入/出”操作,以便在分发版的“入/出”操作之前,war依赖于其他项目完成

// create a task depends on other project war
// put into the distribution gui folder the war.output.files
// the doLast gives visibility to the war.outputs.files
// after the depends on is complete
task otherProjectWar(dependsOn: ':OtherProject:war') {
  doLast {
    applicationDistribution.into("gui") {
      from( project(':OtherProject').war.outputs.files )
    }
  }
}

// add depends on for distTar
distTar {
  dependsOn otherProjectWar
  ...
}

我认为适当的方法是将期望的任务输出包含到分发中。下面是将项目构建的jar添加到主发行版的示例脚本(对于war,请使用war输出,而不是jar输出)

然后,运行分发任务可以正确解析zip和tar的依赖关系

> gradlew distTar
:clean
:compileJava
:processResources NO-SOURCE
:classes
:jar
:distTar

谢谢马克,这是我需要的。你对编译配置的看法是正确的。该发行版还包含包含依赖项类路径的脚本,我使用命名的configs来控制类路径顺序。再次感谢你的回答。我试过你的答案,但在战争中失败了,因为战争不是这个项目的财产。它也不喜欢它作为一种方法。也许我遗漏了什么?出于某种奇怪的原因,.war.outputs.files不可见,除非包装在任务的doLast中,请参见解决方案的答案workedIt可能是项目评估顺序。也许那个项目还没有应用
war
插件。仅针对GRIN,ty添加了
evaluationDependsOn':myproject'
依赖项目。似乎就是这样。
war
插件未应用于分发项目,因此在执行
war.outputs.files
之前,
dependsOn':OtherProject:war'
插件时需要使用
doLast
才能看到
war.outputs.files
。在我的解决方案中,
evaluationDependsOn':OtherProject'
是否是执行
doLast
的正确方法?为了您的持续支持,我会给您答案,但我的解决方案有“添加到分发的“gui”文件夹”的答案。。。能给我一个电话吗:)。。。再次感谢上的文档。是的,它与文档一致,这就是我在这里添加它的原因
> gradlew distTar
:clean
:compileJava
:processResources NO-SOURCE
:classes
:jar
:distTar