mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 03:57:51 +02:00
* Allow project dependency to use runtimeClasspath Project dependency should use runtimeClasspath. However, if left unspecified, it uses 'default', which is the same as the legacy 'runtime' configuration. (runtimeOnly dependencies are left out). Since runtimeClasspath cannot be referenced directly, we use a custom config (deploy_jar) as a proxy. By excluding testjars (leaked into 'compile' by third-party dependencies) from runtimeClasspath, we prevent them from getting into release artifacts. Two meaningful changes in appengine_war.gradle and java_common.gradle TESTED=Diffed contents of services/{module}/build/exploded-* Only three jars are removed: hamcrest-core, junit, and mockito-core.
114 lines
4.2 KiB
Groovy
114 lines
4.2 KiB
Groovy
// Copyright 2019 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
apply plugin: 'war'
|
|
|
|
def environment = rootProject.environment
|
|
def gcpProject = rootProject.gcpProject
|
|
|
|
// Set this directory before applying the appengine plugin so that the
|
|
// plugin will recognize this as an app-engine standard app (and also
|
|
// obtains the appengine-web.xml from the correct location)
|
|
project.convention.plugins['war'].webAppDirName =
|
|
"../../core/src/main/java/google/registry/env/${environment}/${project.name}"
|
|
|
|
apply plugin: 'com.google.cloud.tools.appengine'
|
|
|
|
def coreResourcesDir = "${rootDir}/core/build/resources/main"
|
|
|
|
// Get the web.xml file for the service.
|
|
war {
|
|
webInf {
|
|
from "../../core/src/main/java/google/registry/env/common/${project.name}/WEB-INF"
|
|
|
|
from("${coreResourcesDir}/META-INF/persistence.xml") {
|
|
into "classes/META-INF"
|
|
}
|
|
}
|
|
}
|
|
|
|
war {
|
|
from("${coreResourcesDir}/google/registry/ui/html") {
|
|
include "*.html"
|
|
}
|
|
}
|
|
|
|
if (project.path == ":services:default") {
|
|
war {
|
|
from("${coreResourcesDir}/google/registry/ui") {
|
|
include "registrar_bin.js"
|
|
if (environment != "production") {
|
|
include "registrar_bin.js.map"
|
|
}
|
|
into("assets/js")
|
|
}
|
|
from("${coreResourcesDir}/google/registry/ui/css") {
|
|
include "registrar*"
|
|
into("assets/css")
|
|
}
|
|
from("${coreResourcesDir}/google/registry/ui/assets/images") {
|
|
include "**/*"
|
|
into("assets/images")
|
|
}
|
|
}
|
|
}
|
|
|
|
appengine {
|
|
deploy {
|
|
// appengineDeployAll task requires the version to be set. So,
|
|
// this config lets gcloud select a version name when deploying
|
|
// to alpha or sandbox from our workstation.
|
|
if (!rootProject.prodOrSandboxEnv) {
|
|
version = 'GCLOUD_CONFIG'
|
|
}
|
|
|
|
// Don't set gcpProject directly, it gets overriden in ./build.gradle.
|
|
// Do -P environment={crash,alpha} instead. For sandbox/production,
|
|
// use Spinnaker.
|
|
projectId = gcpProject
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
compile project(path: ':core', configuration: 'deploy_jar')
|
|
}
|
|
|
|
// The tools.jar file gets pulled in from the java environment and for some
|
|
// reason gets exploded "readonly", causing subsequent builds to fail when
|
|
// they can't overwrite it. The hack below makes the file writable after
|
|
// we're done exploding it.
|
|
//
|
|
// Fun fact: We only use this jar for documentation generation and as such we
|
|
// don't need it in our warfile, as it is not used by the application at
|
|
// runtime. But it's not clear how to exclude it, as we seem to be
|
|
// constructing the jar from the entire WEB-INF directory and per-file
|
|
// exclude rules don't seem to work on it. Better solutions are welcome :-)
|
|
explodeWar.doLast {
|
|
file("${it.explodedAppDirectory}/WEB-INF/lib/tools.jar").setWritable(true)
|
|
}
|
|
|
|
rootProject.deploy.dependsOn appengineDeployAll
|
|
rootProject.stage.dependsOn appengineStage
|
|
|
|
// Impose verification for all of the deployment tasks. We haven't found a
|
|
// better way to do this other than to apply to each of them independently.
|
|
// If a new task gets added, it will still fail if "environment" is not defined
|
|
// because gcpProject is null. We just won't get as friendly an error message.
|
|
appengineDeployAll.configure rootProject.verifyDeploymentConfig
|
|
appengineDeploy.configure rootProject.verifyDeploymentConfig
|
|
appengineDeployCron.configure rootProject.verifyDeploymentConfig
|
|
appengineDeployDispatch.configure rootProject.verifyDeploymentConfig
|
|
appengineDeployDos.configure rootProject.verifyDeploymentConfig
|
|
appengineDeployIndex.configure rootProject.verifyDeploymentConfig
|
|
appengineDeployQueue.configure rootProject.verifyDeploymentConfig
|