This section describes the steps to quickly set up Eclipse Jetty 12.0.36 or 12.1.10. Other versions in the Jetty 12 series should work in a similar way.
Download Jetty
Download Jetty as a zip file from Jetty Downloads.
Specific versions can also be downloaded from the Maven Repository.
We will be working with jetty-home-12.1.10.zip.
Extract the archive to obtain an jetty-home-12.1.10 directory, and optionally rename it to whatever you prefer to work with.
Jetty 12 does not want to modify anything in the home directory.
Create a sibling directory jetty-base-12, cd into that directory, and run the following command to initialize the directory:
The following steps are designed to work with version 3.7.0 of the Java Service Wrapper.
Using earlier versions is possible, but will likely require some changes.
Decide which edition to use (Professional, Standard, or Community), and select the target platform, bitness, and architecture.
Then download the installer or archive and install or extract it.
We will assume you are using the Professional 64-bit Edition on Linux x86.
Wrapper Integration
To ease the placement of required Wrapper files, create the following PowerShell script in your jetty-base-12 directory as updateWrapper.ps1.
Update the location where you installed or extracted the Wrapper above.
The classpath, application main class, and application parameters are all generated dynamically using a script provided after the wrapper configuration file.
NOTE
The JAVA_HOME must be set, but will default to the system environment if defined there.
Jetty 12 requires a minimum of Java 17 be specified.
Create the Wrapper configuration file as conf/wrapper.conf with the following content:
@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.
# Default mode for file inclusions
@include.default_mode=required
# Include file problems can be debugged by removing '#' at the beginning
# of the following line:
#@include.debug
#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
# License Key to start. Licenses can be purchased or a trial license
# requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial
# The Wrapper will look for either of the following optional files for a
# valid License Key. License Key properties can optionally be included
# directly in this configuration file.
@include.optional %WRAPPER_CONF_DIR%/wrapper-license.conf
@include.optional %WRAPPER_CONF_DIR%/wrapper-license-%WRAPPER_HOST_NAME%.conf
# The following property will output information about which License Key(s)
# are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE
#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)
# JETTY_BASE and JETTY_HOME are set in wrapper-generated.conf
@include %WRAPPER_BIN_DIR%/../conf/wrapper-generated.conf
# Change the working dir used by java so Jetty is in its expected location.
# Setting JETTY_BASE relative to the fixed WRAPPER_BIN_DIR location helps make their meaning clear and avoid confusion when changing the working dir.
wrapper.working.dir=%JETTY_BASE%
#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP
# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=%JETTY_BASE%/lang
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Wrapper Jar file
wrapper.jarfile=%JETTY_BASE%/lib/wrapper.jar
# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN
# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=17
#wrapper.java.version.max=
# Java Classpath. Add class path elements as needed starting from 1
# (See wrapper-generated.conf)
# Java Modulepath. (Requires Java 9 or above)
# Add module path elements as needed starting from 1
#wrapper.java.module_path.1=
# Java Module list. (Requires Java 9 or above)
# Add module names as needed starting from 1
#wrapper.java.module.1=
# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=%JETTY_BASE%/lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=-Djava.io.tmpdir=%JETTY_BASE%/tmp
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256
# Application System Properties passed via the backend.
# Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=jetty.home=%JETTY_HOME%
wrapper.app.property.2=jetty.base=%JETTY_BASE%
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized.
# Helper classes are provided to do this for you.
# See the following page for details:
# https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Application parameters.
# Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE
# Add parameters as needed starting from 1
# (See wrapper-generated.conf)
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for Wrapper output logging.
wrapper.logfile=%JETTY_BASE%/logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Roll mode of the log file.
# SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
# value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
# launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0 disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffixes. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE
# Title to use when running as a console
wrapper.console.title=Jetty Server
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
# Out Of Memory detection.
# Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
# Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.
#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>
# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO
# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE
# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
# sensitive data, the Wrapper requires that all permissions granted
# to these files be explicitly allowed in the configuration.
# Please read the documentation for the full list of properties.
# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators
# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>
# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>
#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section.
# The service can then be reinstalled.
# Name of the service
wrapper.name=jetty
# Display name of the service
wrapper.displayname=Jetty
# Description of the service
wrapper.description=Jetty Server
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed.
# AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Account to use when running the service.
# The default blank value will use LocalSystem, which is highly privileged
# account on Windows. Please read the documentation page for this property to
# learn about other account types that can be used.
wrapper.ntservice.account=
# Allow the current user to perform certain actions without being prompted for
# administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME
Jetty 12's start.jar does not directly launch the Jetty server.
Rather it is a boostrap application used to dynamically generate the command line to launch a child Java process which actually runs the Jetty server.
This is not ideal when run with the Java Service Wrapper as it is not able to directly monitor the Java instance running Jetty.
Jetty provides a way to extract components of that command line and the script below is used to generate a conf/wrapper-generated.conf configuration fragment that is included by the above conf/wrapper.conf.
If you make significant changes to your application configuration, you may need to rerun this script.
Otherwise, it should remain fixed.
Create the following PowerShell script in your jetty-base-12 directory as updateWrapperGeneratedConf.ps1.
$ErrorActionPreference = "Stop"
# Run from script's directory
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $ScriptDir
# Jetty home argument check
$JETTY_HOME = if ($args.Count -ge 1) { $args[0] } else { "" }
if ([string]::IsNullOrWhiteSpace($JETTY_HOME)) {
Write-Error "ERROR: jetty.home directory not specified."
Write-Output "Usage: .\$($MyInvocation.MyCommand.Name) \path\to\jetty.home"
Exit 1
}
if (-not (Test-Path -Path $JETTY_HOME -PathType Container)) {
Write-Error "ERROR: '$JETTY_HOME' does not exist or is not a directory."
Exit 1
}
$StartJarPath = Join-Path $JETTY_HOME "start.jar"
if (-not (Test-Path -Path $StartJarPath -PathType Leaf)) {
Write-Error "ERROR: '$StartJarPath' not found."
Write-Error "Is '$JETTY_HOME' a valid Jetty home directory?"
Exit 1
}
$JETTY_BASE = "."
$CONF_DIR = Join-Path $JETTY_BASE "conf"
$ABS_JETTY_HOME = (Get-Item $JETTY_HOME).FullName
$ABS_JETTY_BASE = (Get-Item $JETTY_BASE).FullName
Write-Output "ABS_JETTY_HOME=$ABS_JETTY_HOME"
Write-Output "ABS_JETTY_BASE=$ABS_JETTY_BASE"
# Run dry-run from inside ABS_JETTY_BASE
function Invoke-DryRun {
param([string]$DryRunArg)
Push-Location $ABS_JETTY_BASE
try {
& java -jar "$ABS_JETTY_HOME/start.jar" $DryRunArg
} finally {
Pop-Location
}
}
$OPTS = Invoke-DryRun "--dry-run=opts"
$MAIN_CLASS = Invoke-DryRun "--dry-run=main"
$ARGS_OUTPUT = Invoke-DryRun "--dry-run=args"
$PATH_INFO = Invoke-DryRun "--dry-run=path"
$ENVS = try { Invoke-DryRun "--dry-run=envs" } catch { "" }
$CONF_JETTY_HOME = $ABS_JETTY_HOME -replace '\\', '/'
$CONF_JETTY_BASE = $ABS_JETTY_BASE -replace '\\', '/'
$ConfFile = Join-Path $CONF_DIR "wrapper-generated.conf"
$CurrentDate = Get-Date -Format "g"
# Helper function to sanitize text replacing paths
function Sanitize-Text {
param([string]$text)
if ([string]::IsNullOrEmpty($text)) { return "" }
# Remove any single quotes
$text = $text -replace "'", ""
# Escape paths for regex replacement
$escapedHome = [Regex]::Escape($ABS_JETTY_HOME)
$escapedBase = [Regex]::Escape($ABS_JETTY_BASE)
$text = $text -replace $escapedHome, "%JETTY_HOME%"
$text = $text -replace $escapedBase, "%JETTY_BASE%"
$text = $text -replace "file:///", "file://"
return $text
}
# Start writing the file
$ConfigContent = @"
# =============================================================
# AUTO-GENERATED Jetty 12 Java Service Wrapper config - $CurrentDate
# Regenerate with: .\$($MyInvocation.MyCommand.Name)
# =============================================================
set.JETTY_HOME=$CONF_JETTY_HOME
set.JETTY_BASE=$CONF_JETTY_BASE
# From --dry-run=path
"@
# Process PATH_INFO
$k = 1
if (-not [string]::IsNullOrWhiteSpace($PATH_INFO)) {
$cleanPathInfo = $PATH_INFO -replace "^--class-path\s+", ""
$entries = $cleanPathInfo -split [IO.Path]::PathSeparator
foreach ($entry in $entries) {
if (-not [string]::IsNullOrWhiteSpace($entry)) {
$entryClean = Sanitize-Text $entry.Trim()
$ConfigContent += "`nwrapper.java.classpath.$k=$entryClean"
$k++
}
}
}
$ConfigContent += @"
# App Main Class
wrapper.app.parameter.1=$MAIN_CLASS
# From --dry-run=args (properties + XMLs)
"@
# Process ARGS
$m = 100
if (-not [string]::IsNullOrWhiteSpace($ARGS_OUTPUT)) {
$argsList = $ARGS_OUTPUT -split "\s+"
foreach ($arg in $argsList) {
if (-not [string]::IsNullOrWhiteSpace($arg)) {
if ($arg -like "*addHiddenClasses*") {
$ConfigContent += "`nwrapper.app.parameter.$m=jetty.webapp.addHiddenClasses=org.eclipse.jetty.logging.,file://%JETTY_HOME%/lib/logging/,org.slf4j."
} else {
$argClean = Sanitize-Text $arg
$ConfigContent += "`nwrapper.app.parameter.$m=$argClean"
}
$m++
}
}
}
# Process ENVS
if (-not [string]::IsNullOrWhiteSpace($ENVS)) {
$ConfigContent += "`n`n# From --dry-run=envs (EEnn)"
$m = 1000
$envsList = $ENVS -split "\s+"
foreach ($arg in $envsList) {
if (-not [string]::IsNullOrWhiteSpace($arg)) {
$argClean = Sanitize-Text $arg
$ConfigContent += "`nwrapper.app.parameter.$m=$argClean"
$m++
}
}
}
# Output to file with UTF8 encoding (standard for config files)
$ConfigContent + "`n" | Out-File -FilePath $ConfFile -Encoding utf8
Write-Output "SUCCESS! Generated -> $ConfFile"
From within the jetty-base-12 directory, run this command:
This bypass applies only to that invocation and does not modify your PowerShell configuration.
NOTE
If you are using the Standard or Professional Edition, then a default 15 minute license will have been copied as conf/wrapper-license.conf.
You will need to update with a trial, server, or development license to run for longer than that.
Running
To run within a console:
Execute: bin/service.bat console
To run as a Windows Service:
Install the service with: bin/service.bat install
Then start the service with: bin/service.bat start
Stop the service with: bin/service.bat stop
Uninstall the service with: bin/service.bat remove
For a list of available commands:
Run: bin/service.bat
You can see the log output of the Wrapper along with any console output from java by tailing the log file logs/wrapper.log.
Other Jetty log files can also be found in this directory.
Eclipse Jetty 11.0.x Integration
This section describes the steps to quickly set up Eclipse Jetty 11.0.26. Other versions in the Jetty 11 series should work in a similar way.
Download Jetty
Download Jetty as a zip file from Jetty Downloads.
Specific versions can also be downloaded from the Maven Repository.
We will be working with jetty-home-11.0.26.zip.
Extract the archive to obtain an jetty-home-11.0.26 directory, and optionally rename it to whatever you prefer to work with.
Jetty 11 does not want to modify anything in the home directory.
Create a sibling directory jetty-base-11, cd into that directory, and run the following command to initialize the directory:
The following steps are designed to work with version 3.7.0 of the Java Service Wrapper.
Using earlier versions is possible, but will likely require some changes.
Decide which edition to use (Professional, Standard, or Community), and select the target platform, bitness, and architecture.
Then download the installer or archive and install or extract it.
We will assume you are using the Professional 64-bit Edition on Linux x86.
Wrapper Integration
To ease the placement of required Wrapper files, create the following PowerShell script in your jetty-base-11 directory as updateWrapper.ps1.
Update the location where you installed or extracted the Wrapper above.
This bypass applies only to that invocation and does not modify your PowerShell configuration.
The configuration uses Integration Method 1.
See note below about why start.jar is not used as an executable jar.
NOTE
- The JAVA_HOME must be set, but will default to the system environment if defined there.
Jetty 11 requires a minimum of Java 11 be specified.
- Jetty's start.jar file is an executable jar.
In principle, we could have used Integration Method 4 for this setup, but this would have required we specify the first app property to be wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
That would resolve into different values on individual machines and fail to work with the license key when used.
As a workaround, the start.jar is treated as a regular jar on the classpath, and the Main-Class: org.eclipse.jetty.start.Main entry was extracted from the Manifest file to be referenced directly.
Create the Wrapper configuration file as conf/wrapper.conf with the following content:
@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.
# Default mode for file inclusions
@include.default_mode=required
# Include file problems can be debugged by removing '#' at the beginning
# of the following line:
#@include.debug
#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
# License Key to start. Licenses can be purchased or a trial license
# requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial
# The Wrapper will look for either of the following optional files for a
# valid License Key. License Key properties can optionally be included
# directly in this configuration file.
@include.optional %WRAPPER_CONF_DIR%/wrapper-license.conf
@include.optional %WRAPPER_CONF_DIR%/wrapper-license-%WRAPPER_HOST_NAME%.conf
# The following property will output information about which License Key(s)
# are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE
#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)
# Setting all relative paths next to the fixed WRAPPER_BIN_DIR location helps make their meaning clear.
set.JETTY_HOME=%WRAPPER_BIN_DIR%/../../jetty-home-11.0.26
set.JETTY_BASE=%WRAPPER_BIN_DIR%/..
# Change the working dir used by java so Jetty is in its expected location.
# Setting JETTY_BASE relative to the fixed WRAPPER_BIN_DIR location helps make their meaning clear and avoid confusion when changing the working dir.
wrapper.working.dir=%JETTY_BASE%
#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP
# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=%JETTY_BASE%/lang
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Wrapper Jar file
wrapper.jarfile=%JETTY_BASE%/lib/wrapper.jar
# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN
# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=11
#wrapper.java.version.max=
# Java Classpath. Add class path elements as needed starting from 1
wrapper.java.classpath.1=%JETTY_HOME%/start.jar
# Java Modulepath. (Requires Java 9 or above)
# Add module path elements as needed starting from 1
#wrapper.java.module_path.1=
# Java Module list. (Requires Java 9 or above)
# Add module names as needed starting from 1
#wrapper.java.module.1=
# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=%JETTY_BASE%/lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=-Djava.io.tmpdir=%JETTY_BASE%/tmp
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256
# Application System Properties passed via the backend.
# Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=jetty.home=%JETTY_HOME%
wrapper.app.property.2=jetty.base=%JETTY_BASE%
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized.
# Helper classes are provided to do this for you.
# See the following page for details:
# https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Application parameters.
# Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE
# Add parameters as needed starting from 1
wrapper.app.parameter.1=org.eclipse.jetty.start.Main
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for Wrapper output logging.
wrapper.logfile=%JETTY_BASE%/logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Roll mode of the log file.
# SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
# value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
# launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0 disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffixes. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE
# Title to use when running as a console
wrapper.console.title=Jetty Server
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
# Out Of Memory detection.
# Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
# Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.
#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>
# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO
# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE
# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
# sensitive data, the Wrapper requires that all permissions granted
# to these files be explicitly allowed in the configuration.
# Please read the documentation for the full list of properties.
# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators
# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>
# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>
#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section.
# The service can then be reinstalled.
# Name of the service
wrapper.name=jetty
# Display name of the service
wrapper.displayname=Jetty
# Description of the service
wrapper.description=Jetty Server
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed.
# AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Account to use when running the service.
# The default blank value will use LocalSystem, which is highly privileged
# account on Windows. Please read the documentation page for this property to
# learn about other account types that can be used.
wrapper.ntservice.account=
# Allow the current user to perform certain actions without being prompted for
# administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME
NOTE
If you are using the Standard or Professional Edition, then a default 15 minute license will have been copied as conf/wrapper-license.conf.
You will need to update with a trial, server, or development license to run for longer than that.
Running
To run within a console:
Execute: bin/service.bat console
To run as a Windows Service:
Install the service with: bin/service.bat install
Then start the service with: bin/service.bat start
Stop the service with: bin/service.bat stop
Uninstall the service with: bin/service.bat remove
For a list of available commands:
Run: bin/service.bat
You can see the log output of the Wrapper along with any console output from java by tailing the log file logs/wrapper.log.
Other Jetty log files can also be found in this directory.
Eclipse Jetty 10.0.x Integration
This section describes the steps to quickly set up Eclipse Jetty 10.0.26. Other versions in the Jetty 10 series should work in a similar way.
Download Jetty
Download Jetty as a zip file from Jetty Downloads.
Specific versions can also be downloaded from the Maven Repository.
We will be working with jetty-home-10.0.26.zip.
Extract the archive to obtain an jetty-home-10.0.26 directory, and optionally rename it to whatever you prefer to work with.
Jetty 10 does not want to modify anything in the home directory.
Create a sibling directory jetty-base-10, cd into that directory, and run the following command to initialize the directory:
The following steps are designed to work with version 3.7.0 of the Java Service Wrapper.
Using earlier versions is possible, but will likely require some changes.
Decide which edition to use (Professional, Standard, or Community), and select the target platform, bitness, and architecture.
Then download the installer or archive and install or extract it.
We will assume you are using the Professional 64-bit Edition on Linux x86.
Wrapper Integration
To ease the placement of required Wrapper files, create the following PowerShell script in your jetty-base-10 directory as updateWrapper.ps1.
Update the location where you installed or extracted the Wrapper above.
This bypass applies only to that invocation and does not modify your PowerShell configuration.
The configuration uses Integration Method 1.
See note below about why start.jar is not used as an executable jar.
NOTE
- The JAVA_HOME must be set, but will default to the system environment if defined there.
Jetty 10 requires a minimum of Java 11 be specified.
- Jetty's start.jar file is an executable jar.
In principle, we could have used Integration Method 4 for this setup, but this would have required we specify the first app property to be wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
That would resolve into different values on individual machines and fail to work with the license key when used.
As a workaround, the start.jar is treated as a regular jar on the classpath, and the Main-Class: org.eclipse.jetty.start.Main entry was extracted from the Manifest file to be referenced directly.
Create the Wrapper configuration file as conf/wrapper.conf with the following content:
@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.
# Default mode for file inclusions
@include.default_mode=required
# Include file problems can be debugged by removing '#' at the beginning
# of the following line:
#@include.debug
#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
# License Key to start. Licenses can be purchased or a trial license
# requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial
# The Wrapper will look for either of the following optional files for a
# valid License Key. License Key properties can optionally be included
# directly in this configuration file.
@include.optional %WRAPPER_CONF_DIR%/wrapper-license.conf
@include.optional %WRAPPER_CONF_DIR%/wrapper-license-%WRAPPER_HOST_NAME%.conf
# The following property will output information about which License Key(s)
# are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE
#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)
# Setting all relative paths next to the fixed WRAPPER_BIN_DIR location helps make their meaning clear.
set.JETTY_HOME=%WRAPPER_BIN_DIR%/../../jetty-home-10.0.26
set.JETTY_BASE=%WRAPPER_BIN_DIR%/..
# Change the working dir used by java so Jetty is in its expected location.
# Setting JETTY_BASE relative to the fixed WRAPPER_BIN_DIR location helps make their meaning clear and avoid confusion when changing the working dir.
wrapper.working.dir=%JETTY_BASE%
#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP
# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=%JETTY_BASE%/lang
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Wrapper Jar file
wrapper.jarfile=%JETTY_BASE%/lib/wrapper.jar
# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN
# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=11
#wrapper.java.version.max=
# Java Classpath. Add class path elements as needed starting from 1
wrapper.java.classpath.1=%JETTY_HOME%/start.jar
# Java Modulepath. (Requires Java 9 or above)
# Add module path elements as needed starting from 1
#wrapper.java.module_path.1=
# Java Module list. (Requires Java 9 or above)
# Add module names as needed starting from 1
#wrapper.java.module.1=
# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=%JETTY_BASE%/lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=-Djava.io.tmpdir=%JETTY_BASE%/tmp
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256
# Application System Properties passed via the backend.
# Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=jetty.home=%JETTY_HOME%
wrapper.app.property.2=jetty.base=%JETTY_BASE%
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized.
# Helper classes are provided to do this for you.
# See the following page for details:
# https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Application parameters.
# Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE
# Add parameters as needed starting from 1
wrapper.app.parameter.1=org.eclipse.jetty.start.Main
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for Wrapper output logging.
wrapper.logfile=%JETTY_BASE%/logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Roll mode of the log file.
# SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
# value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
# launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0 disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffixes. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE
# Title to use when running as a console
wrapper.console.title=Jetty Server
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
# Out Of Memory detection.
# Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
# Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.
#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>
# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO
# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE
# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
# sensitive data, the Wrapper requires that all permissions granted
# to these files be explicitly allowed in the configuration.
# Please read the documentation for the full list of properties.
# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators
# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>
# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>
#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section.
# The service can then be reinstalled.
# Name of the service
wrapper.name=jetty
# Display name of the service
wrapper.displayname=Jetty
# Description of the service
wrapper.description=Jetty Server
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed.
# AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Account to use when running the service.
# The default blank value will use LocalSystem, which is highly privileged
# account on Windows. Please read the documentation page for this property to
# learn about other account types that can be used.
wrapper.ntservice.account=
# Allow the current user to perform certain actions without being prompted for
# administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME
NOTE
If you are using the Standard or Professional Edition, then a default 15 minute license will have been copied as conf/wrapper-license.conf.
You will need to update with a trial, server, or development license to run for longer than that.
Running
To run within a console:
Execute: bin/service.bat console
To run as a Windows Service:
Install the service with: bin/service.bat install
Then start the service with: bin/service.bat start
Stop the service with: bin/service.bat stop
Uninstall the service with: bin/service.bat remove
For a list of available commands:
Run: bin/service.bat
You can see the log output of the Wrapper along with any console output from java by tailing the log file logs/wrapper.log.
Other Jetty log files can also be found in this directory.
Eclipse Jetty 9.4.x Integration
This section describes the steps to quickly set up Eclipse Jetty 9.4.58.v20250814. Other versions in the Jetty 9 series should work in a similar way.
Download Jetty
Download Jetty as a zip file from Jetty Downloads.
Specific versions can also be downloaded from the Archives Page.
We will be working with jetty-distribution-9.4.58.v20250814.zip.
Extract the archive to obtain an jetty-distribution-9.4.58.v20250814 directory, and optionally rename it to whatever you prefer to work with.
Jetty 9 does not want to modify anything in the home directory.
Create a sibling directory jetty-base-9, cd into that directory, and run the following command to initialize the directory:
The following steps are designed to work with version 3.7.0 of the Java Service Wrapper.
Using earlier versions is possible, but will likely require some changes.
Decide which edition to use (Professional, Standard, or Community), and select the target platform, bitness, and architecture.
Then download the installer or archive and install or extract it.
We will assume you are using the Professional 64-bit Edition on Linux x86.
Wrapper Integration
To ease the placement of required Wrapper files, create the following PowerShell script in your jetty-base-9 directory as updateWrapper.ps1.
Update the location where you installed or extracted the Wrapper above.
This bypass applies only to that invocation and does not modify your PowerShell configuration.
The configuration uses Integration Method 1.
See note below about why start.jar is not used as an executable jar.
NOTE
- The JAVA_HOME must be set, but will default to the system environment if defined there.
Jetty 9 requires a minimum of Java 8 be specified.
- Jetty's start.jar file is an executable jar.
In principle, we could have used Integration Method 4 for this setup, but this would have required we specify the first app property to be wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
That would resolve into different values on individual machines and fail to work with the license key when used.
As a workaround, the start.jar is treated as a regular jar on the classpath, and the Main-Class: org.eclipse.jetty.start.Main entry was extracted from the Manifest file to be referenced directly.
Create the Wrapper configuration file as conf/wrapper.conf with the following content:
@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.
# Default mode for file inclusions
@include.default_mode=required
# Include file problems can be debugged by removing '#' at the beginning
# of the following line:
#@include.debug
#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
# License Key to start. Licenses can be purchased or a trial license
# requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial
# The Wrapper will look for either of the following optional files for a
# valid License Key. License Key properties can optionally be included
# directly in this configuration file.
@include.optional ../conf/wrapper-license.conf
@include.optional ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf
# The following property will output information about which License Key(s)
# are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE
#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)
# Setting all relative paths next to the fixed WRAPPER_BIN_DIR location helps make their meaning clear.
set.JETTY_HOME=%WRAPPER_BIN_DIR%/../../jetty-distribution-9.4.58.v20250814
set.JETTY_BASE=%WRAPPER_BIN_DIR%/..
# Change the working dir used by java so Jetty is in its expected location.
# Setting JETTY_BASE relative to the fixed WRAPPER_BIN_DIR location helps make their meaning clear and avoid confusion when changing the working dir.
wrapper.working.dir=%JETTY_BASE%
#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP
# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=%JETTY_BASE%/lang
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Wrapper Jar file
wrapper.jarfile=%JETTY_BASE%/lib/wrapper.jar
# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN
# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=8
#wrapper.java.version.max=
# Java Classpath. Add class path elements as needed starting from 1
wrapper.java.classpath.1=%JETTY_HOME%/start.jar
# Java Modulepath. (Requires Java 9 or above)
# Add module path elements as needed starting from 1
#wrapper.java.module_path.1=
# Java Module list. (Requires Java 9 or above)
# Add module names as needed starting from 1
#wrapper.java.module.1=
# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=%JETTY_BASE%/lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=-Djava.io.tmpdir=%JETTY_BASE%/tmp
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
# Application System Properties passed via the backend.
# Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=jetty.home=%JETTY_HOME%
wrapper.app.property.2=jetty.base=%JETTY_BASE%
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized.
# Helper classes are provided to do this for you.
# See the following page for details:
# https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Application parameters.
# Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE
# Add parameters as needed starting from 1
wrapper.app.parameter.1=org.eclipse.jetty.start.Main
wrapper.app.parameter.2=jetty.state=%JETTY_BASE%/jetty-echo.state
wrapper.app.parameter.3=jetty-started.xml
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for Wrapper output logging.
wrapper.logfile=%JETTY_BASE%/logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Roll mode of the log file.
# SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
# value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
# launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0 disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffixes. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE
# Title to use when running as a console
wrapper.console.title=Jetty Server
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
# Out Of Memory detection.
# Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
# Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.
#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>
# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO
# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE
# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
# sensitive data, the Wrapper requires that all permissions granted
# to these files be explicitly allowed in the configuration.
# Please read the documentation for the full list of properties.
# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators
# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>
# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>
#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section.
# The service can then be reinstalled.
# Name of the service
wrapper.name=jetty
# Display name of the service
wrapper.displayname=Jetty
# Description of the service
wrapper.description=Jetty Server
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed.
# AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Account to use when running the service.
# The default blank value will use LocalSystem, which is highly privileged
# account on Windows. Please read the documentation page for this property to
# learn about other account types that can be used.
wrapper.ntservice.account=
# Allow the current user to perform certain actions without being prompted for
# administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME
NOTE
If you are using the Standard or Professional Edition, then a default 15 minute license will have been copied as conf/wrapper-license.conf.
You will need to update with a trial, server, or development license to run for longer than that.
Running
To run within a console:
Execute: bin/service.bat console
To run as a Windows Service:
Install the service with: bin/service.bat install
Then start the service with: bin/service.bat start
Stop the service with: bin/service.bat stop
Uninstall the service with: bin/service.bat remove
For a list of available commands:
Run: bin/service.bat
You can see the log output of the Wrapper along with any console output from java by tailing the log file logs/wrapper.log.
Other Jetty log files can also be found in this directory.
Follow-Up Questions
If you are a Jetty power user and have suggestions for improving this document, please let us know at support@tanukisoftware.com.