ClassNotFoundException:org.docx4j.openpackaging.exceptions.Docx4JException

ClassNotFoundException: org.docx4j.openpackaging.exceptions.Docx4JException

所以我们再来一次。我的脑袋在我的电脑上敲了几个小时,我不知道该怎么做。在我的本地 PC 上,我 运行 来自 Intellij Idea 的 java 代码。有用。现在我必须创建 jar 文件以使其能够在某些远程服务器上使用。我在项目设置中添加了我的程序需要的所有库、jar(在 Artifacts 部分添加了库)。但它在远程服务器上 运行ning 不起作用。我的程序需要导入什么:

import org.docx4j.dml.CTBlip;
import org.docx4j.jaxb.XPathBinderAssociationIsPartialException;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.relationships.RelationshipsPart;
import org.docx4j.relationships.Relationship;

import javax.xml.bind.JAXBException;
import java.io.File;
import java.util.List;

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/docx4j/openpackaging/exceptions/Docx4JException
Caused by: java.lang.ClassNotFoundException: org.docx4j.openpackaging.exceptions.Docx4JException
        at java.net.URLClassLoader.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: Main. Program will exit.

那么是创建 jar 的问题吗?我错过了什么?

org.docx4j.openpackaging.exceptions.Docx4JException 在 docx4j.jar 文件中,因此请确保它(以及所有 docx4j 的依赖项)在您的类路径中。

当类加载器未加载原始 docx4j jar 时,我遇到了类似的问题。

我试过这些:

  • docx4j-3.1.0.jar
  • docx4j-3.2.1.jar

出于某种原因,Midnight Commander 无法从第一次尝试中打开它们(通过按回车键)并报告 "Inconsistent extfs archive"。问题已通过 jar recreation

解决
# run in a directory containing just single original docx4j jar file
unzip docx4j-3.2.1.jar
rm -r docx4j-3.2.1.jar
jar cf docx4j-3.2.1.jar *

现在新的 jar 在 MC 中打开没有问题(至少在我的情况下)并且它的 类 被加载并且 java.lang.NoClassDefFoundError 不再被抛出。

更新

JIC,我刚刚检查了JDK我用的罐子属于哪个。

它是开放的JDK 64 位 1.7。0_79,Linux Mint 17。