Java Gradle一体成型

Java Gradle一体成型,java,gradle,java-web-start,multi-project,Java,Gradle,Java Web Start,Multi Project,我想使用Gradle来构建一个java项目,我想将其结构如下 核心库 Web应用程序(war插件) 服务器(应用程序插件) 客户 客户端War(War插件) Web应用程序、服务器和客户端都依赖于core。服务器依赖于Web应用程序,因为它将使用嵌入式Jetty作为管理页面。客户端战争取决于客户端。客户机War将部署到web服务器,以作为web启动应用程序分发客户机 我想知道的是,我如何告诉服务器项目它依赖于Web应用程序,并且需要将其复制到其分发结构中的适当位置。我还想知道如何告诉客户机W

我想使用Gradle来构建一个java项目,我想将其结构如下

  • 核心库
  • Web应用程序(war插件)
  • 服务器(应用程序插件)
  • 客户
  • 客户端War(War插件)
Web应用程序、服务器和客户端都依赖于core。服务器依赖于Web应用程序,因为它将使用嵌入式Jetty作为管理页面。客户端战争取决于客户端。客户机War将部署到web服务器,以作为web启动应用程序分发客户机

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

我计划为服务器使用应用程序插件,因此在
/src/dist
下将有一个
webapp
目录,其中一个或多个web app将驻留。预计
webapp
目录中包含的文件将是war文件

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

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

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


我相信我已经解决了我问题的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
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
}
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
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
}

我相信我已经解决了我问题中的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
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
}
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
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
}

可能重复的版本我没有尝试将构建统一到单个build.gradle文件下。我将其描述为定义一个新的依赖项分类(例如compile、testRuntime、myCustomTransient、packagedApp),我希望对其进行特定的处理。您正在寻找配置。可能与我的配置重复。我不尝试将构建统一到单个build.gradle文件下。我将其描述为定义一个新的依赖项分类(例如compile、testRuntime、myCustomTransient、packagedApp),我希望对其进行特定的处理。您正在寻找配置。