如何解决JSP编译器的警告:一个JAR被扫描了TLD,但没有包含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编译时间?

如何启用更好的输出?

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

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

上述解决scheme不适合我。 相反,我只是从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= 

Tomcat 8.5 。 里面的catalina.properties,位于/ conf目录下:

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

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

 <JarScanner scanClassPath="false"/> 

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

请注意,/ /var/log/tomcat7/catalina.out log / /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 

希望有所帮助。

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

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

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

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

tomcat 7.0.53中为我工作!

上面没有任何工作对我来说(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中

之后,我得到了许多“冒犯”的文件,我没有打扰他们(也恢复正常的日志logging…)

错误消息指出它正在使用哪个logging器,因此设置logging器.level

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

所以logging器是org.apache.jasper.compiler.TldLocationsCache 。 在你的logging.properties文件中,添加这一行:

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

由于Tomcat扫描TLD的所有Jars(标记库定义),警告就出现了。

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

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

现在,您应该能够看到有关哪些JAR导致初始警告的详细警告

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

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

你现在不应该看到上面的警告,如果你有一个相当大的应用程序,它应该为你节省大量的时间来部署一个应用程序。

注意:testing在Tomcat8