Gradle 一站式构建

Gradle all in one build

我想使用 Gradle 构建一个 java 项目,我想按如下方式构建它。

Web App、Server、Client都依赖于core。服务器依赖于 Web 应用程序,因为它将使用嵌入式 Jetty 将其用作管理页面。客户端 War 依赖于客户端。客户端 War 将部署到 Web 服务器以作为 Web 启动应用程序分发客户端。

我想知道的是如何告诉服务器项目它依赖于 Web 应用程序并且需要将其复制到其分发结构中的正确位置。我还想知道如何告诉客户端 War 项目依赖客户端项目并将客户端 jar 及其所有依赖项复制到正确的位置以构建 war 存档。

我计划为服务器使用应用程序插件,因此在 <root>/src/dist 下会有一个 webapp 目录,一个或可能多个 Web 应用程序将驻留在该目录中。预计 webapp 目录中包含的文件将是 war 个文件。

这是一个新项目,因此它可以遵循 Gradle 的标准构建约定和 Gradle 期望的项目布局。

理想情况下,客户端工件将在某个时候发布到内部 Artifactory 或 Sonatype Nexus 存储库,以便可以使用版本支持构建客户端 War。

到目前为止我找到了以下资源。

我相信我已经解决了我的问题的 Web App 依赖部分。客户 War 暂时失败了。

服务器build.gradle

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'application'

targetCompatibility = 1.8
sourceCompatibility = 1.8
version = '0.0.1-SNAPSHOT'
group = 'com.s2d'
mainClassName = 'com.simonsoftwaredesign.example.echo.server.EchoServerApp'

repositories {
  mavenCentral()
}

configurations {
  webContainer
}

dependencies {
  compile project(':echo-core')
  compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.3.7.v20160115'
  compile group: 'org.eclipse.jetty', name: 'jetty-webapp', version: '9.3.7.v20160115'

  webContainer project(path: ':echo-admin', configuration: 'warApp')
}

task copyWebApps(dependsOn: configurations.webContainer, type: Copy) {
  from { configurations.webContainer.collect { it } }
  // I don't like how this is hard coded
  // but I am not sure how to fix it
  into 'src/main/dist/webapp'
}

installDist.dependsOn copyWebApps
distZip.dependsOn copyWebApps
distTar.dependsOn copyWebApps

Web 应用程序 build.gradle

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'war'

targetCompatibility = 1.8
sourceCompatibility = 1.8
version = '0.0.1-SNAPSHOT'
group = 'com.s2d'

configurations {
  warApp
}

repositories {
  mavenCentral()
}

dependencies {
  providedCompile project(':echo-core')
  providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
}

artifacts {
  warApp war
}

Gradle projects depending on artifacts created by sibling projects