2013-09-18 4 views
1

Я работаю с Xerces-для-Android: https://code.google.com/p/xerces-for-android/Xerces-для-Android NoClassDefFoundError При использовании Jar Вместо исходного кода

Если скопировать исходный код в простой тестовый проект (Java проект, а не андроид проекта), Я могу запускать свои проверки на проверку xml без каких-либо проблем.

Когда я делаю банку из исходных файлов, то использую это в своем пути класса вместо источника, я получаю NoClassDefFoundError, несмотря на то, что файлы присутствуют в банке.

Ниже сообщение об ошибке:

java.lang.ExceptionInInitializerError 
    at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(Unknown Source) 
    at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(Unknown Source) 
    at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.reset(Unknown Source) 
    at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) 
    at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) 
    at mf.org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source) 
    at mf.javax.xml.validation.SchemaFactory.newSchema(Unknown Source) 
    at xml.MFXMLUtil.validate(MFXMLUtil.java:33) 
    at xml.MFXMLTester.main(MFXMLTester.java:8) 
Caused by: java.lang.RuntimeException: internal error 
    at mf.org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.applyFacets1(Unknown Source) 
    at mf.org.apache.xerces.impl.dv.xs.BaseSchemaDVFactory.createBuiltInTypes(Unknown Source) 
    at mf.org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.createBuiltInTypes(Unknown Source) 
    at mf.org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.<clinit>(Unknown Source) 
    ... 9 more 

Ниже мой муравей сценарий, чтобы сделать банку:

<project name="XercesForAndroid" default="dist" basedir="."> 
    <description> 
     Builds jar for Xerces-For-Android 
    </description> 
    <!-- set global properties for this build --> 
    <property name="src" location="src"/> 
    <property name="build" location="build"/> 
    <property name="dist" location="dist"/> 

    <target name="init"> 
    <!-- Create the build directory structure used by compile --> 
    <mkdir dir="${build}"/> 
    </target> 

    <target name="compile" depends="clean, init" description="compile the source " > 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac verbose="true" target="1.6" srcdir="${src}" destdir="${build}"/> 
    </target> 

    <target name="dist" depends="compile" 
     description="generate the distribution" > 
    <!-- Create the distribution directory --> 
    <mkdir dir="${dist}/lib"/> 

    <!-- Put everything in ${build} into the .jar file --> 
    <jar jarfile="${dist}/lib/Xerces-For-Android.jar" basedir="${build}"/> 
    </target> 

    <target name="clean" 
     description="clean up" > 
    <!-- Delete the ${build} and ${dist} directory trees --> 
    <delete dir="${build}"/> 
    <delete dir="${dist}"/> 
    </target> 
</project> 

Файлы классов существуют в банке. Нужно ли мне делать что-то особенное в манифесте, или я пропущу что-то очевидное?

+0

NoClassDefFoundError означает, что JAR был там во время компиляции, но не во время выполнения. Вы уверены, что экспортируете JAR при компиляции своего проекта в APK? – Prmths

+0

Код работает корректно с помощью обычного проекта java, с которым я тестирую его, а банка находится в пути сборки, иначе eclipse будет жаловаться. –

+0

Заключительное намерение - получить его в андроид-апк ... но сейчас его просто нужно, чтобы банер работал правильно –

ответ

1

меня в контакте с авторами проекта. Они использовали eclipse для экспорта файла jar. Я заметил разницу размеров в размере jar между экспортированным jcl-файлом eclipse и файлом ant jar.

Не совсем уверен, что мне не хватало в моем скрипте для муравьев (даже попробовал **/*, но ни в коем случае не преобладал), однако ниже приведены детали, если у кого-то такая же проблема.

File -> Export -> Java/JAR File -> Check "Export all output folders for checked projects" 

Ниже приведен скриншот настроек, которые я использовал, чтобы получить банку, чтобы работать должным образом:

enter image description here

2

В проекте Android вы должны добавить свой файл jar в папку libs /, и ADT автоматически добавит его в путь к классам. Он не найдет флягу во время выполнения, если вы добавите ее в затмение старым способом с помощью пути сборки/добавления jar.

Просто возьмите ваши фляги файлы и поместить их в ЛИЭС/папку и ADT позаботится об остальном

+0

Это будет полезная информация, так как это будет мой следующий шаг, но моя проблема в сообщении с jar в проекте java не проект андроида. –

Смежные вопросы