2016-07-04 14 views
0

現在、Apache POIとdocx4jを使用して小さな文書を作成しています。私のIDE(Netbeans 8.1)でMavenプロジェクトをビルドして実行すると、実行されます。 NoClassDefFoundError:IDEの外で実行するとorg/docx4j/openpackaging/exceptions/Docx4JExceptionが発生する

コマンドライン org/docx4j/openpackaging/exceptions/Docx4JExceptionため java.lang.NoClassDefFoundErrorからクラスを開始

$ java -jar DocxProtect-1.0-SNAPSHOT.jar Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: org/docx4j/openpackaging/exceptions/Docx4JException at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 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) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) Caused by: 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 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more

私はすべての依存関係が含まれてMavenを使用して脂肪の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/repository/org/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/repository/net/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:/Users/petervannes/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-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/repository/org/apache/xmlgraphics/batik-anim/1.7/batik-anim-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/repository/org/apache/xmlgraphics/batik-bridge/1.7/batik-bridge-1.7.jar:/Users/petervannes/.m2/repository/org/apache/xmlgraphics/batik-script/1.7/batik-script-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/avalon/framework/avalon-framework-impl/4.3.1/avalon-framework-impl-4.3.1.jar:/Users/petervannes/.m2/repository/xalan/xalan/2.7.1/xalan-2.7.1.jar:/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-runtime/3.3/antlr-runtime-3.3.jar:/Users/petervannes/.m2/repository/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:/Users/petervannes/.m2/repository/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

は、だからではなく、脂肪のjarファイルを実行するとあるのコンパイル済みの分類を実行し、プロジェクト内のlibフォルダからのクラスを使用しています。

Netbeansから実行するときにfat-jarのMANIFESTとクラスパス内のすべてのクラスを比較しました。どちらも同じです。驚くべきことは、含まれるjarのクラスに対してNoClassDefFoundErrorがスローされるということです。

どのようなアイデア、ヒント、ヒントこれを解決するには? MANIFEST.MFで 乾杯、 ピーター

==アップデート1 ==

クラスパスのフォーマットは奇数であるように思われます。 classtpathのそれぞれの新しい行には、ジャーのパスを制動するインデント文字があるようです。

JAR File Specificationによれば、jarファイルの間にはスペースが入りますが、ファイル名にはスペースが入りません。

Class-Path: The value of this attribute specifies the relative URLs of the extensions or libraries that this application or extension needs. URLs are separated by one or more spaces. The application or extension class loader uses the value of this attribute to construct its internal search path.

マニフェスト・バージョン:1.0 内蔵することにより:petervannes のClass-Path:LIB/POI-3.14.jar libに/コモンズ・コーデック・1.10.jar libに/ docx4j-3.2 LIB .2.jar /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 lib/serializer-2.7.1.jar lib/wmf2svg - lib/0.9.0.jar lib/poi-scratchpad-3.8.jar lib/antlr-ru ntime-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

+1

アーカイブマネージャを使用してjarファイルを開いて、ライブラリを内部で探しましたか? – compuhosny

+0

うん、パッケージ 'org/docx4j/openpackaging/exceptions/Docx4JException'はjar' docx4j-3.2.2.jar'にあります。 docz4j-3.2.2.jarは、fat-jarのlibディレクトリにあります。私はMANIFEST.MFでいくつかの異常を見ます。 (更新を参照) – pcvnes

答えて

1

最初はmaven-jar-pluginで開始してjarファイルを作成しました。このプラグインをmaven-shade-plugin 2.4.3に置き換えた後、jarファイルは問題なく実行されました。おそらく6つのオーバーラップするクラスが問題を引き起こしていました。