gcr.io/paketo-buildpacks/apache-tomcat
The Paketo Buildpack for Apache Tomcat is a Cloud Native Buildpack that contributes Apache Tomcat and Process Types for WARs.
This buildpack will participate if all of the following conditions are met
$BP_JAVA_APP_SERVER
is tomcat
or if $BP_JAVA_APP_SERVER
is unset or empty and this is the first buildpack to provide a Java application server.<APPLICATION_ROOT>/WEB-INF
existsMain-Class
is NOT defined in the manifestThe buildpack will do the following:
$CATALINA_HOME
$CATALINA_BASE
context.xml
, logging.properties
, server.xml
, and web.xml
to conf/
tomcat
, task
, and web
process typesWhen this buildpack runs on the Tiny stack, which has no shell, the following notes apply:
catalina.sh
script cannot be used to start Tomcatcatalina.sh
.bin/setenv.sh
and setting CATALINA_*
environment variables, will not be available.umask
set to 0022
instead of the catalina.sh
provided default of 0027
Environment Variable | Description |
---|---|
$BP_JAVA_APP_SERVER |
The application server to use. It defaults to `` (empty string) which means that order dictates which Java application server is installed. The first Java application server buildpack to run will be picked. |
$BP_TOMCAT_CONTEXT_PATH |
The context path to mount the application at. Defaults to empty (ROOT ). |
$BP_TOMCAT_EXT_CONF_SHA256 |
The SHA256 hash of the external configuration package |
$BP_TOMCAT_ENV_PROPERTY_SOURCE_DISABLED |
When true the buildpack will not configure org.apache.tomcat.util.digester.EnvironmentPropertySource . This configuration option is added to support loading configuration from environment variables and referencing them in Tomcat configuration files. |
$BP_TOMCAT_EXT_CONF_STRIP |
The number of directory levels to strip from the external configuration package. Defaults to 0 . |
$BP_TOMCAT_EXT_CONF_URI |
The download URI of the external configuration package |
$BP_TOMCAT_EXT_CONF_VERSION |
The version of the external configuration package |
$BP_TOMCAT_VERSION |
Configure a specific Tomcat version. This value must exactly match a version available in the buildpack so typically it would configured to a wildcard such as 9.* . |
BPL_TOMCAT_ACCESS_LOGGING_ENABLED |
Whether access logging should be activated. Defaults to inactive. |
BPI_TOMCAT_ADDITIONAL_JARS |
This should only be used in other buildpacks to include a jar to the tomcat classpath. Several jars must be separated by : . |
The artifacts that the repository provides must be in TAR format and must follow the Tomcat archive structure:
<CATALINA_BASE>
└── conf
├── context.xml
├── server.xml
├── web.xml
├── ...
When the Environment Property Source is configured, configuration for Tomcats configuration files can be loaded from environment variables. To use this feature, the name of the environment variable must match the name of the property.
The buildpack optionally accepts the following bindings:
dependency-mapping
Key | Value | Description |
---|---|---|
<dependency-digest> |
<uri> |
If needed, the buildpack will fetch the dependency with digest <dependency-digest> from <uri> |
Buildpacks can contribute JARs to the CLASSPATH
of Tomcat by appending a path to BPI_TOMCAT_ADDITIONAL_JARS
.
func (s) Contribute(layer libcnb.Layer) (libcnb.Layer, error) {
// Copy dependency into the layer
file := filepath.Join(layer.Path, filepath.Base(s.Dependency.URI))
layer, err := s.LayerContributor.Contribute(layer, func(artifact *os.File) (libcnb.Layer, error) {
if err := sherpa.CopyFile(artifact, file); err != nil {
return libcnb.Layer{}, fmt.Errorf("unable to copy artifact to %s\n%w", file, err)
}
return layer, nil
})
additionalJars := []string{file}
// Add dependency to BPI_TOMCAT_ADDITIONAL_JARS
layer.LaunchEnvironment.Append("BPI_TOMCAT_ADDITIONAL_JARS", ":", strings.Join(additionalJars, ":"))
return layer, nil
}
This buildpack is released under version 2.0 of the Apache License.