10

他のJavaアプリケーションがそれらを見つけられるように、OSX上のデータベースJDBCドライブなどのさまざまなJARファイルをインストールしたいと思います。

どこに置くの?試し~/Library/Java/Extensionsましたが、うまくいきません。

詳細:

OS X 10.8.2

java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)

注:アプリケーションの初期化方法を制御することはできませんが、アプリケーションに独自のJavaディストリビューションが含まれておらず、OSがインストールされているバージョン(コマンドラインから入手できるバージョン)が起動すると想定しています。

また、CLASSPATHを設定していません。コマンドラインプログラムで使用できる環境変数は、OSXのGUIアプリで使用できる環境変数と同じではないことに注意してください。

開発マシンでこれを試していること、およびこのアプローチがJavaアプリケーションをデプロイする方法ではないことを指定する必要があります。

4

4 に答える 4

15

これをしないでください。その理由は次のとおりです。他のアプリは壊れます。これらのJARファイルはすべてのJavaアプリに読み込まれるためです。

詳細:Mac用のJavaアプリを販売しています。これは、JARファイルの特定の最新バージョン(JFreeChart用)を持っていることに依存しています。同じJARファイルの古いバージョンが適切なExtensionsフォルダーにある場合があります。これは私のアプリを壊します。

しかし、あなたが本当にこれをしたいのなら:Appleのドキュメントによると:

拡張ライブラリ

他のプラットフォームのJavaソフトウェアは、多くの場合、JDKインストール内の$ JAVA_HOME / lib / extディレクトリを使用して、サポートクラスまたはjarファイルを格納します。Java for MacOSXにはlib/extディレクトリも含まれていますが、開発者は上記と同じ理由で直接変更しないでください。/ Library / Java / Extensionsディレクトリは、システムクラスパスに配置する必要のある追加のjarファイルまたはJNIライブラリに使用できます。アクセスをより制御するために、〜/ Library / Java / Extensionsディレクトリを使用して、サポートライブラリのユーザーレベルのインストールを行うことができます。これらのディレクトリのいずれかに配置されたアイテムは、アプリケーションのクラスパスで名前を付ける必要はなく、それぞれのスコープ(使用されるディレクトリに応じて、システムレベルまたはユーザーレベル)で実行されるすべてのアプリケーションで使用できます。

于 2012-10-11T14:52:14.350 に答える
2

それらは、アプリケーションのクラスパスに含まれている必要があります。コマンドラインから実行する場合は、たとえば「java -cp〜/ Library / Java / Extensions/foo.jarBar」を使用します。

一方、tomcatなどのアプリケーションサーバーを使用する場合は、アプリケーションの戦争中にjarをパッケージ化して、サーバーの共有ライブラリフォルダーに配置することができます。

于 2012-10-11T14:40:44.057 に答える
1

Steve のコメントに賛成し、依存関係の管理にMavenまたはIvyを使用することをさらに提案します。

ライブラリ管理はプロジェクトごとです。更新と相互依存関係の管理がはるかに簡単になります。Maven (Ivy については知りません) は、どのライブラリが古くなっているか、どのライブラリが競合しているかなどを教えてくれます。プロジェクトごとに、変更によって他のプロジェクトが壊れるかどうかを心配することなく、必要なバージョンを正確に指定できます。

于 2012-10-11T15:14:11.293 に答える
-3

私の貢献だけでOKです...しかし、コマンドラインで小さなデータベースプログラムを実行したかったのですが、そうするにはクラスパスにmysql-connector-java-5.1.29-bin.jarが必要でした。私はそれを理解しようとしてしばらく時間を費やし、解決策を見つけました。jar ファイルをLibrary/Java/Extensionsフォルダーにドロップし、マシンを再起動しました。上記は、プログラムを「実行」しているときにクラスパスを含める必要があることを示しています(java -cp ~/Library/Java/Extensions/foo.jar Bar)が、私にとってはうまくいきませんでした。代わりに、コンパイル時にコマンドを発行してから、プログラムを実行しました。

$ javac -cp /Library/Java/Extensions/mysql-connector-java-5.1.29-bin.jar FirstExample.java  
$ java FirstExample

そして、これは私が得たものです...データベースからのクエリデータ:

データベースに接続しています...
ステートメントを作成しています...
ID: 1、役職: 営業担当者、名: Nancy、最後: Davolio
ID: 2、役職: 副社長、営業、名: Andrew、最後: Fuller ID: 3、役職: 営業担当、先頭: ジャネット、末尾: レバリング
ID: 4、役職: 営業担当、先頭: マーガレット、末尾: ピーコック
ID: 5、役職: 営業部長、先頭: スティーブン、末尾: ブキャナン
ID: 6、役職: 営業代表者、名:Michael、姓:Suyama
ID:7、役職:営業担当者、名:Robert、姓:King
ID:8、役職:Inside Sales Coordinator、名:Laura、姓:Callahan
ID:9、役職:営業担当者、最初:アン、最後:ドズワース

さよなら!

お役に立てれば

于 2014-02-21T17:42:38.657 に答える