web-dev-qa-db-fra.com

Comment réparer "les fichiers JAR analysés, mais aucun TLD n'y a été trouvé" dans Tomcat 9.0.0M10

Je suis nouveau sur Java EE et j'essaie de travailler sur ServletContextListener et le travail d'écoute est une connexion à la base de données bla bla. Quand j'essaie de démarrer le serveur (Tomcat 9), il est bloqué:

"INFO: Au moins un fichier JAR a été analysé pour les TLD mais ne contenait aucun TLD. Activer la journalisation du débogage pour cet enregistreur pour une liste complète des fichiers JAR analysés, mais aucun fichier TLD n'a été trouvé. Ignorer les fichiers JAR inutiles lors de l'analyse peut améliorer le temps de démarrage." temps de compilation. "

J'ai donc changé certaines propriétés dans "Fichier de propriétés de journalisation" comme ceci:

    # Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.Apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

handlers = 1catalina.org.Apache.juli.AsyncFileHandler, 2localhost.org.Apache.juli.AsyncFileHandler, 3manager.org.Apache.juli.AsyncFileHandler, 4Host-manager.org.Apache.juli.AsyncFileHandler, Java.util.logging.ConsoleHandler

.handlers = 1catalina.org.Apache.juli.AsyncFileHandler, Java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.Apache.juli.AsyncFileHandler.level = FINE
1catalina.org.Apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.Apache.juli.AsyncFileHandler.prefix = catalina.

2localhost.org.Apache.juli.AsyncFileHandler.level = FINE
2localhost.org.Apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.Apache.juli.AsyncFileHandler.prefix = localhost.

3manager.org.Apache.juli.AsyncFileHandler.level = FINE
3manager.org.Apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.Apache.juli.AsyncFileHandler.prefix = manager.

4Host-manager.org.Apache.juli.AsyncFileHandler.level = FINE
4Host-manager.org.Apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4Host-manager.org.Apache.juli.AsyncFileHandler.prefix = Host-manager.

Java.util.logging.ConsoleHandler.level = FINE
Java.util.logging.ConsoleHandler.formatter = org.Apache.juli.OneLineFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.Apache.juli.AsyncFileHandler

org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = FINE
org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.Apache.juli.AsyncFileHandler

org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].[/Host-manager].level = FINE
org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].[/Host-manager].handlers = 4Host-manager.org.Apache.juli.AsyncFileHandler

# For example, set the org.Apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.Apache.catalina.util.LifecycleBase.level = FINE

# To see debug messages in TldLocationsCache, uncomment the following line:
org.Apache.jasper.compiler.TldLocationsCache.level = FINE
org.Apache.jasper.servlet.TldScanner.level = FINE

# To see debug messages for HTTP/2 handling, uncomment the following line:
#org.Apache.coyote.http2.level = FINE

# To see debug messages for WebSocket handling, uncomment the following line:
#org.Apache.Tomcat.websocket.level = FINE

Toutes les réponses sont acceptables. Merci à tous.

13
Coder ACJHP

Ce n'est pas un bug ni aucun type de problème dans Tomcat. Tomcat vous informe simplement que certains fichiers jar ne contiennent pas de TLD et que vous pouvez les ajouter à la liste de sauts du scanner pour améliorer les performances de démarrage. Donc, vous avez deux options:

  1. Vous pouvez ignorer cet indice en toute sécurité. Toutefois, si cela vous ennuie, vous pouvez définir un niveau de journalisation supérieur pour cet enregistreur, et ainsi empêcher Tomcat de le consigner. Ajoutez simplement org.Apache.jasper.servlet.TldScanner.level = SEVERE à la fin de logging.properties.

  2. Activez la journalisation du débogage pour que Tomcat répertorie ces fichiers JAR et les ajoute à la liste de saut. Ensemble:

    org.Apache.jasper.compiler.TldLocationsCache.level = FINE
    org.Apache.jasper.servlet.TldScanner.level = FINE
    

Et ajoutez les noms de pots imprimés (sans le chemin) à Tomcat.util.scan.StandardJarScanFilter.jarsToSkip=... dans Tomcat_dir/conf/catalina.properties

21
Svetlin Zarev

Définir la journalisation sur FINE, FINEST ou ALL pour rechercher tous les pots à exclure n'est pas nécessaire.

Voici un script qui trouve tous les fichiers jar ne contenant pas de TLD (changez la variable Tomcat_HOME pour qu'elle corresponde à votre installation) et affiche une liste sur le formulaire.

jar1.jar,\
jar2.jar,\
...

qui peut être collé dans catalina.properties (omettez le dernier ', \'):

#!/bin/sh
Tomcat_HOME=/opt/Tomcat
for i in `find $Tomcat_HOME -follow -name "*jar"`
do
    jar tvf $i | grep -i tld > /dev/null
    if [ $? -ne 0 ]; then
        echo "$(basename $i),\\"
    fi
done

Cependant, si je suis correctement informé, il existe une possibilité dans Tomcat 9 d'exclure tous les fichiers jar en modifiant (dans catalina.properties):

Tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\

à

Tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar

(commentez la liste sur les lignes ci-dessous) puis annulez cette décision pour les fichiers JAR contenant des TLD en modifiant:

Tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar

et ajoutez la liste obtenue en modifiant le script ci-dessus pour répertorier les fichiers JAR contenant des TLD:

#!/bin/sh
Tomcat_HOME=/opt/Tomcat
for i in `find $Tomcat_HOME -follow -name "*jar"`
do
    jar tvf $i | grep -i tld > /dev/null
    if [ $? -eq 0 ]; then
        echo "$(basename $i),\\"
    fi
done
8
Serafim Dahl

changer le fichier conf\context.xml

<Context>
    <!-- only if you do not use jsp tag -->
    <JarScanner>
        <JarScanFilter defaultPluggabilityScan="false" defaultTldScan="false"/>
    </JarScanner>
</Context>

voir: https://Tomcat.Apache.org/Tomcat-9.0-doc/config/jar-scan-filter.html

0
Roc King