我正在使用sbt汇编构建Eclipse中的一个项目。我有一个非常大和复杂的build.sbt文件,因为我有很多冲突。
使用tika 1.16中的pdf、OOXML和OpenDocument解析器,pdf、pptx、odt和docx文件都能正常工作。然而,当我尝试使用TXTParser解析一个txt文件(UTF-8编码)时,我会得到以下错误:
org.apache.tika.exception.TikaException: Failed to detect the character encoding of a document
at org.apache.tika.detect.AutoDetectReader.detect(AutoDetectReader.java:77)
at org.apache.tika.detect.AutoDetectReader.<init>(AutoDetectReader.java:108)
at org.apache.tika.detect.AutoDetectReader.<init>(AutoDetectReader.java:114)
at org.apache.tika.parser.txt.TXTParser.parse(TXTParser.java:79)`
来自我的Scala代码中的这一行:
val content = theParser.parse(stream.open(), chandler, meta, pContext)
其中stream是PortableDataStream,chandler是新的BodyContentHandler,meta是新的元数据,pContext是新的ParseContext。
如果我使用AutoDetectParser,我会得到以下错误:
org.apache.jena.shared.SyntaxError: unknown
at org.apache.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:73)
at org.apache.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:58)
at org.apache.jena.rdf.model.impl.ModelCom.read(ModelCom.java:305)
来自我的Scala代码中的这一行:
val response = model.read(stream, null, "N-TRIPLES")
其中stream是InputStream。
我认为这是由于Tika的空洞回应(所以也是同样的问题)。
我很确定这可能是我过于复杂的build.sbt文件中的一个依赖性问题,但经过几个小时的尝试,我确实需要帮助。
一个积极的方面是,如果没有输入txt文件,一切都能完美工作,所以这可能是我的最后一个问题!
最后,这里是我使用sbt clean assembly
:构建的build.sbt文件
scalaVersion := "2.11.8"
version := "1.0.0"
name := "crawldocs"
conflictManager := ConflictManager.strict
mainClass in assembly := Some("com.addlesee.crawling.CrawlHiccup")
libraryDependencies ++= Seq(
"org.apache.tika" % "tika-core" % "1.16",
"org.apache.tika" % "tika-parsers" % "1.16" excludeAll(
ExclusionRule(organization = "*", name = "guava")
),
"com.blazegraph" % "bigdata-core" % "2.0.0" excludeAll(
ExclusionRule(organization = "*", name = "collection-0.7"),
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-csv"),
ExclusionRule(organization = "*", name = "commons-io"),
ExclusionRule(organization = "*", name = "commons-lang3"),
ExclusionRule(organization = "*", name = "commons-logging"),
ExclusionRule(organization = "*", name = "httpclient"),
ExclusionRule(organization = "*", name = "httpclient-cache"),
ExclusionRule(organization = "*", name = "httpcore"),
ExclusionRule(organization = "*", name = "httpmime"),
ExclusionRule(organization = "*", name = "jackson-annotations"),
ExclusionRule(organization = "*", name = "jackson-core"),
ExclusionRule(organization = "*", name = "jackson-databind"),
ExclusionRule(organization = "*", name = "jcl-over-slf4j"),
ExclusionRule(organization = "*", name = "jena-cmds"),
ExclusionRule(organization = "*", name = "jena-rdfconnection"),
ExclusionRule(organization = "*", name = "jena-tdb"),
ExclusionRule(organization = "*", name = "jsonld-java"),
ExclusionRule(organization = "*", name = "libthrift"),
ExclusionRule(organization = "*", name = "log4j"),
ExclusionRule(organization = "*", name = "slf4j-api"),
ExclusionRule(organization = "*", name = "slf4j-log4j12"),
ExclusionRule(organization = "*", name = "xercesImpl"),
ExclusionRule(organization = "*", name = "xml-apis")
),
"org.scalaj" %% "scalaj-http" % "2.3.0",
"org.apache.jena" % "apache-jena" % "3.4.0" excludeAll(
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-csv"),
ExclusionRule(organization = "*", name = "commons-lang3"),
ExclusionRule(organization = "*", name = "httpclient"),
ExclusionRule(organization = "*", name = "httpclient-cache"),
ExclusionRule(organization = "*", name = "httpcore"),
ExclusionRule(organization = "*", name = "jackson-core"),
ExclusionRule(organization = "*", name = "jackson-databind"),
ExclusionRule(organization = "*", name = "jcl-over-slf4j"),
ExclusionRule(organization = "*", name = "jena-rdfconnection"),
ExclusionRule(organization = "*", name = "slf4j-api")
),
"org.apache.jena" % "apache-jena-libs" % "3.4.0" excludeAll(
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-csv"),
ExclusionRule(organization = "*", name = "commons-lang3"),
ExclusionRule(organization = "*", name = "httpclient"),
ExclusionRule(organization = "*", name = "httpclient-cache"),
ExclusionRule(organization = "*", name = "httpcore"),
ExclusionRule(organization = "*", name = "jackson-core"),
ExclusionRule(organization = "*", name = "jackson-databind"),
ExclusionRule(organization = "*", name = "jcl-over-slf4j"),
ExclusionRule(organization = "*", name = "jena-rdfconnection"),
ExclusionRule(organization = "*", name = "slf4j-api")
),
"org.noggit" % "noggit" % "0.6",
"com.typesafe.scala-logging" %% "scala-logging" % "3.7.2" excludeAll(
ExclusionRule(organization = "*", name = "slf4j-api")
),
"org.apache.spark" % "spark-core_2.11" % "2.2.0" excludeAll(
ExclusionRule(organization = "*", name = "breeze_2.11"),
ExclusionRule(organization = "*", name = "hadoop-hdfs"),
ExclusionRule(organization = "*", name = "hadoop-annotations"),
ExclusionRule(organization = "*", name = "hadoop-common"),
ExclusionRule(organization = "*", name = "hadoop-mapreduce-client-app"),
ExclusionRule(organization = "*", name = "hadoop-mapreduce-client-common"),
ExclusionRule(organization = "*", name = "hadoop-mapreduce-client-core"),
ExclusionRule(organization = "*", name = "hadoop-mapreduce-client-jobclient"),
ExclusionRule(organization = "*", name = "hadoop-mapreduce-client-shuffle"),
ExclusionRule(organization = "*", name = "hadoop-yarn-api"),
ExclusionRule(organization = "*", name = "hadoop-yarn-client"),
ExclusionRule(organization = "*", name = "hadoop-yarn-common"),
ExclusionRule(organization = "*", name = "hadoop-yarn-server-common"),
ExclusionRule(organization = "*", name = "hadoop-yarn-server-web-proxy"),
ExclusionRule(organization = "*", name = "activation"),
ExclusionRule(organization = "*", name = "hive-exec"),
ExclusionRule(organization = "*", name = "scala-compiler"),
ExclusionRule(organization = "*", name = "spire_2.11"),
ExclusionRule(organization = "*", name = "commons-compress"),
ExclusionRule(organization = "*", name = "slf4j-api"),
ExclusionRule(organization = "*", name = "guava"),
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-io"),
ExclusionRule(organization = "*", name = "gson"),
ExclusionRule(organization = "*", name = "httpclient"),
ExclusionRule(organization = "*", name = "zookeeper"),
ExclusionRule(organization = "*", name = "jettison"),
ExclusionRule(organization = "*", name = "jackson-core"),
ExclusionRule(organization = "*", name = "httpcore"),
ExclusionRule(organization = "*", name = "bcprov-jdk15on"),
ExclusionRule(organization = "*", name = "jul-to-slf4j"),
ExclusionRule(organization = "*", name = "jcl-over-slf4j"),
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "slf4j-log4j12"),
ExclusionRule(organization = "*", name = "curator-framework")
),
"org.scala-lang" % "scala-xml" % "2.11.0-M4",
"org.apache.hadoop" % "hadoop-mapreduce-client-core" % "2.7.3" excludeAll(
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "slf4j-api"),
ExclusionRule(organization = "*", name = "commons-io"),
ExclusionRule(organization = "*", name = "jettison"),
ExclusionRule(organization = "*", name = "avro"),
ExclusionRule(organization = "*", name = "commons-compress"),
ExclusionRule(organization = "*", name = "slf4j-log4j12"),
ExclusionRule(organization = "*", name = "netty")
),
"org.apache.hadoop" % "hadoop-common" % "2.7.3" excludeAll(
ExclusionRule(organization = "*", name = "commons-codec"),
ExclusionRule(organization = "*", name = "commons-cli"),
ExclusionRule(organization = "*", name = "slf4j-api"),
ExclusionRule(organization = "*", name = "commons-math3"),
ExclusionRule(organization = "*", name = "commons-io"),
ExclusionRule(organization = "*", name = "jets3t"),
ExclusionRule(organization = "*", name = "gson"),
ExclusionRule(organization = "*", name = "avro"),
ExclusionRule(organization = "*", name = "httpclient"),
ExclusionRule(organization = "*", name = "zookeeper"),
ExclusionRule(organization = "*", name = "commons-compress"),
ExclusionRule(organization = "*", name = "slf4j-log4j12"),
ExclusionRule(organization = "*", name = "commons-net"),
ExclusionRule(organization = "*", name = "curator-recipes"),
ExclusionRule(organization = "*", name = "jsr305")
)
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
上面的代码调用了旧的N-三元组解析,该解析仅因遗留原因而存在。旧的读取器仅为ASCII。UTF-8会破坏它。
要么apache-jena-libs
(类型=pom)没有被处理,要么您正在重新打包jar,并且还没有处理Java的ServiceLoader放置文件的META-INF/服务。Jena使用它进行初始化。必须通过串联相同名称的文件来组合META_INF/service/*文件。
详细信息:https://jena.apache.org/documentation/notes/jena-repack.html
最终修复。。。
我在MergeStrategy中的丢弃行上方添加了case x if x.contains("EncodingDetector") => MergeStrategy.deduplicate
。我的build.sbt底部的以下assemblyMergeStrategy修复了我的问题:
assemblyMergeStrategy in assembly := {
case x if x.contains("EncodingDetector") => MergeStrategy.deduplicate
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}