1

Flume ソースに Tomcat 7.0.32 を埋め込んでいます。私が抱えている問題は、Flume がクラスパスに大量のものを配置し、起動時に Tomcat がクラスパスをスキャンして TLD を探していることです。これは、flume で使用されるワイルドカードが原因で問題を引き起こしています。

情報: サーブレット エンジンの起動: Apache Tomcat/7.0.32 2012 年 11 月 5 日 8:21:08 AM org.apache.catalina.startup.TldConfig tldScanJar 警告: JAR の処理に失敗しました [jar:file:/opt/mapr/hadoop/ hadoop-0.20.2/hadoop*core*.jar!/] TLD ファイルの場合 java.io.FileNotFoundException: /opt/mapr/hadoop/hadoop-0.20.2/hadoop*core*.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) at 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 .JarURL 接続。connect(JarURLConnection.java:122) at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89) at org.apache.tomcat.util.scan.FileUrlJar.(FileUrlJar.java:41) at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34) org.apache.catalina.startup.TldConfig.tldScanJar(TldConfig.java:487) org.apache.catalina.startup.TldConfig. access$100(TldConfig.java:58) at org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java:303) at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:241) ) org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:204) で org.apache.catalina.startup.TldConfig.execute(TldConfig.java:277) で89) org.apache.tomcat.util.scan.FileUrlJar.(FileUrlJar.java:41) で org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34) で org.apache.catalina. startup.TldConfig.tldScanJar(TldConfig.java:487) org.apache.catalina.startup.TldConfig.access$100(TldConfig.java:58) org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java) :303) org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:241) で org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:204) で org.apache. catalina.startup.TldConfig.execute(TldConfig.java:277)89) org.apache.tomcat.util.scan.FileUrlJar.(FileUrlJar.java:41) で org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34) で org.apache.catalina. startup.TldConfig.tldScanJar(TldConfig.java:487) org.apache.catalina.startup.TldConfig.access$100(TldConfig.java:58) org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java) :303) org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:241) で org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:204) で org.apache. catalina.startup.TldConfig.execute(TldConfig.java:277)487) org.apache.catalina.startup.TldConfig.access$100(TldConfig.java:58) で org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java:303) で org.apache.tomcat. util.scan.StandardJarScanner.process(StandardJarScanner.java:241) at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:204) at org.apache.catalina.startup.TldConfig.execute(TldConfig.ジャワ:277)487) org.apache.catalina.startup.TldConfig.access$100(TldConfig.java:58) で org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java:303) で org.apache.tomcat. util.scan.StandardJarScanner.process(StandardJarScanner.java:241) at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:204) at org.apache.catalina.startup.TldConfig.execute(TldConfig.ジャワ:277)

私のコードでは、このスキャンを無効にしようとしましたが、コンテキストで JarScanner を null に設定しようとしました。そして、これは役に立ちません。以下は私のコードです:

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() {
4

3 に答える 3

1

これを試して!コンテキスト context = 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);
于 2013-03-05T01:33:47.413 に答える