3

すべてのユーザーがアクセスできるように、Javaアプリに永続ストレージを作成する必要があります。それで、私はWindowsでうまく機能することを研究しjava.util.prefs.Preferencesて使用し、Registerにデータを保存していました。systemRoot()しかし、私はLinux(Ubuntu)で実際にいくつかの問題に直面しています。他のアプリがすでに使用しているディレクトリ/usr/share/を使用したいと思います。systemRootそのため、実行時にデフォルトディレクトリを/ usr/shareにリダイレクトしようとしています。これが私のコードです:

System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder");
Preferences pref = Preferences.systemRoot().node("/usr/share/myfolder");

このサイトによると、.systemPrefsこのコマンドラインとそれを使用する暗黙のコマンドラインを実行する前にフォルダを作成する必要がsystemRoot()あります。

プログラムを実行すると、次の警告が表示されます。 java.util.prefs.FileSystemPreferences syncWorld WARNING Couldn't flush system prefs: java.util.prefs.BackingStoreException: /etc/.java/.systemPrefs/usr create failed.

だから私はそれが機能してSystem.setPropertyいないと思います。なにか提案を?前もって感謝します!

4

3 に答える 3

8

これは、*nixベースのサーバーで実行されているJavaの非常に厄介な問題です。

次のvmargsを使用して解決できました。

-Djava.util.prefs.userRoot=/opt/apache-tomcat-7.0.50/uprefs -Djava.util.prefs.systemRoot=/opt/apache-tomcat-7.0.50/sprefs

ただし、パス上の重要な注意点の1つsystemRootは、名前付きのサブフォルダーを作成すること.systemPrefsです。そうしないと、機能しません。

chown -Rまた、 Javaアプリケーションを実行しているユーザー(私の場合はtomcat)へのこれらのディレクトリを忘れないでください。

于 2014-02-24T21:09:49.697 に答える
7

Bimaleshは、代わりに

System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder")、あなたが言うこと

System.setProperty("-Djava.util.prefs.systemRoot", "/usr/share/myfolder")

ただし、設定しようとしているプロパティの名前はでありjava.util.prefs.systemRoot、ではない-Djava.util.prefs.systemRootため、次のようにする必要があります。

System.setProperty("java.util.prefs.systemRoot", "/usr/share/myfolder");

それでも問題が解決しない場合は、プログラムを起動するコマンドラインに「-D」スイッチを追加してみてください。それはどこに java -D...行くべきかです。コマンドはで始まります

java -Djava.util.prefs.systemRoot=/usr/share/myfolder

于 2013-07-23T16:33:16.970 に答える
5

Linuxシステムでは、システムルート設定ノードはの下にあり/etcます。これは歴史によるものであり、LinuxStandardBaseによって規制されている標準です。システム以外の環境設定は他の場所に移動できますが、システム環境設定を他の場所に移動させることはオペレーティングシステムの設計に違反します。

/ etcで開始できないため、Linuxシステムでは定義が無効になる可能性があります。どうやら、Javaコードの何かが、プリファレンスルートをリベースするという決定よりもオペレーティングシステムの仕様に依存しているようです。

通常、このようなファイルは、誰でも(またはほとんどのユーザーでさえ)書き込み可能ではないため、変更から保護されます。これは、ユーザーが設定にアクセスできるようにするには、下に移動する必要があることを意味します

 Preferences.userRoot()

これにより、ホームディレクトリのすぐ外にある隠しディレクトリに配置されます(変更権限があります)。

他のユーザーの設定をユーザーに読んでもらいたい場合(説明はあなたのように聞こえます)、必要なディレクトリを作成し、その/etc権限を変更するために、十分に承認されたユーザー(通常はroot)として実行されるインストーラーが必要になります書き込み可能な世界。

通常、/ etcの下のファイルは、ユーザーが他のユーザーの設定を変更する可能性があり、ユーザーの予想される環境のセキュリティ違反の一種と見なされるため、誰でも書き込み可能ではありません。たとえば、不注意な従業員(または不満を持っている従業員)は、他のすべてのユーザーの好みを一気に一掃する可能性があります。

于 2013-02-21T14:48:47.907 に答える