IVY / JAR ERROR - java.lang.NoClassDefFoundError:org / apache / poi / ss / usermodel / Row

时间:2015-12-22 19:57:21

标签: java apache jar apache-poi ivy

嗨,我知道这个问题已被多次询问,但我已经尝试了所有这些建议!

我的代码在Eclipse中运行得非常好但是我想在Unix中构建jar并运行命令行。

在我的依赖ivy.xml中,我列出了我的依赖项:

    <dependencies>
              <dependency org="org.apache.xmlbeans" name="xmlbeans" rev="2.6.0"/>
              <dependency org="org.apache.poi" name="poi" rev="3.11" conf="default" /> 
              <dependency org="org.apache.poi" name="poi-ooxml" rev="3.11" conf="default" />
              <dependency org="org.apache.poi" name="poi-ooxml-schemas" rev="3.11" conf="default" />
    </dependencies>

但是当我执行我的jar时,我收到以下错误:

线程中的异常&#34; main&#34; java.lang.NoClassDefFoundError:org / apache / poi / ss / usermodel / Row

我知道你需要为ss提供poi-ooxml,但是,我在我的常春藤依赖项中引用了它。

为什么我仍然会收到此错误?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我猜你的jar在它的清单中缺少一个类路径。请尝试以下方法:

<target name="build" depends="test" description="Create executable jar archive">
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact]-[revision](-[classifier]).[ext]"/>

    <manifestclasspath property="jar.classpath" jarfile="${jar.file}">
        <classpath>
            <fileset dir="${dist.dir}/lib" includes="*.jar"/>
        </classpath>
    </manifestclasspath>

    <jar destfile="${jar.file}" basedir="${build.dir}/classes">
        <manifest>
            <attribute name="Main-Class" value="${jar.main.class}" />
            <attribute name="Class-Path" value="${jar.classpath}" />
        </manifest>
    </jar>
</target>

注意:

  • 常春藤检索任务用于将依赖项放在正在构建的jar旁边的分发目录中
  • manifestclasspath 任务是为可能很长的依赖项列表创建正确相对路径的有用技巧