Xerces-for-Android NoClassDefFoundError when using Jar instead of source code

I work with Xerces-for-Android: https://code.google.com/p/xerces-for-android/

If I copy the source code into a simple test project (a java project, not an android project), I can run the xml validation tests without any problems.

When I make a jar from the source files, use it in my class path instead of the source, I get a NoClassDefFoundError , despite the fact that the files are present in the jar.

The following is the error message:

 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 

Below is my ant script to make a jar:

 <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> 

Class files exist in the bank. Do I need to do anything special in the manifest, or am I missing something obvious?

+1
source share
2 answers

I contacted the authors of the project. They used eclipse to export the jar file. I noticed a jar size difference between the exported jcl eclipse file and the ant jar file.

Not sure if I was absent in my ant script (even tried **/* but did not take precedence), however the details are below if someone has the same problem.

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

Below is a screenshot of the settings I used to get the jar to work correctly:

enter image description here

+1
source

In an Android project, you must add your jar file to the libs / folder, and ADT will automatically add it to the classpath. It will not find the jar at runtime if you add it to the eclipse in the old way using the build / add jar path.

Just take your jar files and put them in the libs / folder and ADT will take care of the rest

+2
source

Source: https://habr.com/ru/post/1285849/


All Articles