2017-03-17 52 views
3

Mavenを使用して、プロジェクトの実行可能なJARファイルをすべての依存関係(別々のフォルダにコピーされています)で生成しています。jarはWindows上で動作しますが、Ubuntuでは動作しません

http://pastebin.com/NfhiVZhM私は、JDK 1.8でWindows 10マシンでMVNパッケージを実行している

(リンクはこちらコピー巨大なXMLを避けるためのpom.xmlにします)。 mvnを実行した後、cmdを開いてjavaを実行すると、-jar instagramBot.jarはすべて正常に動作します。

Mavenが結果(ターゲット)を生成するフォルダは、Dropboxによってoracle-jdk-1.8を持つUbuntuマシンと同期されます。

しかし、Ubuntuの上にシェル開いている場合と結果は同じコマンドを実行して行く:

[email protected]:~/svn/instagramBot/target$ java -jar instagramBot.jar Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: com/tomatechines/instagramapi/services/exception/InstagramException

これは、JVMのスタックトレースとプログラムがクラッシュを印刷された後。

com/tomatechines/instagramapi/services/exception/InstagramExceptionを含むjarがクラスパスに存在し、Ubuntuマシンのライブラリフォルダにも存在することを既に確認しました。しかし、エラーは起こり続ける。

また、ジャーの名前に表示される可能性のある特殊文字はチェックしましたが、何も見つかりませんでした。

スタックトレースがエラーに任意のfutherの説明をしていません。

Error: A JNI error has occurred, please check your installation and try again

誰もがあるかもしれないか他に何私は、問題を識別するためにチェックする必要がありますどのような任意のアイデアを持っていますか?

============== UPDATE ============私が使用

すべてのライブラリはjarファイルです。 DLLやOS固有のファイルはありません。

Eclipseで実行可能なjarファイルを書き出し、すべてのライブラリを1つのjar(58MB)にパッケージングしようとしましたが、通常はUbuntu上で動作します...私はこのコードを使用しないので私が使用しているライブラリやライブラリはほとんど変更されていませんが、1つのjarファイルにすべてをパックすると、小さなバグを修正するたびに、jarファイルをエクスポートするためのEclipseプロセスはかなり便利ではないにもかかわらず、58MBを再同期する必要があります。

+2

JNIはJava Native Interfaceです。これはJavaがネイティブライブラリCやC++のようなOSのために特別に書かれています)。実行しようとしているプログラムにネイティブライブラリが必要ですか?あなたは適切な場所にLinux用の適切なlibを持っていますか? (注:Windows DLLはLinuxでは動作しません.Linux固有のバージョンのライブラリが必要です)。 – Jesper

+0

NO!私が使用するライブラリはすべてjarです。今では、Eclipseで実行可能なjarファイルをエクスポートしようとしましたが、すべてのライブラリを単一のjar(58MB)に梱包しています。 –

+0

エラーが表示されたらインストールを確認します。それはjvm自体を参照している可能性があります – efekctive

答えて

1

答えはここに

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent 

あなたは私が問題を解決し、実際に私は理由を理解できなかったthis link

<properties> 
    ... 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    ... 
</properties> 
+0

この情報をpomに追加すると警告が止まりますが、私の問題は解決しません。エラーが出てきて、WindowsとUbuntu –

+0

実際には、プロジェクトがWindowsで動作しなくなったというあなたの提案ではありませんでした...私には別の「修正」メイプが提案され、私はチェックしませんでした...今問題は解決されました。ありがとうございました –

1

を参照して、UTF8としてあなたポンポンのソースエンコーディングを宣言することができますですそれは解決しましたが、私は理解しようと疲れています...

私はpomとmvnパッケージを実行する場合http://pastebin.com/NfhiVZhM私は2つの警告を得る

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for InstagramBot:InstagramBot:jar:2.0.1 
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 26, column 12 
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. 
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. 

情報出力の// //たくさん

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 

そして私は、Windows上で正常に動作する実行可能なjarファイルを取得します。 このjarファイルのマニフェストは、次のようになります。最初の警告が大きすぎるとして

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: rafael 
Class-Path: dependency/utils-1.4.3.jar dependency/commons-io-2.5.jar d 
ependency/slf4j-api-1.7.22.jar dependency/slf4j-log4j12-1.7.22.jar de 
pendency/log4j-1.2.17.jar dependency/hibernate-core-5.1.0.Final.jar d 
ependency/jboss-logging-3.3.0.Final.jar dependency/hibernate-jpa-2.1- 
api-1.0.0.Final.jar dependency/javassist-3.20.0-GA.jar dependency/ant 

、私は(ラインが対処ちょうど私のmaven-jarファイル・プラグインに次の行をaddigことで、単にペーストビンに掲示した後、それを解決しました)警告上の

<version>3.0.0</version> 

にMavenの変化によって作成されたこのマニフェストをやってシンプル:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: rafael 
Class-Path: dependency/com/tomatechines/utils/1.4.3/utils-1.4.3.jar de 
pendency/commons-io/commons-io/2.5/commons-io-2.5.jar dependency/org/ 
slf4j/slf4j-api/1.7.22/slf4j-api-1.7.22.jar dependency/org/slf4j/slf4 
j-log4j12/1.7.22/slf4j-log4j12-1.7.22.jar dependency/log4j/log4j/1.2. 
17/log4j-1.2.17.jar dependency/org/hibernate/hibernate-core/5.1.0.Fin 

それは、Liのリポジトリ構造を探すためにしようとしますbsは私のプロジェクトでは、しかし、コピー依存関係のプラグインは、ただ一つのフォルダ(依存関係)を作成し、すべてのjarファイルを内部に置きます。したがって、マニフェストは決して存在しないフォルダ構造を探し、このjarはWindowsやubuntuで動作しません。

ソリューションは<version>を削除し、@asettoufによって示唆されているように

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

を追加しました。今では大きな警告が返ってきましたが、jarファイルは両方のプラットフォームでうまく動作しています...そして、実際に動作している間、その警告は気にしません。

関連する問題