Cette section décrit les étapes pour configurer rapidement Eclipse Jetty 12.0.36 ou 12.1.10. Les autres versions de la série Jetty 12 devraient fonctionner de manière similaire.
Télécharger Jetty
Téléchargez Jetty sous forme de fichier tar.gz depuis Téléchargements Jetty.
Des versions spécifiques peuvent également être téléchargées depuis le dépôt Maven.
Nous travaillerons avec jetty-home-12.1.10.tar.gz.
Extrayez l'archive pour obtenir un répertoire jetty-home-12.1.10, et renommez-le éventuellement selon le nom que vous préférez utiliser.
Jetty 12 ne souhaite rien modifier dans le répertoire home.
Créez un répertoire frère jetty-base-12, placez-vous dans ce répertoire, et exécutez la commande suivante pour l'initialiser :
Les étapes suivantes sont conçues pour fonctionner avec la version 3.7.0 du Java Service Wrapper.
L'utilisation de versions antérieures est possible, mais nécessitera probablement quelques modifications.
Choisissez l'édition à utiliser (Professional, Standard ou Community), et sélectionnez la plateforme, le nombre de bits et l'architecture cibles.
Ensuite, téléchargez l'installateur ou l'archive et installez-le ou extraire-le.
Nous supposerons que vous utilisez l'édition Professional 64 bits sur Linux x86.
Intégration du Wrapper
Pour faciliter le placement des fichiers Wrapper requis, créez le script shell suivant dans votre répertoire jetty-base-12 sous le nom updateWrapper.sh.
Mettez à jour l'emplacement où vous avez installé ou extrait le Wrapper ci-dessus.
N'oubliez pas de le rendre exécutable.
#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
JETTY_BASE=.
WRAPPER_SCRIPT=service.sh
mkdir -p ${JETTY_BASE}/bin
mkdir -p ${JETTY_BASE}/lib
if [ -d ${WRAPPER_HOME}/lang ]
then
mkdir -p ${JETTY_BASE}/lang
cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${JETTY_BASE}/lang/.
cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${JETTY_BASE}/lang/.
fi
mkdir -p ${JETTY_BASE}/conf
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${JETTY_BASE}/conf/wrapper-license.conf
fi
mkdir -p ${JETTY_BASE}/logs
mkdir -p ${JETTY_BASE}/tmp
cp ${WRAPPER_HOME}/bin/wrapper ${JETTY_BASE}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.name@/jetty/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Jetty Server/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
chmod +x ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
Le classpath, la classe principale de l'application et les paramètres de l'application sont tous générés dynamiquement à l'aide d'un script fourni après le fichier de configuration du Wrapper.
NOTE
La variable JAVA_HOME doit être définie, mais elle prendra par défaut la valeur de l'environnement système si elle y est définie.
Jetty 12 exige qu'un minimum de Java 17 soit spécifié.
Créez le fichier de configuration du Wrapper conf/wrapper.conf avec le contenu suivant :
@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
Le start.jar de Jetty 12 ne lance pas directement le serveur Jetty.
Il s'agit plutôt d'une application d'amorçage utilisée pour générer dynamiquement la ligne de commande afin de lancer un processus Java enfant qui exécute réellement le serveur Jetty.
Ce n'est pas idéal lorsqu'il est exécuté avec le Java Service Wrapper, car celui-ci n'est pas en mesure de surveiller directement l'instance Java qui exécute Jetty.
Jetty fournit un moyen d'extraire les composants de cette ligne de commande, et le script ci-dessous est utilisé pour générer un fragment de configuration conf/wrapper-generated.conf qui est inclus par le conf/wrapper.conf ci-dessus.
Si vous apportez des modifications importantes à la configuration de votre application, vous devrez peut-être réexécuter ce script.
Sinon, il devrait rester inchangé.
Créez le script shell suivant dans votre répertoire jetty-base-12 sous le nom updateWrapperGeneratedConf.sh.
#!/bin/bash
set -e
# Run from Jetty base dir and specify Jetty home as argument.
cd "$(dirname "$0")" || exit 1
# Jetty home.
JETTY_HOME="${1:-}"
if [[ -z "$JETTY_HOME" ]]; then
echo "ERROR: jetty.home directory not specified." >&2
echo "Usage: $0 /path/to/jetty.home" >&2
exit 1
fi
if [[ ! -d "$JETTY_HOME" ]]; then
echo "ERROR: '$JETTY_HOME' does not exist or is not a directory." >&2
exit 1
fi
if [[ ! -f "$JETTY_HOME/start.jar" ]]; then
echo "ERROR: '$JETTY_HOME/start.jar' not found." >&2
echo "Is '$JETTY_HOME' a valid Jetty home directory?" >&2
exit 1
fi
JETTY_BASE="."
CONF_DIR="${JETTY_BASE}/conf"
ABS_JETTY_HOME=$(cd "$JETTY_HOME" && pwd)
ABS_JETTY_BASE=$(cd "$JETTY_BASE" && pwd)
echo ABS_JETTY_HOME=$ABS_JETTY_HOME
echo ABS_JETTY_BASE=$ABS_JETTY_BASE
# Run dry-run from inside JETTY_BASE
DRY_RUN() {
(cd "$JETTY_BASE" && java -jar "$JETTY_HOME/start.jar" "$@")
}
OPTS=$(DRY_RUN --dry-run=opts)
MAIN_CLASS=$(DRY_RUN --dry-run=main)
ARGS=$(DRY_RUN --dry-run=args)
PATH_INFO=$(DRY_RUN --dry-run=path)
ENVS=$(DRY_RUN --dry-run=envs || echo "")
if [[ "$JETTY_HOME" == /* ]]
then
CONF_JETTY_HOME="$JETTY_HOME"
else
CONF_JETTY_HOME="%WRAPPER_BIN_DIR%/../$JETTY_HOME"
fi
CONF_JETTY_BASE="%WRAPPER_BIN_DIR%/.."
# Generate the wrapper-generated.conf file:
cat > "$CONF_DIR/wrapper-generated.conf" << EOF
# =============================================================
# AUTO-GENERATED Jetty 12 Java Service Wrapper config - $(date)
# Regenerate with: $0
# =============================================================
set.JETTY_HOME=$CONF_JETTY_HOME
set.JETTY_BASE=$CONF_JETTY_BASE
# From --dry-run=path
EOF
k=1
echo "$PATH_INFO" | sed 's/^--class-path //' | tr ':' '\n' | while read -r entry; do
if [[ -n "$entry" ]]; then
entry_clean=$(echo "$entry" | sed "s|$ABS_JETTY_HOME|%JETTY_HOME%|g" | sed "s|$ABS_JETTY_BASE|%JETTY_BASE%|g")
echo "wrapper.java.classpath.$k=$entry_clean" >> "$CONF_DIR/wrapper-generated.conf"
((k++))
fi
done
cat >> "$CONF_DIR/wrapper-generated.conf" << EOF
# App Main Class
wrapper.app.parameter.1=$MAIN_CLASS
# From --dry-run=args (properties + XMLs)
EOF
m=100
echo "$ARGS" | xargs -n1 | while read -r arg; do
if [[ -n "$arg" ]]; then
if [[ "$arg" == *addHiddenClasses* ]]; then
echo "wrapper.app.parameter.$m=jetty.webapp.addHiddenClasses=org.eclipse.jetty.logging.,file://%JETTY_HOME%/lib/logging/,org.slf4j." >> "$CONF_DIR/wrapper-generated.conf"
else
arg_clean=$(echo "$arg" | sed "s|$ABS_JETTY_HOME|%JETTY_HOME%|g" | sed "s|$ABS_JETTY_BASE|%JETTY_BASE%|g" | sed 's|file:///|file://|g')
echo "wrapper.app.parameter.$m=$arg_clean" >> "$CONF_DIR/wrapper-generated.conf"
fi
((m++))
fi
done
if [[ -n "$ENVS" ]]; then
echo "" >> "$CONF_DIR/wrapper-generated.conf"
echo "# From --dry-run=envs (EEnn)" >> "$CONF_DIR/wrapper-generated.conf"
m=1000
echo "$ENVS" | xargs -n1 | while read -r arg; do
if [[ -n "$arg" ]]; then
arg_clean=$(echo "$arg" | sed "s|$ABS_JETTY_HOME|%JETTY_HOME%|g" | sed "s|$ABS_JETTY_BASE|%JETTY_BASE%|g" | sed 's|file:///|file://|g')
echo "wrapper.app.parameter.$m=$arg_clean" >> "$CONF_DIR/wrapper-generated.conf"
((m++))
fi
done
fi
echo "SUCCESS! Generated -> $CONF_DIR/wrapper-generated.conf"
Depuis le répertoire jetty-base-12, exécutez cette commande :
Si vous utilisez la Standard Edition ou la Professional Edition, une licence par défaut de 15 minutes aura été copiée en tant que conf/wrapper-license.conf.
Vous devrez la mettre à jour avec une licence Trial, Server ou Development pour l'exécuter plus longtemps.
Exécution
Pour exécuter dans une console :
Exécutez : bin/service.sh console
Pour exécuter en tant que daemon (service) :
Installez le service avec : bin/service.sh install
Puis démarrez le service avec : bin/service.sh start
Arrêtez le service avec : bin/service.sh stop
Désinstallez le service avec : bin/service.sh remove
Pour une liste des commandes disponibles :
Exécutez : bin/service.sh
Vous pouvez consulter la sortie des journaux du Wrapper ainsi que toute sortie console de Java en suivant le fichier journal logs/wrapper.log.
Les autres fichiers journaux de Jetty se trouvent également dans ce répertoire.
Intégration d'Eclipse Jetty 11.0.x
Cette section décrit les étapes pour configurer rapidement Eclipse Jetty 11.0.26. Les autres versions de la série Jetty 11 devraient fonctionner de manière similaire.
Télécharger Jetty
Téléchargez Jetty sous forme de fichier tar.gz depuis Téléchargements Jetty.
Des versions spécifiques peuvent également être téléchargées depuis le dépôt Maven.
Nous travaillerons avec jetty-home-11.0.26.tar.gz.
Extrayez l'archive pour obtenir un répertoire jetty-home-11.0.26, et renommez-le éventuellement selon le nom que vous préférez utiliser.
Jetty 11 ne souhaite rien modifier dans le répertoire home.
Créez un répertoire frère jetty-base-11, placez-vous dans ce répertoire, et exécutez la commande suivante pour l'initialiser :
Les étapes suivantes sont conçues pour fonctionner avec la version 3.7.0 du Java Service Wrapper.
L'utilisation de versions antérieures est possible, mais nécessitera probablement quelques modifications.
Choisissez l'édition à utiliser (Professional, Standard ou Community), et sélectionnez la plateforme, le nombre de bits et l'architecture cibles.
Ensuite, téléchargez l'installateur ou l'archive et installez-le ou extraire-le.
Nous supposerons que vous utilisez l'édition Professional 64 bits sur Linux x86.
Intégration du Wrapper
Pour faciliter le placement des fichiers Wrapper requis, créez le script shell suivant dans votre répertoire jetty-base-11 sous le nom updateWrapper.sh.
Mettez à jour l'emplacement où vous avez installé ou extrait le Wrapper ci-dessus.
N'oubliez pas de le rendre exécutable.
#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
JETTY_BASE=.
WRAPPER_SCRIPT=service.sh
mkdir -p ${JETTY_BASE}/bin
mkdir -p ${JETTY_BASE}/lib
if [ -d ${WRAPPER_HOME}/lang ]
then
mkdir -p ${JETTY_BASE}/lang
cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${JETTY_BASE}/lang/.
cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${JETTY_BASE}/lang/.
fi
mkdir -p ${JETTY_BASE}/conf
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${JETTY_BASE}/conf/wrapper-license.conf
fi
mkdir -p ${JETTY_BASE}/logs
mkdir -p ${JETTY_BASE}/tmp
cp ${WRAPPER_HOME}/bin/wrapper ${JETTY_BASE}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.name@/jetty/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Jetty Server/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
chmod +x ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
Exécutez le script :
./updateWrapper.sh
La configuration utilise la Méthode d'intégration 1.
Voir la note ci-dessous expliquant pourquoi start.jar n'est pas utilisé comme jar exécutable.
NOTE
- La variable JAVA_HOME doit être définie, mais elle prendra par défaut la valeur de l'environnement système si elle y est définie.
Jetty 11 exige qu'un minimum de Java 11 soit spécifié.
- Le fichier start.jar de Jetty est un jar exécutable.
En principe, nous aurions pu utiliser la Méthode d'intégration 4 pour cette configuration, mais cela aurait nécessité de spécifier la première propriété d'application comme étant wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Cela se résoudrait en des valeurs différentes sur chaque machine et ne fonctionnerait pas avec la clé de licence lors de son utilisation.
Comme solution de contournement, le start.jar est traité comme un jar ordinaire dans le classpath, et l'entrée Main-Class: org.eclipse.jetty.start.Main a été extraite du fichier Manifest pour être référencée directement.
Créez le fichier de configuration du Wrapper conf/wrapper.conf avec le contenu suivant :
@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
Si vous utilisez la Standard Edition ou la Professional Edition, une licence par défaut de 15 minutes aura été copiée en tant que conf/wrapper-license.conf.
Vous devrez la mettre à jour avec une licence Trial, Server ou Development pour l'exécuter plus longtemps.
Exécution
Pour exécuter dans une console :
Exécutez : bin/service.sh console
Pour exécuter en tant que daemon (service) :
Installez le service avec : bin/service.sh install
Puis démarrez le service avec : bin/service.sh start
Arrêtez le service avec : bin/service.sh stop
Désinstallez le service avec : bin/service.sh remove
Pour une liste des commandes disponibles :
Exécutez : bin/service.sh
Vous pouvez consulter la sortie des journaux du Wrapper ainsi que toute sortie console de Java en suivant le fichier journal logs/wrapper.log.
Les autres fichiers journaux de Jetty se trouvent également dans ce répertoire.
Intégration d'Eclipse Jetty 10.0.x
Cette section décrit les étapes pour configurer rapidement Eclipse Jetty 10.0.26. Les autres versions de la série Jetty 10 devraient fonctionner de manière similaire.
Télécharger Jetty
Téléchargez Jetty sous forme de fichier tar.gz depuis Téléchargements Jetty.
Des versions spécifiques peuvent également être téléchargées depuis le dépôt Maven.
Nous travaillerons avec jetty-home-10.0.26.tar.gz.
Extrayez l'archive pour obtenir un répertoire jetty-home-10.0.26, et renommez-le éventuellement selon le nom que vous préférez utiliser.
Jetty 10 ne souhaite rien modifier dans le répertoire home.
Créez un répertoire frère jetty-base-10, placez-vous dans ce répertoire, et exécutez la commande suivante pour l'initialiser :
Les étapes suivantes sont conçues pour fonctionner avec la version 3.7.0 du Java Service Wrapper.
L'utilisation de versions antérieures est possible, mais nécessitera probablement quelques modifications.
Choisissez l'édition à utiliser (Professional, Standard ou Community), et sélectionnez la plateforme, le nombre de bits et l'architecture cibles.
Ensuite, téléchargez l'installateur ou l'archive et installez-le ou extraire-le.
Nous supposerons que vous utilisez l'édition Professional 64 bits sur Linux x86.
Intégration du Wrapper
Pour faciliter le placement des fichiers Wrapper requis, créez le script shell suivant dans votre répertoire jetty-base-10 sous le nom updateWrapper.sh.
Mettez à jour l'emplacement où vous avez installé ou extrait le Wrapper ci-dessus.
N'oubliez pas de le rendre exécutable.
#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
JETTY_BASE=.
WRAPPER_SCRIPT=service.sh
mkdir -p ${JETTY_BASE}/bin
mkdir -p ${JETTY_BASE}/lib
if [ -d ${WRAPPER_HOME}/lang ]
then
mkdir -p ${JETTY_BASE}/lang
cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${JETTY_BASE}/lang/.
cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${JETTY_BASE}/lang/.
fi
mkdir -p ${JETTY_BASE}/conf
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${JETTY_BASE}/conf/wrapper-license.conf
fi
mkdir -p ${JETTY_BASE}/logs
mkdir -p ${JETTY_BASE}/tmp
cp ${WRAPPER_HOME}/bin/wrapper ${JETTY_BASE}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.name@/jetty/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Jetty Server/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
chmod +x ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
Exécutez le script :
./updateWrapper.sh
La configuration utilise la Méthode d'intégration 1.
Voir la note ci-dessous expliquant pourquoi start.jar n'est pas utilisé comme jar exécutable.
NOTE
- La variable JAVA_HOME doit être définie, mais elle prendra par défaut la valeur de l'environnement système si elle y est définie.
Jetty 10 exige qu'un minimum de Java 11 soit spécifié.
- Le fichier start.jar de Jetty est un jar exécutable.
En principe, nous aurions pu utiliser la Méthode d'intégration 4 pour cette configuration, mais cela aurait nécessité de spécifier la première propriété d'application comme étant wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Cela se résoudrait en des valeurs différentes sur chaque machine et ne fonctionnerait pas avec la clé de licence lors de son utilisation.
Comme solution de contournement, le start.jar est traité comme un jar ordinaire dans le classpath, et l'entrée Main-Class: org.eclipse.jetty.start.Main a été extraite du fichier Manifest pour être référencée directement.
Créez le fichier de configuration du Wrapper conf/wrapper.conf avec le contenu suivant :
@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
Si vous utilisez la Standard Edition ou la Professional Edition, une licence par défaut de 15 minutes aura été copiée en tant que conf/wrapper-license.conf.
Vous devrez la mettre à jour avec une licence Trial, Server ou Development pour l'exécuter plus longtemps.
Exécution
Pour exécuter dans une console :
Exécutez : bin/service.sh console
Pour exécuter en tant que daemon (service) :
Installez le service avec : bin/service.sh install
Puis démarrez le service avec : bin/service.sh start
Arrêtez le service avec : bin/service.sh stop
Désinstallez le service avec : bin/service.sh remove
Pour une liste des commandes disponibles :
Exécutez : bin/service.sh
Vous pouvez consulter la sortie des journaux du Wrapper ainsi que toute sortie console de Java en suivant le fichier journal logs/wrapper.log.
Les autres fichiers journaux de Jetty se trouvent également dans ce répertoire.
Intégration d'Eclipse Jetty 9.4.x
Cette section décrit les étapes pour configurer rapidement Eclipse Jetty 9.4.58.v20250814. Les autres versions de la série Jetty 9 devraient fonctionner de manière similaire.
Télécharger Jetty
Téléchargez Jetty sous forme de fichier tar.gz depuis Téléchargements Jetty.
Des versions spécifiques peuvent également être téléchargées depuis la page des archives.
Nous travaillerons avec jetty-distribution-9.4.58.v20250814.tar.gz.
Extrayez l'archive pour obtenir un répertoire jetty-distribution-9.4.58.v20250814, et renommez-le éventuellement selon le nom que vous préférez utiliser.
Jetty 9 ne souhaite rien modifier dans le répertoire home.
Créez un répertoire frère jetty-base-9, placez-vous dans ce répertoire, et exécutez la commande suivante pour l'initialiser :
Les étapes suivantes sont conçues pour fonctionner avec la version 3.7.0 du Java Service Wrapper.
L'utilisation de versions antérieures est possible, mais nécessitera probablement quelques modifications.
Choisissez l'édition à utiliser (Professional, Standard ou Community), et sélectionnez la plateforme, le nombre de bits et l'architecture cibles.
Ensuite, téléchargez l'installateur ou l'archive et installez-le ou extraire-le.
Nous supposerons que vous utilisez l'édition Professional 64 bits sur Linux x86.
Intégration du Wrapper
Pour faciliter le placement des fichiers Wrapper requis, créez le script shell suivant dans votre répertoire jetty-base-9 sous le nom updateWrapper.sh.
Mettez à jour l'emplacement où vous avez installé ou extrait le Wrapper ci-dessus.
N'oubliez pas de le rendre exécutable.
#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
JETTY_BASE=.
WRAPPER_SCRIPT=service.sh
mkdir -p ${JETTY_BASE}/bin
mkdir -p ${JETTY_BASE}/lib
if [ -d ${WRAPPER_HOME}/lang ]
then
mkdir -p ${JETTY_BASE}/lang
cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${JETTY_BASE}/lang/.
cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${JETTY_BASE}/lang/.
fi
mkdir -p ${JETTY_BASE}/conf
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${JETTY_BASE}/conf/wrapper-license.conf
fi
mkdir -p ${JETTY_BASE}/logs
mkdir -p ${JETTY_BASE}/tmp
cp ${WRAPPER_HOME}/bin/wrapper ${JETTY_BASE}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${JETTY_BASE}/lib/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.name@/jetty/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Jetty Server/g' ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
chmod +x ${JETTY_BASE}/bin/${WRAPPER_SCRIPT}
Exécutez le script :
./updateWrapper.sh
La configuration utilise la Méthode d'intégration 1.
Voir la note ci-dessous expliquant pourquoi start.jar n'est pas utilisé comme jar exécutable.
NOTE
- La variable JAVA_HOME doit être définie, mais elle prendra par défaut la valeur de l'environnement système si elle y est définie.
Jetty 9 exige qu'un minimum de Java 8 soit spécifié.
- Le fichier start.jar de Jetty est un jar exécutable.
En principe, nous aurions pu utiliser la Méthode d'intégration 4 pour cette configuration, mais cela aurait nécessité de spécifier la première propriété d'application comme étant wrapper.app.parameter.1=%JETTY_HOME%/start.jar.
Cela se résoudrait en des valeurs différentes sur chaque machine et ne fonctionnerait pas avec la clé de licence lors de son utilisation.
Comme solution de contournement, le start.jar est traité comme un jar ordinaire dans le classpath, et l'entrée Main-Class: org.eclipse.jetty.start.Main a été extraite du fichier Manifest pour être référencée directement.
Créez le fichier de configuration du Wrapper conf/wrapper.conf avec le contenu suivant :
@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
Si vous utilisez la Standard Edition ou la Professional Edition, une licence par défaut de 15 minutes aura été copiée en tant que conf/wrapper-license.conf.
Vous devrez la mettre à jour avec une licence Trial, Server ou Development pour l'exécuter plus longtemps.
Exécution
Pour exécuter dans une console :
Exécutez : bin/service.sh console
Pour exécuter en tant que daemon (service) :
Installez le service avec : bin/service.sh install
Puis démarrez le service avec : bin/service.sh start
Arrêtez le service avec : bin/service.sh stop
Désinstallez le service avec : bin/service.sh remove
Pour une liste des commandes disponibles :
Exécutez : bin/service.sh
Vous pouvez consulter la sortie des journaux du Wrapper ainsi que toute sortie console de Java en suivant le fichier journal logs/wrapper.log.
Les autres fichiers journaux de Jetty se trouvent également dans ce répertoire.
Demande de retours
Si vous êtes un utilisateur expérimenté de Jetty et avez des suggestions pour améliorer ce document, veuillez nous en informer à support@tanukisoftware.com.