Джена терпит неудачу, когда просит пропустить класс Xerces, в то время как Xerces 2 включен

avatar
user118967
8 апреля 2018 в 09:21
372
1
1

Я получаю сообщение об ошибке

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/util/XMLChar
    at org.apache.jena.shared.impl.PrefixMappingImpl.checkLegal(PrefixMappingImpl.java:172)

при запуске простого примера Jena, но у меня есть эти две зависимости в моем файле Maven pom.xml:

<dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>apache-jena-libs</artifactId>
    <type>pom</type>
    <version>3.6.0</version>
</dependency>
<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>

Я проверил загружаемый архив Jena, и его каталог lib действительно содержит jar-файл Xerces 2.11.0, поэтому версия верна.

Чего здесь не хватает?

Обновления:

AndyS указывает, что зависимость не нужна и что NoClassDefFoundError отличается от более распространенного ClassNotFoundException.

Ошибка возникает без зависимости. Что касается NoClassDefFoundError, не уверен, что может быть причиной этого. Мой код предельно прост:

String filename = "test.jsonld";

Model model = ModelFactory.createDefaultModel() ;
model.read(filename) ;

с test.jsonld равным

{
    "@id": "http://store.example.com/",
    "@type": "Store",
    "name": "Links Bike Shop",
    "description": "The most \"linked\" bike store on earth!"
}

Полный вывод, включая исключения, приведен ниже. Я не знаю, как приступить к устранению неполадок, есть предложения?

12:46:26,102 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:46:26,102 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:46:26,102 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/Users/E26638/git/aic-praise/target/classes/logback.xml]
12:46:26,103 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
12:46:26,104 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/C:/Users/E26638/git/aic-expresso/target/classes/logback.xml]
12:46:26,104 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/C:/Users/E26638/git/aic-praise/target/classes/logback.xml]
12:46:26,159 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
12:46:26,176 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word logxtracemsg with class [com.sri.ai.util.log.LogXTraceConverter]
12:46:26,176 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
12:46:26,189 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
12:46:26,251 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.sri.ai.grinder.helper.Trace] to false
12:46:26,252 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.sri.ai.grinder.helper.Trace level set to TRACE
12:46:26,252 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.sri.ai.grinder.helper.Justification] to false
12:46:26,252 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.sri.ai.grinder.helper.Justification level set to TRACE
12:46:26,252 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to DEBUG
12:46:26,252 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
12:46:26,253 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
12:46:26,253 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@67b6d4ae - Registering current configuration as safe fallback point

12:46:26.258 [main] DEBUG Jena - Jena initialization
12:46:26.335 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
12:46:26.335 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
12:46:26.337 [main] DEBUG org.apache.jena.util.LocationMapper - Failed to find configuration: file:location-mapping.rdf;file:location-mapping.n3;file:location-mapping.ttl;file:etc/location-mapping.rdf;file:etc/location-mapping.n3;file:etc/location-mapping.ttl
12:46:26.337 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
12:46:26.338 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorURL
12:46:26.338 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
12:46:26.343 [main] DEBUG o.a.j.r.s.stream.JenaIOEnvironment - Failed to find configuration: location-mapping.ttl;location-mapping.rdf;location-mapping.n3;etc/location-mapping.rdf;etc/location-mapping.n3;etc/location-mapping.ttl
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/util/XMLChar
    at org.apache.jena.shared.impl.PrefixMappingImpl.checkLegal(PrefixMappingImpl.java:172)
    at org.apache.jena.shared.impl.PrefixMappingImpl.setNsPrefix(PrefixMappingImpl.java:72)
    at org.apache.jena.shared.PrefixMapping.<clinit>(PrefixMapping.java:219)
    at org.apache.jena.sparql.ARQConstants.<clinit>(ARQConstants.java:106)
    at org.apache.jena.query.ARQ.init(ARQ.java:588)
    at org.apache.jena.sparql.system.InitARQ.start(InitARQ.java:29)
    at org.apache.jena.system.JenaSystem.lambda$init$2(JenaSystem.java:119)
    at java.util.ArrayList.forEach(Unknown Source)
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:194)
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:171)
    at org.apache.jena.system.JenaSystem.init(JenaSystem.java:117)
    at org.apache.jena.rdf.model.ModelFactory.<clinit>(ModelFactory.java:49)
    at com.sri.ai.praise.jdsonld.ReadJenaJSONLD.main(ReadJenaJSONLD.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.util.XMLChar
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 13 more
Источник
AndyS
8 апреля 2018 в 15:25
1

Вам не нужно включать зависимость от Xerces, потому что она рекурсивно включается "apache-jena-libs".

AndyS
8 апреля 2018 в 15:26
1

ClassNotFoundException (проблема пути к классу) — это не то же самое, что NoClassDefFoundError. NoClassDefFoundError может быть вызван несколькими причинами, но указывает, что класс был найден, но не может быть загружен. Без более подробной информации невозможно сказать намного больше.

user118967
8 апреля 2018 в 20:01
0

Спасибо, это очень полезная информация. Пожалуйста, смотрите обновления вопроса для получения более подробной информации. Не знаю, как начать устранение неполадок.

Ответы (1)

avatar
AndyS
9 апреля 2018 в 15:34
0

зависимости maven для проекта, который зависит исключительно от org.apache.jena:apache-jena-libs:pom:3.6.0, должны выглядеть следующим образом:

[INFO] org.apache.jena:jena-reports-version:jar:0.0.0-SNAPSHOT [INFO] \- org.apache.jena:apache-jena-libs:pom:3.6.0:compile [INFO] +- org.apache.jena:jena-tdb:jar:3.6.0:compile [INFO] | \- org.apache.jena:jena-arq:jar:3.6.0:compile [INFO] | +- org.apache.jena:jena-core:jar:3.6.0:compile [INFO] | | +- org.apache.jena:jena-iri:jar:3.6.0:compile [INFO] | | +- xerces:xercesImpl:jar:2.11.0:compile [INFO] | | | \- xml-apis:xml-apis:jar:1.4.01:compile ...

Если он не находит xerces, возможно, есть какие-то локальные помехи.