首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tika,Maven,依赖..。为什么Tika使用EmptyParser?

Tika,Maven,依赖..。为什么Tika使用EmptyParser?
EN

Stack Overflow用户
提问于 2018-10-15 08:55:10
回答 1查看 1.5K关注 0票数 2

我希望在Maven项目中使用Tika作为依赖项,从文件中提取元数据。当我使用mvn exec:java运行类时,它运行得很好,但在java -cp中却不能运行,所以我怀疑这是一个依赖问题。

我用maven阴影插件将jar中的所有依赖项都包括在内,并且在构建时还包括它们。

pom.xml:

代码语言:javascript
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.company.myapp</groupId>
  <artifactId>metadata-extractor</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>Metadata Extractor</name>
  <url>http://maven.apache.org</url>

  <properties>
    <tika.version>1.19</tika.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- Tika -->
    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers</artifactId>
      <version>${tika.version}</version>
    </dependency>
  </dependencies>


    <build>
      <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.2.0</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>shade</goal>
              </goals>
              <configuration>
                <minimizeJar>true</minimizeJar>
                <filters>
                  <filter>
                    <artifact>*:*</artifact>
                    <excludes>
                      <exclude>META-INF/*.SF</exclude>
                      <exclude>META-INF/*.DSA</exclude>
                      <exclude>META-INF/*.RSA</exclude>
                    </excludes>
                  </filter>
                </filters>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>

</project>

主修班:

代码语言:javascript
复制
public class App
{
    public static void main( String[] args )
    {
        // Get path
        Path path = Paths.get("/path/to/image.jpg");

        // Use Tika
        TikaConfig tikaConfig = TikaConfig.getDefaultConfig();
        Metadata metadata = new Metadata();
        AutoDetectParser parser = new AutoDetectParser(tikaConfig);
        ContentHandler handler = new BodyContentHandler(-1);

        try {
            TikaInputStream stream = TikaInputStream.get(path, metadata);
            parser.parse(stream, handler, metadata, new ParseContext());
        } catch (IOException | SAXException | TikaException e) {
            System.out.println("error: " + e.toString());
            return;
        }

        // Prints the metadata and content...
        System.out.println("Parsed Metadata: ");
        System.out.println(metadata);
        System.out.println("Parsed Text: ");
        System.out.println(handler.toString());

    }
}

使用mvn exec:java (按预期工作)的结果:

代码语言:javascript
复制
Parsed Metadata: 
... X-Parsed-By=org.apache.tika.parser.DefaultParser X-Parsed-By=org.apache.tika.parser.jpeg.JpegParser ... other metadatas ... 
Parsed Text: 

但是,有:

代码语言:javascript
复制
mvn clean package
java -cp target/metadata-extractor-1.0-SNAPSHOT.jar org.company.myapp.App

我得到了:

代码语言:javascript
复制
Parsed Metadata: 
X-Parsed-By=org.apache.tika.parser.EmptyParser resourceName=image.jpg Content-Length=1557172 Content-Type=image/jpeg
Parsed Text:

我做错了什么?要正确地自动检测解析器,我必须如何构建该项目?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 09:08:52

类路径中没有解析器,因此选择了EmptyParser。我认为问题在于遮阳插件。移除这一行:

代码语言:javascript
复制
<minimizeJar>true</minimizeJar>

并使用适当的版本添加这些依赖项:

代码语言:javascript
复制
 <dependency>
     <groupId>org.apache.pdfbox</groupId>
     <artifactId>jbig2-imageio</artifactId>
 </dependency>
 <dependency>
     <groupId>com.github.jai-imageio</groupId>
     <artifactId>jai-imageio-core</artifactId>
 </dependency>
 <dependency>
     <groupId>com.github.jai-imageio</groupId>
     <artifactId>jai-imageio-jpeg2000</artifactId>
 </dependency>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52813000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档