【问题标题】:Gradle all in one buildGradle 多合一构建
【发布时间】:2016-05-16 04:23:13
【问题描述】:

我想使用 Gradle 构建一个 java 项目,我想将它的结构如下。

  • 核心库
  • Web 应用(war 插件)
  • 服务器(应用插件)
  • 客户
  • 客户端战争(战争插件)

Web 应用程序、服务器和客户端都依赖于核心。服务器依赖于 Web 应用程序,因为它将使用嵌入式 Jetty 将其用作管理页面。客户战争取决于客户。 Client War 将被部署到 Web 服务器上,以作为 Web 启动应用程序分发客户端。

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

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

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

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

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

【问题讨论】:

  • 我没有尝试将构建统一在一个 build.gradle 文件下。我将其描述为定义一个新的依赖分类(例如 compile、testRuntime、myCustomTransient、packagedApp),我将对其进行特殊处理。
  • 那篇文章不是关于单个 build.gradle。您正在寻找配置。

标签: java gradle java-web-start multi-project


【解决方案1】:

我相信我找到了问题的 Web 应用依赖部分。客户战争现在是一个失败的原因。

服务器构建.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

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多