嵌入式tomcat 7.0.32启动罐扫描仪



我将tomcat 7.0.32嵌入在水槽源中。我遇到的问题是Flume将大量的东西放在同类路径上,而在启动时,Tomcat扫描了寻找TLDS的类Path,这引起了问题,因为Flume使用了通配符。

信息:启动servlet Engine:apache tomcat/7.0.3211月5日,2012年11月8:21:08 AM org.apache.catalina.startup.tldconfig tldscanjar警告:无法处理jar [jar:file:/opt/mapr/hadoop/hadoop-0.20.2/hadoop* coreh.jar!/] for TLD文件java.io.filenotfoundexception:/opt/mapr/hadoop/hadoop-0.20.2/hadoop* coreh.jar(没有此类文件或目录) 在java.util.zip.zipfile.open(本机方法) 在java.util.zip.zipfile。(zipfile.java:214) 在java.util.zip.zipfile。(zipfile.java:144) 在java.util.jar.jarfile。(jarfile.java:152) 在java.util.jar.jarfile。(jarfile.java:89) 在sun.net.www.protocol.jar.urljarfile(urljarfile.java:93) 在sun.net.www.protocol.jar.urljarfile.getjarfile(urljarfile.java:69) 在sun.net.www.protocol.jar.jarfilefactory.get(jarfilefactory.java:88) 在sun.net.www.protocol.jar.jarurlconnection.connect(jarurlConnection.java:122) 在sun.net.www.protocol.jar.jarurlconnection.getjarfile(jarurlConnection.java:89) atrg.apache.tomcat.util.scan.fileurljar。(fileurljar.java:41) atrg.apache.tomcat.util.scan.jarfactory.newinstance(jarfactory.java:34) atorg.apache.catalina.startup.tldconfig.tldscanjar(tldconfig.java:487) at org.apache.catalina.startup.tldconfig.access $ 100(tldconfig.java:58) atrg.apache.catalina.startup.tldconfig $ tldjarscannercallback.scan(tldconfig.java:303) 在org.apache.tomcat.util.scan.standjarscanner.process(StandardJarscanner.java:241) atrg.apache.tomcat.util.scan.standardjarscanner.scan(standardjarscanner.java:204) atorg.apache.catalina.startup.tldconfig.execute(tldconfig.java:277)

在我的代码中,我试图禁用此扫描,甚至尝试将jarscanner设置为在我的上下文中。这无济于事。以下是我的代码:

File docBase = new File(System.getProperty("java.io.tmpdir"));
    System.out.println("------- " + docBase.getAbsolutePath());
    String servletName = "1 source";
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(8080);
    tomcat.setBaseDir(docBase.getAbsolutePath());
    Context context = tomcat.addContext("", docBase.getAbsolutePath());
    context.setIgnoreAnnotations(true);
    context.setJarScanner(null);
    Tomcat.addServlet(context, servletName, new HttpServlet() {

尝试这个! 上下文= tomcat.addwebapp("/d"," d:/"); Jarscanner Jarscanner = New Jarscanner() {

        @Override
        public void scan(ServletContext arg0, ClassLoader arg1,
                JarScannerCallback arg2, Set<String> arg3)
        {
            //do nothing
        }
    };
    context.setJarScanner(jarScanner);

yo可以在tomcat.addwebapp()之前禁用扫描类和表现

ContextConfig contextConfig = new ContextConfig() {
            private boolean invoked = false;
            @Override
            public void lifecycleEvent(LifecycleEvent event) {
                if (!invoked) {
                    StandardJarScanner scanner = new StandardJarScanner();
                    scanner.setScanClassPath(false);
                    scanner.setScanManifest(false);
                    ((Context) event.getLifecycle()).setJarScanner(scanner);
                    invoked = true;
                }
                super.lifecycleEvent(event);
            }
        };
        Context ctx = tomcat.addWebapp(tomcat.getHost(), "/", "path/to/war", contextConfig);

其他两个答案不适用于tomcat 8.5 。AddWebapp将ContextConfig作为字符串。但是您可以使用下面的代码进行选择性扫描。请注意,如果在上下文中定义了jarscanner。xml将优先于代码。一旦您致电Tomcat.start()

,Jarscanfilter将被回电
            Context context = tomcat.addWebapp("/"+sApp, location);
            //Keep in mind that this JarScanFilter will be overwritten by JarScanner that defined in META-INFcontext.xml
            JarScanFilter jarScanFilter = new JarScanFilter() {
                @Override
                public boolean check(JarScanType jarScanType, String jarName) {
                    if(jarName.startsWith("spring")) {
                        System.out.println("JarScanType: "+ jarScanType +" JarName: "+ jarName + " Will Scan: true");
                        return true;
                    }
                    System.out.println("JarScanType: "+ jarScanType +" JarName: "+ jarName + " Will Scan: false");
                    return false;
                }
            };
            context.getJarScanner().setJarScanFilter(jarScanFilter);

最新更新