60

启动应用程序或通过 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 编译时间?

如何启用更好的输出?

4

10 回答 10

51

雄猫 8.5。在 catalina.properties 中,位于 /conf 目录集中:

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

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

<JarScanner scanClassPath="false"/>
于 2016-09-06T21:55:43.363 回答
44

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

org.apache.jasper.servlet.TldScanner.level = FINE
于 2014-02-27T15:29:19.503 回答
15

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

# 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=
于 2013-09-24T17:29:18.503 回答
11

如果它对任何人有帮助,我只是将以下输出文件的内容附加到现有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

希望有帮助。

于 2014-05-10T23:42:07.497 回答
7

出现警告是因为 Tomcat 扫描所有 Jar 以查找 TLD(标记库定义)。

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

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

现在您应该能够看到警告,其中包含导致初始警告的 JAR 的详细信息

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

  1. 列出tomcat.util.scan.StandardJarScanFilter.jarsToSkip. 但是如果你有很多罐子或者罐子不断变化,这会变得很麻烦。
  2. 或者,插入tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*以跳过所有罐子

您现在应该看不到上述警告,并且如果您有一个相当大的应用程序,它应该可以为您节省大量部署应用程序的时间。

注意:在Tomcat8中测试

于 2017-08-18T08:12:26.027 回答
4

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

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

在tomcat 7.0.53中为我工作!

于 2014-04-29T13:23:33.277 回答
4

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

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=jsp-api.jar,servlet-api.jar
于 2016-01-26T11:03:37.080 回答
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

在那之后,我得到了这么多“有问题”的文件,我懒得跳过它们(并且也恢复到正常的日志记录......)

于 2016-01-20T10:14:30.300 回答
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
于 2016-01-06T21:49:39.437 回答
0

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

org.apache.jasper.servlet.TldScanner.level = WARNING
于 2018-05-27T18:32:07.107 回答