Xerces的换安卓的NoClassDefFoundError使用瓶子时相反的源代码(Xerces-

2019-10-18 15:54发布

我使用Xerces换Android平台: https://code.google.com/p/xerces-for-android/

如果我的源代码复制到一个简单的测试项目(Java项目,而不是Android项目),我没有任何问题,运行我的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

下面是我的ant脚本,使罐:

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

类文件在罐子里存在。 我需要做什么特别的表现,还是我失去了一些东西明显?

Answer 1:

在Android项目你有你的jar文件添加到库/文件夹,ADT将会被自动将其添加到类路径中。 它不会在执行期间的罐子,如果你在Eclipse中构建路径添加旧的方式/加罐子。

只要把你的jar文件,并把它们放到库/文件夹,ADT将剩下的工作



Answer 2:

我在该项目的作者取得了联系。 他们使用了Eclipse导出的jar文件。 我注意到在Eclipse导出的jar文件和我的蚂蚁jar文件之间的罐子尺寸大小的区别。

真的不知道我在我的ant脚本缺失(甚至试图**/* ,但没有为准),但是下面是万一有人有同样的问题的细节。

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

下面是我用来获取罐子正常工作设置的截图:



文章来源: Xerces-for-Android NoClassDefFoundError When Using Jar Instead of Source Code
标签: java android ant