Come correggere “JAR che sono stati scansionati ma nessun TLD è stato trovato in essi” in Tomcat 9.0.0M10

Sono nuovo di Java EE e sto cercando di lavorare su ServletContextListener e il lavoro listener è la connessione al database bla bla. Quando sto provando ad avviare il server (Tomcat 9) è bloccato su:

“INFO: Almeno un JAR è stato scansionato per TLD ma non conteneva TLD. Abilita la registrazione di debug per questo logger per un elenco completo di JAR che sono stati scansionati ma nessun TLD è stato trovato in essi. Saltare i JAR non necessari durante la scansione può migliorare il tempo di avvio e JSP tempo di compilazione. ”

Così ho cambiato alcune proprietà in “File delle proprietà di registrazione” in questo modo:

# 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 

Tutte le risposte sono accettabili Grazie di tutto.

Questo non è un bug o alcun tipo di problema in tomcat. Tomcat sta solo informando che ci sono barattoli che non contengono TLD e puoi aggiungerli all’elenco dei salti dello scanner per migliorare le prestazioni di avvio. Quindi hai due opzioni:

  1. Puoi tranquillamente ignorare quel suggerimento. Tuttavia, se ti infastidisce, puoi impostare quel logger specifico su un livello di registrazione più elevato e quindi impedire a Tomcat di registrarlo. È sufficiente aggiungere org.apache.jasper.servlet.TldScanner.level = SEVERE alla fine di logging.properties.

  2. Abilita la registrazione di debug per fare in modo che Tomcat elenchi quei jar e li aggiunga all’elenco di skip. Impostato:

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

Aggiungere i nomi dei vasi stampati (senza il percorso) a tomcat.util.scan.StandardJarScanFilter.jarsToSkip=... in tomcat_dir / conf / catalina.properties

Impostare la registrazione su FINE, FINEST o ALL per trovare tutti i vasi da escludere non è necessario.

Ecco uno script che trova tutti i jar che non contengono TLD (modifica la variabile TOMCAT_HOME in modo che corrisponda all’installazione) e restituisce un elenco nel modulo

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

che può essere incollato in catalina.properties (ometti l’ultimo ‘, \’):

 #!/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 

Tuttavia, se sono correttamente informato, in tomcat 9 esiste la possibilità di escludere tutti i jar cambiando (in catalina.properties):

 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ 

a

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

(commentare la lista nelle righe sottostanti) e quindi annullare quella decisione per i vasi contenenti TLD modificando:

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

e aggiungi la lista ottenuta modificando lo script sopra per elencare i vasi che contengono 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 

lo stesso problema è stato risolto .. Penso che questo abbia un problema di authorization, quindi è necessario dare accesso completo per le applicazioni web / cartella del progetto.