我目前正在使用Apache POI和docx4j构建一个小型Java应用程序来保护word文档。在我的IDE(Netbeans 8.1)中构建和运行Maven项目时执行。
从命令行启动课程时,java.lang.NoClassDefFoundError
会引发org/docx4j/openpackaging/exceptions/Docx4JException
$ java -jar DocxProtect-1.0-SNAPSHOT.jar错误:JNI错误有 发生了,请检查您的安装,然后再试一次Exception in 线程"主要" java.lang.NoClassDefFoundError: org / docx4j / openpackaging / exceptions / Docx4JException at java.lang.Class.getDeclaredMethods0(Native Method)at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)at at java.lang.Class.privateGetMethodRecursive(Class.java:3048)at java.lang.Class.getMethod0(Class.java:3018)at java.lang.Class.getMethod(Class.java:1784)at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 在 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 引起:java.lang.ClassNotFoundException: org.docx4j.openpackaging.exceptions.Docx4JException at java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)at at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 7更多
我使用包含所有依赖项的maven构建一个fat-jar。从IDE运行项目时,它使用以下命令;
/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java -classpath /Users/petervannes/NetBeansProjects/DocxProtect/target/classes:/Users/petervannes/.m2/repository/org/apache/poi/poi/3.14/poi-3.14.jar:/Users/petervannes/.m2/repository /commons-codec/commons-codec/1.10/commons-codec-1.10.jar:/Users/petervannes/.m2/repository/org/docx4j/docx4j/3.2.2/docx4j-3.2.2.jar:/Users/ petervannes / .m2目录/库/组织/ plutext / JAXB-svg11 / 1.0.2 / JAXB-svg11-1.0.2.jar:/Users/petervannes/.m2/repository/org/plutext/jaxb-xslfo/1.0.1 /jaxb-xslfo-1.0.1.jar:/Users/petervannes/.m2/repository/org/plutext/jaxb-xmldsig-core/1.0.0/jaxb-xmldsig-core-1.0.0.jar:/Users/ petervannes / .m2目录/库/网络/ engio / mbassador / 1.1.10 / mbassador-1.1.10.jar:/Users/petervannes/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api -1.7.5.jar:/Users/petervannes/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar:/Users/petervannes/.m2 /repository/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar:/Users/petervannes/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar :/用户/ peterva nnes / .m2目录/库/公地琅/公地琅/ 2.4 /公地琅2.4.jar:/Users/petervannes/.m2/repository/commons-io/commons-io/1.3.1/commons-io -1.3.1.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/xmlgraphics-commons/1.5/xmlgraphics-commons-1.5.jar:/Users/petervannes/.m2/repository/org/apache /xmlgraphics/fop/1.1/fop-1.1.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-svg-dom/1.7/batik-svg-dom-1.7.jar:/Users/ petervannes / .m2目录/库/组织/阿帕奇/ xmlgraphics /蜡染阿尼姆/ 1.7 /蜡染动画-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-css/1.7/batik -CSS-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-dom/1.7/batik-dom-1.7.jar:/Users/petervannes/.m2/repository/org/apache /xmlgraphics/batik-parser/1.7/batik-parser-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-util/1.7/batik-util-1.7.jar:/Users/ petervannes / .m2目录/库/组织/阿帕奇/ xmlgraphics /蜡染桥/ 1.7 /蜡染桥-1.7.jar:/用户/ peterv阿纳/ .m2目录/库/组织/阿帕奇/ xmlgraphics /蜡染脚本/ 1.7 /蜡染脚本1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-js/1.7/batik -js-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-xml/1.7/batik-xml-1.7.jar:/Users/petervannes/.m2/repository/org/apache /xmlgraphics/batik-awt-util/1.7/batik-awt-util-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-gvt/1.7/batik-gvt-1.7.jar :/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-transcoder/1.7/batik-transcoder-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-svggen /1.7/batik-svggen-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-extension/1.7/batik-extension-1.7.jar:/Users/petervannes/.m2/repository /org/apache/xmlgraphics/batik-ext/1.7/batik-ext-1.7.jar:/Users/petervannes/.m2/repository/org/apache/avalon/framework/avalon-framework-api/4.3.1/avalon -framework-API-4.3.1.jar:/Users/petervannes/.m2/repository/org/apache/a VALON /框架/ Avalon的框架-IMPL / 4.3.1 / Avalon的框架-IMPL-4.3.1.jar:/Users/petervannes/.m2/repository/xalan/xalan/2.7.1/xalan-2.7.1。罐子:/Users/petervannes/.m2/repository/xalan/serializer/2.7.1/serializer-2.7.1.jar:/Users/petervannes/.m2/repository/net/arnx/wmf2svg/0.9.0/wmf2svg- 0.9.0.jar:/Users/petervannes/.m2/repository/org/apache/poi/poi-scratchpad/3.8/poi-scratchpad-3.8.jar:/Users/petervannes/.m2/repository/org/antlr/ ANTLR运行时/ 3.3 / ANTLR运行时-3.3.jar:/Users/petervannes/.m2/repository/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:/Users/petervannes/.m2/库/ ANTLR / ANTLR / 2.7.7 / ANTLR-2.7.7.jar:/Users/petervannes/.m2/repository/com/google/guava/guava/17.0/guava-17.0.jar com.reddipped.docxprotect.DocxProtect
因此,不执行fat jar而是执行已编译的类,并使用项目中lib文件夹中的类。
我在从Netbeans执行时比较了fat-jar和classpath的MANIFEST中的所有类。两者都是一样的。令我惊讶的是,对于包含在jar中的类,抛出了NoClassDefFoundError。
任何想法,提示,提示如何解决这个问题? 干杯, 彼得
==更新1 ==
MANIFEST.MF中类路径的格式似乎很奇怪。 classtpath的每一个新行似乎都有一个缩进字符,它可以控制罐子的路径。
根据JAR File Specification,jar文件之间应该有空格,而不是文件名。
Class-Path:此属性的值指定的相对URL 此应用程序或扩展所需的扩展或库。 URL由一个或多个空格分隔。申请或延期 类加载器使用此属性的值来构造它 内部搜索路径。
清单 - 版本:1.0 内置:petervannes 类路径:lib / poi-3.14.jar lib / commons-codec-1.10.jar lib / docx4j-3.2 .2.jar lib / jaxb-svg11-1.0.2.jar lib / jaxb-xslfo-1.0.1.jar lib / jaxb-xml dsig-core-1.0.0.jar lib / mbassador-1.1.10.jar lib / slf4j-api-1.7.5.jar lib / jcl-over-slf4j-1.7.5.jar lib / slf4j-log4j12-1.7.5.jar lib / log4j-1。 2.17.jar lib / commons-lang-2.4.jar lib / commons-io-1.3.1.jar lib / xmlgra phics-commons-1.5.jar lib / fop-1.1.jar lib / batik-svg-dom-1.7.jar lib / b atik-anim-1.7.jar lib / batik-css-1.7.jar lib / batik-dom-1.7.jar lib / bat ik-parser-1.7.jar lib / batik-util-1.7.jar lib / batik-bridge-1.7.jar lib /batik-script-1.7.jar lib / batik-js-1.7.jar lib / batik-xml-1.7.jar lib / batik-awt-util-1.7.jar lib / batik-gvt-1.7.jar lib / batik-transcoder-1.7 .jar lib / batik-svggen-1.7.jar lib / batik-extension-1.7.jar lib / batik-e xt-1.7.jar lib / avalon-framework-api-4.3.1.jar lib / avalon-framework-im pl-4.3.1.jar lib / xalan-2.7.1.jar lib / serializer-2.7.1.jar lib / wmf2svg -0.9.0.jar lib / poi-scratchpad-3.8.jar lib / antlr-runtime-3.3.jar lib / s tringtemplate-3.2.1.jar lib / antlr-2.7.7.jar lib / guava-17.0.jar 创建者:Apache Maven 3.0.5 Build-Jdk:1.8.0_60
答案 0 :(得分:1)
解决了它,最初用maven-jar-plugin开始构建jar。用maven-shade-plugin 2.4.3替换这个插件后,jar运行没有问题。可能有6个重叠的课程导致了这个问题。