質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2377閲覧

「JAVA」マニュフェストファイルの書き方が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/04/21 02:03

編集2022/04/24 22:52

下記の画像はプロジェクトファイルです。lib/の中にopencv.jarファイルがあるのですがそのクラスパスを指定するにはどうすればいいのでしょうか?shellファイルに指定しているのですが下記のエラーが出ます。マニュフェストファイルにもクラスパスを設定して.shellファイルの実行時に文字-cpオプションを付けてファイルを指定しましたが同じエラーが出ます。java -Djava.library.path=lib -jar Conveter.jarコマンドを実行しましたが同じエラーが出ます。マニュフェストファイルがおかしいという指摘をもらっったのですがどこがおかしいのでしょうか?

わかっていること

javac で2つの.soと.jarファイルを指定しているのですがなぜかクラスがありませんと表示されます。

試したことコマンド

参考サイト:https://www.sejuku.net/blog/62990
参考サイト:https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javac.html
参考サイト:https://software.fujitsu.com/jp/manual/manualfiles/m150014/b1x10181/06z200/b0181-03-11-01-00.html

Exception in thread "main" java.lang.NoClassDefFoundError: org/opencv/core/CvType at Main.main(Main.java:15) Caused by: java.lang.ClassNotFoundException: org.opencv.core.CvType at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 1 more
Main.javaのの

java

