Gradle 一站式构建
Gradle all in one build
我想使用 Gradle 构建一个 java 项目,我想按如下方式构建它。
- 核心库
- Web 应用程序(war 插件)
- 服务器(应用插件)
- 客户
- 客户端War(war插件)
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
我想使用 Gradle 构建一个 java 项目,我想按如下方式构建它。
- 核心库
- Web 应用程序(war 插件)
- 服务器(应用插件)
- 客户
- 客户端War(war插件)
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