如何修复JSP编译器警告:一个JAR被扫描用于TLD但尚未包含TLD?

时间:2013-01-17 09:19:27

标签: logging jar compilation tomcat7 tld

当启动应用程序或通过ant编译JSP时,Tomcat 7 Jasper会抱怨多余或错放的JAR文件。我收到了以下信息

**compile-jsp:**
   [jasper] Jul 31, 2012 7:15:15 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
   [jasper] INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 

如何在扫描期间跳过不需要的JAR可以改善tomcat中的启动时间和JSP编译时间?

如何实现更好的输出?

10 个答案:

答案 0 :(得分:40)

对于 Tomcat 8 ,我必须将以下行添加到tomcat/conf/logging.properties,以便Tomcat扫描的jar显示在日志中:

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

答案 1 :(得分:39)

Tomcat 8.5 。 catalina.properties内部,位于/ conf目录集中:

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

或者进入位于Tomcat&conf目录中的context.xml并添加:

<JarScanner scanClassPath="false"/>

答案 2 :(得分:15)

上述解决方案对我不起作用。 相反,我只是从logging.properties文件的最后一行删除了哈希(#),以使其工作。

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

下一步是在catalina.properties文件中添加Tomcat 7正在寻找的jar,紧跟在以下行之后

org.apache.catalina.startup.TldConfig.jarsToSkip=

答案 3 :(得分:10)

如果它对任何人有帮助,我只是将以下输出文件的内容附加到现有的org.apache.catalina.startup.TldConfig.jarsToSkip=条目中。

请注意,/var/log/tomcat7/catalina.out是您的tomcat日志的位置。

egrep "No TLD files were found in \[file:[^\]+\]" /var/log/tomcat7/catalina.out -o | egrep "[^]/]+.jar" -o | sort | uniq | sed -e 's/.jar/.jar,\\/g' > skips.txt

希望有所帮助。

答案 4 :(得分:5)

警告出现是因为Tomcat扫描所有Jars的TLD(标记库定义)。

Step1 :要查看哪些JAR抛出此警告,请将以下行插入tomcat / conf / logging.properties

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

现在您应该能够看到警告,其中详细说明了哪些JAR导致初始警告

Step2 由于在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间,我们将跳过catalina.properties文件中不需要的JARS。你有两个选择 -

  1. 列出tomcat.util.scan.StandardJarScanFilter.jarsToSkip下的所有JAR。但如果你有很多罐子或罐子不断变化,这会变得很麻烦。
  2. 或者,插入tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*以跳过所有广告
  3. 您现在应该看不到上述警告,如果您有相当大的应用程序,它应该为您节省大量部署应用程序的时间。

    注意:在Tomcat8中测试

答案 5 :(得分:4)

取消注释此行(在/conf/logging.properties

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

tomcat 7.0.53 中为我工作!

答案 6 :(得分:4)

对于Tomcat 8,我必须将以下行添加到catalina.properties以防止Tomcat扫描的jar:

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=jsp-api.jar,servlet-api.jar

答案 7 :(得分:3)

以上都不适用于我(tomcat 7.0.62)...正如Sensei_Shoh注释看到消息上方的类并将其添加到logging.properties。我的日志是:

Jan 18, 2016 8:44:21 PM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

所以我添加了

org.apache.catalina.startup.TldConfig.level = FINE
在conf / logging.properties中

之后我得到了这么多&#34;冒犯&#34;我没有费心去跳过它们的文件(也恢复正常记录...)

答案 8 :(得分:1)

错误消息说明它正在使用哪个记录器,因此请设置记录器.level

[jasper] Jul 31, 2012 7:15:15 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar

因此记录器为org.apache.jasper.compiler.TldLocationsCache。在logging.properties文件中,添加以下行:

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

答案 9 :(得分:0)

如果日志中的额外条目打扰了您,但启动时间的额外时间没有,请将其添加到logging.properties并忘记它:

org.apache.jasper.servlet.TldScanner.level = WARNING