1import java.io.File; 2import org.opencv.core.Core; 3import org.opencv.core.CvType; 4import org.opencv.core.Mat; 5 6public class Main { 7 public static void main(String[] args) { 8 // OpenCVが使えるためのおまじない 9 // 環境によってcan't load libraryのエラーが出る可能性がある 10 // <解決策> 11 // lib_pathに"opencv_java450.dll"を入れたフォルダの 12 // 絶対パスを調べて、lib_folder.getAbsolutePath()の代わりに書きます 13 // 例: String lib_path = "C:\\Users\\username\\workspace\\lib"; 14 15 Mat mat = Mat.eye(3,3,CvType.CV_8UC1); 16 // 作った行列の中身を確認します。 17 System.out.println("mat = " + mat.dump()); 18 } 19}
run.sh

shell

1#!/bin/bash 2 3clear 4javac -verbose -cp lib/opencv-455.jar:lib/libopencv_java455.so src/*.java -d bin # コンパイル 5if [ $? = "0" ] ; then 6 jar cvfm PDFConverter.jar manifest.mf -C bin ./ # .jarファイル生成 7 clear 8java -Djava.library.path=lib -jar Conveter.jar 9 else 10 echo 11 echo 12 13 echo " Compile Error" 14 15 echo 16 echo 17 fi
manifest.mf
Main-Class: Main Class-Path: lib/opencv-455.jar

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/04/21 02:15 編集

正しくパスを指定すればいいだけで、置き場所は自由にすればいいのでは? えっと、結局何も理解してないということで良いですか?
episteme

2022/04/21 02:13

実行時に -cp オプションでjarのパスを与えることができますが、そうしたくないってことですか?
退会済みユーザー

退会済みユーザー

2022/04/21 02:22 編集

質問ですが.shファイルに-cpオブションで指定しているのですがなぜエラーになるのでしょうか? java -cp lib/opencv-455.jar:lib/libopencv_java455.so -jar PDFConverter.jar # .jar実行 等を試したが同じでした。
m.ts10806

2022/04/21 02:37

理由:理解せず雑にやるから
int32_t

2022/04/21 02:44

マニュアルに書いてありますが、-jar と -cp は併用できません。manifest.mf の中で正しく設定する必要があります。
退会済みユーザー

退会済みユーザー

2022/04/21 02:45

なるほど。manifest.mdファイルではクラスパスを設定しましたが.soファイルはどうやって指定するのでしょうか?
m.ts10806

2022/04/22 04:02

そもそも今回あげているファイルそれぞれがなぜなんのために必要なのか理解してないと全く意味ないのでは? 本当に必要かどうかをどう判断しましたか?その根拠は?
退会済みユーザー

退会済みユーザー

2022/04/22 04:05

一様ファイル構成を上げておくべきだと思いました。
m.ts10806

2022/04/22 04:07

「いちよう」は今回使える単語ではないです。日本語勉強しましょう(この指摘は一度や二度ではないはずだが)。 本当に必要なものだけをあげないとゴミだらけになりますが、 そこが判断できないから、”いちおう”全部あげたと? 作りたいものを知っているのはあなただけです。赤の他人には判断できません。
guest

回答1

0

ベストアンサー

マニフェストの Class-Path フィールドは、空白区切りです。
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/jar/jar.html#classpath

*.so はクラスパスに設定するものではありません。java.library.pathLD_LIBRARY_PATH でウェブ検索してみてください。


sh

1 jar cvfm PDFConverter.jar manifest.mf -C bin ./ # .jarファイル生成 2 clear 3java -Djava.library.path=lib -jar Conveter.jar

jar コマンドで作っているのが PDFConverter.jar、java コマンドで実行しようとしているのが Converter.jar ってのはおかしいですよね。

投稿2022/04/21 02:51

編集2022/04/24 13:52
int32_t

総合スコア20672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/04/21 03:02

調べましたが`System.loadLibrary("lib/opencv_java455.so");`としてもエラー`java.lang.UnsatisfiedLinkError: Directory separator should not appear in library name: lib/opencv_java455.so`と表示されどうしたらいいかわかりません。
int32_t

2022/04/21 03:18

もっと調べてください。 java.library.path か LD_LIBRARY_PATH を設定するだけで、System.loadLibrary() は不要なはずです。
退会済みユーザー

退会済みユーザー

2022/04/21 03:24 編集

わかりました。以下のようにしたのですが上手く行きません。 `java -Djava.library.path=lib/opencv_java455.so -jar Conveter.jar # .jar実行`
int32_t

2022/04/21 03:33 編集

もっと調べて、java.library.path の公式のドキュメントを見つけるか、ちゃんと動くであろうコマンドライン例を注意深く真似してください。 java.library.path に *.so や *.dll を指定しているような例はなかったのではないですか?
int32_t

2022/04/21 04:20

> java.library.path に *.so や *.dll を指定しているような例はなかったのではないですか? > -Djava.library.path=C:\Sensor directory > ここで、C:\Sensor directory is the directory containing the visual_sciences.dllファイル。 これらを見ても、-Djava.library.path=lib/opencv_java455.so をどう変更すべきかわかりませんか。
退会済みユーザー

退会済みユーザー

2022/04/21 04:36 編集

なるほど以下のようにディレクトリを指定しましたがエラー出ます。`java -Djava.library.path=lib -jar Conveter.jar `また `センサーディレクトリは、visual_sciences.dllを含むディレクトリです。`のセンサーディレクトリとはどういう意味なのでしょうか?
int32_t

2022/04/21 05:01 編集

java.library.path はそれで間違ってないと思います。 > ディレクトリを指定しましたがエラー出ます。 どんなエラーですか。
退会済みユーザー

退会済みユーザー

2022/04/21 05:05

`Exception in thread "main" java.lang.NoClassDefFoundError: org/opencv/core/CvType at Main.main(Main.java:16) Caused by: java.lang.ClassNotFoundException: org.opencv.core.CvType at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 1 more `です。なぜでしょうか?
int32_t

2022/04/21 05:09

そのエラーだったら、マニフェストの Class-Path: がまだおかしいです。
退会済みユーザー

退会済みユーザー

2022/04/21 05:11

なるほど。`Class-Path: lib/opencv-455.jar lib/opencv_java455.so` としたのですが同じエラーでます。マニュフェストファイルはどうやって記述すればいいのでしょうか?
int32_t

2022/04/21 05:14

全角の空白で区切るのはやめましょう。lib/libopencv_java455.so は Class-Path に書く必要はありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問