Esta sección describe los pasos para configurar rápidamente Eclipse Jetty 12.0.36 o 12.1.10. Otras versiones de la serie Jetty 12 deberían funcionar de manera similar.
Descargar Jetty
Descargue Jetty como un archivo zip desde la página de Descargas de Jetty.
Las versiones específicas también se pueden descargar desde el Repositorio Maven.
En este ejemplo trabajaremos con jetty-home-12.1.10.zip.
Extraiga el archivo para obtener un directorio jetty-home-12.1.10, y opcionalmente cámbiele el nombre a lo que prefiera para trabajar.
Jetty 12 no modifica nada en el directorio de inicio.
Cree un directorio hermano jetty-base-12, ingrese (cd) a ese directorio y ejecute el siguiente comando para inicializar el directorio:
Los siguientes pasos están diseñados para funcionar con la versión 3.7.0 del Java Service Wrapper.
Es posible utilizar versiones anteriores, pero probablemente requerirá algunos cambios.
Decida qué edición utilizar (Profesional, Estándar o Comunidad) y seleccione la plataforma, la cantidad de bits y la arquitectura de destino.
Luego descargue el instalador o archivo, y proceda a instalarlo o extraerlo.
En este ejemplo, asumiremos que está utilizando la Edición Profesional de 64 bits en Windows x86.
Integración con el Wrapper
Para facilitar la ubicación de los archivos requeridos del Wrapper, cree el siguiente script de PowerShell en su directorio jetty-base-12 como updateWrapper.ps1.
Actualice la ubicación donde instaló o extrajo el Wrapper mencionado anteriormente.
La ruta de clases (classpath), la clase principal de la aplicación y los parámetros de la aplicación se generan dinámicamente mediante un script proporcionado después del archivo de configuración del Wrapper.
NOTA
La variable JAVA_HOME debe estar configurada, pero utilizará por defecto el entorno del sistema si está definida allí.
Jetty 12 requiere que se especifique por lo mínimo Java 17.
Cree el archivo de configuración del Wrapper como conf/wrapper.conf con el siguiente contenido:
@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
El start.jar de Jetty 12 no inicia directamente el servidor Jetty.
Más bien, es una aplicación de arranque (bootstrap) utilizada para generar dinámicamente la línea de comandos para iniciar un proceso Java secundario que realmente ejecuta el servidor Jetty.
Esto no es ideal cuando se ejecuta con el Java Service Wrapper, ya que no puede monitorear directamente la instancia de Java que ejecuta Jetty.
Jetty proporciona una forma de extraer componentes de esa línea de comandos y el script a continuación se utiliza para generar un fragmento de configuración conf/wrapper-generated.conf que es incluido por el conf/wrapper.conf anterior.
Si realiza cambios significativos en la configuración de su aplicación, es posible que deba volver a ejecutar este script.
De lo contrario, debería permanecer fijo.
Cree el siguiente script de PowerShell en su directorio jetty-base-12 como 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"
Desde dentro del directorio jetty-base-12, ejecute este comando:
Esta omisión se aplica solo a esa invocación y no modifica su configuración de PowerShell.
NOTA
Si utiliza las ediciones Estándar o Profesional, se habrá copiado una licencia predeterminada de 15 minutos como conf/wrapper-license.conf.
Deberá actualizar a una Licencia de Prueba, para Servidor o de Desarrollo para ejecutarlo durante más tiempo.
Ejecución
Para ejecutar en una consola:
Ejecute: bin/service.bat console
Para ejecutar como un Windows Service:
Instale el servicio con: bin/service.bat install
A continuación, inicie el servicio con: bin/service.bat start
Detenga el servicio con: bin/service.bat stop
Desinstale el servicio con: bin/service.bat remove
Para obtener una lista de los comandos disponibles:
Ejecute: bin/service.bat
Puede ver la salida del registro del Wrapper junto con cualquier salida de consola de Java haciendo un seguimiento (tail) del archivo de registro logs/wrapper.log.
También se pueden encontrar otros archivos de registro de Jetty en este directorio.
Integración con Eclipse Jetty 11.0.x
Esta sección describe los pasos para configurar rápidamente Eclipse Jetty 11.0.26. Otras versiones de la serie Jetty 11 deberían funcionar de manera similar.
Descargar Jetty
Descargue Jetty como un archivo zip desde la página de Descargas de Jetty.
Las versiones específicas también se pueden descargar desde el Repositorio Maven.
En este ejemplo trabajaremos con jetty-home-11.0.26.zip.
Extraiga el archivo para obtener un directorio jetty-home-11.0.26, y opcionalmente cámbiele el nombre a lo que prefiera para trabajar.
Jetty 11 no modifica nada en el directorio de inicio.
Cree un directorio hermano jetty-base-11, ingrese (cd) a ese directorio y ejecute el siguiente comando para inicializar el directorio:
Los siguientes pasos están diseñados para funcionar con la versión 3.7.0 del Java Service Wrapper.
Es posible utilizar versiones anteriores, pero probablemente requerirá algunos cambios.
Decida qué edición utilizar (Profesional, Estándar o Comunidad) y seleccione la plataforma, la cantidad de bits y la arquitectura de destino.
Luego descargue el instalador o archivo, y proceda a instalarlo o extraerlo.
En este ejemplo, asumiremos que está utilizando la Edición Profesional de 64 bits en Windows x86.
Integración con el Wrapper
Para facilitar la ubicación de los archivos requeridos del Wrapper, cree el siguiente script de PowerShell en su directorio jetty-base-11 como updateWrapper.ps1.
Actualice la ubicación donde instaló o extrajo el Wrapper mencionado anteriormente.
Esta omisión se aplica solo a esa invocación y no modifica su configuración de PowerShell.
La configuración utiliza el Método de Integración 1.
Consulte la nota a continuación sobre por qué start.jar no se utiliza como un jar ejecutable.
NOTA
- La variable JAVA_HOME debe estar configurada, pero utilizará por defecto el entorno del sistema si está definida allí.
Jetty 11 requiere que se especifique por lo mínimo Java 11.
- El archivo start.jar de Jetty es un jar ejecutable.
En principio, podríamos haber utilizado el Método de Integración 4 para esta configuración, pero esto habría requerido que especificáramos la primera propiedad de la aplicación como wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Eso se resolvería en valores diferentes en máquinas individuales y fallaría al funcionar con la clave de licencia cuando se utiliza.
Como solución alternativa, el start.jar se trata como un jar normal en la ruta de clases (classpath), y la entrada Main-Class: org.eclipse.jetty.start.Main se extrajo del archivo Manifest para ser referenciada directamente.
Cree el archivo de configuración del Wrapper como conf/wrapper.conf con el siguiente contenido:
@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
NOTA
Si utiliza las ediciones Estándar o Profesional, se habrá copiado una licencia predeterminada de 15 minutos como conf/wrapper-license.conf.
Deberá actualizar a una Licencia de Prueba, para Servidor o de Desarrollo para ejecutarlo durante más tiempo.
Ejecución
Para ejecutar en una consola:
Ejecute: bin/service.bat console
Para ejecutar como un Windows Service:
Instale el servicio con: bin/service.bat install
A continuación, inicie el servicio con: bin/service.bat start
Detenga el servicio con: bin/service.bat stop
Desinstale el servicio con: bin/service.bat remove
Para obtener una lista de los comandos disponibles:
Ejecute: bin/service.bat
Puede ver la salida del registro del Wrapper junto con cualquier salida de consola de Java haciendo un seguimiento (tail) del archivo de registro logs/wrapper.log.
También se pueden encontrar otros archivos de registro de Jetty en este directorio.
Eclipse Jetty 10.0.x Integration
Esta sección describe los pasos para configurar rápidamente Eclipse Jetty 10.0.26. Otras versiones de la serie Jetty 10 deberían funcionar de manera similar.
Descargar Jetty
Descargue Jetty como un archivo zip desde la página de Descargas de Jetty.
Las versiones específicas también se pueden descargar desde el Repositorio Maven.
En este ejemplo trabajaremos con jetty-home-10.0.26.zip.
Extraiga el archivo para obtener un directorio jetty-home-10.0.26, y opcionalmente cámbiele el nombre a lo que prefiera para trabajar.
Jetty 10 no modifica nada en el directorio de inicio.
Cree un directorio hermano jetty-base-10, ingrese (cd) a ese directorio y ejecute el siguiente comando para inicializar el directorio:
Los siguientes pasos están diseñados para funcionar con la versión 3.7.0 del Java Service Wrapper.
Es posible utilizar versiones anteriores, pero probablemente requerirá algunos cambios.
Decida qué edición utilizar (Profesional, Estándar o Comunidad) y seleccione la plataforma, la cantidad de bits y la arquitectura de destino.
Luego descargue el instalador o archivo, y proceda a instalarlo o extraerlo.
En este ejemplo, asumiremos que está utilizando la Edición Profesional de 64 bits en Windows x86.
Integración con el Wrapper
Para facilitar la ubicación de los archivos requeridos del Wrapper, cree el siguiente script de PowerShell en su directorio jetty-base-10 como updateWrapper.ps1.
Actualice la ubicación donde instaló o extrajo el Wrapper mencionado anteriormente.
Esta omisión se aplica solo a esa invocación y no modifica su configuración de PowerShell.
La configuración utiliza el Método de Integración 1.
Consulte la nota a continuación sobre por qué start.jar no se utiliza como un jar ejecutable.
NOTA
- La variable JAVA_HOME debe estar configurada, pero utilizará por defecto el entorno del sistema si está definida allí.
Jetty 10 requiere que se especifique por lo mínimo Java 11.
- El archivo start.jar de Jetty es un jar ejecutable.
En principio, podríamos haber utilizado el Método de Integración 4 para esta configuración, pero esto habría requerido que especificáramos la primera propiedad de la aplicación como wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Eso se resolvería en valores diferentes en máquinas individuales y fallaría al funcionar con la clave de licencia cuando se utiliza.
Como solución alternativa, el start.jar se trata como un jar normal en la ruta de clases (classpath), y la entrada Main-Class: org.eclipse.jetty.start.Main se extrajo del archivo Manifest para ser referenciada directamente.
Cree el archivo de configuración del Wrapper como conf/wrapper.conf con el siguiente contenido:
@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
NOTA
Si utiliza las ediciones Estándar o Profesional, se habrá copiado una licencia predeterminada de 15 minutos como conf/wrapper-license.conf.
Deberá actualizar a una Licencia de Prueba, para Servidor o de Desarrollo para ejecutarlo durante más tiempo.
Ejecución
Para ejecutar en una consola:
Ejecute: bin/service.bat console
Para ejecutar como un Windows Service:
Instale el servicio con: bin/service.bat install
A continuación, inicie el servicio con: bin/service.bat start
Detenga el servicio con: bin/service.bat stop
Desinstale el servicio con: bin/service.bat remove
Para obtener una lista de los comandos disponibles:
Ejecute: bin/service.bat
Puede ver la salida del registro del Wrapper junto con cualquier salida de consola de Java haciendo un seguimiento (tail) del archivo de registro logs/wrapper.log.
También se pueden encontrar otros archivos de registro de Jetty en este directorio.
Eclipse Jetty 9.4.x Integration
Esta sección describe los pasos para configurar rápidamente Eclipse Jetty 9.4.58.v20250814. Otras versiones de la serie Jetty 9 deberían funcionar de manera similar.
Descargar Jetty
Descargue Jetty como un archivo zip desde la páginas de Descargas de Jetty.
Las versiones específicas también se pueden descargar desde la Página de archivos.
En este ejemplo trabajaremos con jetty-distribution-9.4.58.v20250814.zip.
Extraiga el archivo para obtener un directorio jetty-distribution-9.4.58.v20250814, y opcionalmente cámbiele el nombre a lo que prefiera para trabajar.
Jetty 9 no modifica nada en el directorio de inicio.
Cree un directorio hermano jetty-base-9, ingrese (cd) a ese directorio y ejecute el siguiente comando para inicializar el directorio:
Los siguientes pasos están diseñados para funcionar con la versión 3.7.0 del Java Service Wrapper.
Es posible utilizar versiones anteriores, pero probablemente requerirá algunos cambios.
Decida qué edición utilizar (Profesional, Estándar o Comunidad) y seleccione la plataforma, la cantidad de bits y la arquitectura de destino.
Luego descargue el instalador o archivo, y proceda a instalarlo o extraerlo.
En este ejemplo, asumiremos que está utilizando la Edición Profesional de 64 bits en Windows x86.
Integración con el Wrapper
Para facilitar la ubicación de los archivos requeridos del Wrapper, cree el siguiente script de PowerShell en su directorio jetty-base-9 como updateWrapper.ps1.
Actualice la ubicación donde instaló o extrajo el Wrapper mencionado anteriormente.
Esta omisión se aplica solo a esa invocación y no modifica su configuración de PowerShell.
La configuración utiliza el Método de Integración 1.
Consulte la nota a continuación sobre por qué start.jar no se utiliza como un jar ejecutable.
NOTA
- La variable JAVA_HOME debe estar configurada, pero utilizará por defecto el entorno del sistema si está definida allí.
Jetty 9 requiere que se especifique por lo mínimo Java 8.
- El archivo start.jar de Jetty es un jar ejecutable.
En principio, podríamos haber utilizado el Método de Integración 4 para esta configuración, pero esto habría requerido que especificáramos la primera propiedad de la aplicación como wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Eso se resolvería en valores diferentes en máquinas individuales y fallaría al funcionar con la clave de licencia cuando se utiliza.
Como solución alternativa, el start.jar se trata como un jar normal en la ruta de clases (classpath), y la entrada Main-Class: org.eclipse.jetty.start.Main se extrajo del archivo Manifest para ser referenciada directamente.
Cree el archivo de configuración del Wrapper como conf/wrapper.conf con el siguiente contenido:
@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
NOTA
Si utiliza las ediciones Estándar o Profesional, se habrá copiado una licencia predeterminada de 15 minutos como conf/wrapper-license.conf.
Deberá actualizar a una Licencia de Prueba, para Servidor o de Desarrollo para ejecutarlo durante más tiempo.
Ejecución
Para ejecutar en una consola:
Ejecute: bin/service.bat console
Para ejecutar como un Windows Service:
Instale el servicio con: bin/service.bat install
A continuación, inicie el servicio con: bin/service.bat start
Detenga el servicio con: bin/service.bat stop
Desinstale el servicio con: bin/service.bat remove
Para obtener una lista de los comandos disponibles:
Ejecute: bin/service.bat
Puede ver la salida del registro del Wrapper junto con cualquier salida de consola de Java haciendo un seguimiento (tail) del archivo de registro logs/wrapper.log.
También se pueden encontrar otros archivos de registro de Jetty en este directorio.
Comentarios y Sugerencias
Si es un usuario avanzado de Jetty y tiene sugerencias para mejorar este documento, háganoslo saber en support@tanukisoftware.com.