web-dev-qa-db-ja.com

Tomcat 9.0.0M10で「スキャンされたがTLDが見つかりませんでしたJAR」を修正する方法

私はJava EEであり、ServletContextListenerで作業しようとすると、リスナージョブはデータベースbla blaに接続します。サーバー(Tomcat 9)を起動しようとすると、スタックします。

「情報:少なくとも1つのJARでTLDがスキャンされましたが、TLDが含まれていません。スキャンされたが、TLDが見つからなかったJARの完全なリストのこのロガーのデバッグログを有効にします。スキャン中に不要なJARをスキップすると、起動時間とJSPコンパイル時間。」

そこで、「ロギングプロパティファイル」のいくつかのプロパティを次のように変更しました。

    # 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

すべての回答が受け入れられます。すべてに感謝します。

13
Coder ACJHP

これは、Tomcatのバグや問題ではありません。 Tomcatは、TLDを含まないjarファイルがあることを通知しているだけであり、スキャナーのスキップリストに追加して、起動パフォーマンスを向上させることができます。したがって、2つのオプションがあります。

  1. このヒントは無視しても問題ありません。それでも気に入らない場合は、その特定のロガーをより高いログレベルに設定して、Tomcatがログを記録しないようにすることができます。 logging.propertiesの最後にorg.Apache.jasper.servlet.TldScanner.level = SEVEREを追加するだけです。

  2. デバッグロギングを有効にして、Tomcatがそれらのjarをリストし、スキップリストに追加するようにします。セットする:

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

そして、Tomcat_dir/conf/catalina.propertiesのTomcat.util.scan.StandardJarScanFilter.jarsToSkip=...に印刷されたjar名(パスなし)を追加します

21
Svetlin Zarev

除外するすべてのjarを見つけるために、ロギングをFINE、FINEST、またはALLに設定する必要はありません。

TLDを含まないすべてのjarを見つけ(インストールに合わせてTomcat_HOME変数を変更)、フォームにリストを出力するスクリプトを次に示します。

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

catalina.propertiesに貼り付けることができます(最後の '、\'は省略します):

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

ただし、正しく通知された場合、Tomcat 9では(catalina.propertiesで)変更してすべてのjarを除外する可能性があります。

Tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\

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

(以下の行のリストをコメントアウト)、次に変更してTLDを含むjarの決定をオーバーライドします。

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

上記のスクリプトを変更して取得したリストを追加して、TLDを含むjarをリストします。

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

conf\context.xmlファイルを変更します

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

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

0
Roc King