0

Java プロジェクトを実行可能 jar にエクスポートするだけです。私はどういうわけか私のプロジェクトをDB(hibernate.cfg.xml)、config.properties、およびlog4j.propertiesから値にアクセスするように機能させ、将来のために編集可能にしました...

hibernate.cf.xml、config.properties、および log4j.properties を jar の外側に配置し、それらを別のディレクトリのどこかに配置したいと考えています。

私はこれを探していて、このようになりました:

  1. 展開システムのどこかに /path/to/mydir ディレクトリを作成しました。
  2. log4j.properties と META-INF、hibernate.properties と hibernate.cfg.xml を mydir に移動しました。
  3. このコマンドを使用します

    これは単なる例です: java -cp Myjar.jar:/path/to/mydir MyMainClass

    私が書くコマンドは次のようなものです: java -cp coreservice.jar:/mon/properties CoreServiceController.java

そのようにしてみましたが、このエラーが発生しました

Error: Could not find or load main class

誰でも私がそれを修正するのを手伝ってくれるか、より良い方法を与えることができます〜

====================(編集)========================== ========================

ああ、私のjarファイルからMETA-INFフォルダーを削除(カット)して、構成フォルダー(/ mon / properties)に貼り付けます

そして、このコマンドをもう一度試してくださいjava -cp coreservice.jar;mon/properties/ id.co.bn i.coreservice.controller.CoreServiceController..... annnnddddddd this work ;))

Apostolos、Antoniossss、Yasa、そしてノーネームに感謝 :)

4

3 に答える 3

0

あなたはまだ同じ問題を抱えているので、これはJavaランタイムの非常に基本的なものであるため、非常に間違ったことをしていると言わざるを得ません。原則:

  1. ソースファイル(* .java)ではなく、実行するJavaの完全修飾クラス名を提供する必要があるため、呼び出しはproper.package.CoreServiceController
  2. CoreServiceController デフォルトのページに入れることはできません(パッケージ名が指定されていません)。service.coreそしてそこに置きCoreServiceControllerます。ポイント1については、あなたの電話はjava -cp coreservice.jar:/mon/properties service.core.CoreServiceControllerそれ以上のものではありません。
  3. クラスパスに間違ったエントリを指定すると、Java は厄介な動作をします。ファイル myUberProgram.jar が存在しないなど。そのようなエントリは無視して続行します。CPを使用したLinuxでも同様の問題がありました-jarファイルのスペルミスと「ここで何が起こっているのですか?!なぜ実行されていないのですか」-あなたと同じ問題-no class found
  4. CoreServiceController.classjar ファイルにファイルがあるかどうかを 101% 確認してください。パッケージに何か問題があり、jar にそのようなファイルがない可能性があります。
  5. 最後に、以前のすべての制限が満たされ、何も機能しない場合は、最後のチャンスとして、作業ディレクトリを jar ファイルがある場所に移動し (単にコマンド ラインからそこに移動します)、外部 cp を指定せずにアプリケーションを実行してみてください。jar があるディレクトリから:
    1. 呼び出しjava -cp Myjar.jar proper.package.CoreServiceController- 動作するはずですが、次の呼び出しは 100% チェックされます
    2. 呼び出しjava -cp ./Myjar.jar proper.package.CoreServiceController- リモート Linux サーバー上のすべてのアプリケーションは、そのように bash スクリプトから起動され、常に機能します。

これが役に立たなかった場合は、呪われているか何か xD であるため、あなたのマシンを海に捨てると言わなければなりません.

練習のために、単純な HelloWorld jar をビルドし、コマンド ラインから起動してみます (ただし、実行可能な jar ではないため、クラスパスを指定する必要があります)。たぶん、このようにして、自分が何を間違えたかがわかります。今日の私の考えは終わりました、こんにちは!

PS。@splatter_fadli私はあなたの質問を編集することを許可しました.今のところそれは見当違いです.H構成に問題はありません.クラスパスに複数のエントリが提供されているときにアプリを実行するだけです. たぶん、それは受け入れられるでしょう。-ああああ、それは行われます。

最後の立場の編集:この質問 によると- QAはクラスパスエントリをコンマに入れました。やってみて。いなくなった場合Class not found、私たちはそこにいる途中です。-cp "coreservice.jar:/mon/properties"

于 2013-10-22T06:23:05.023 に答える
0

使用しないでください

java -cp coreservice.jar:/mon/properties CoreServiceController.java

ソースのJavaファイルではなく、そこにクラスファイルを置いて再試行する必要があります

これがパッケージ内にある場合は、com.test とします。次に、com/test の親ディレクトリに入力します。

java -cp coreservice.jar:. com.test.CoreServiceController.

これはうまくいくはずです

(編集)特定の場所からhibernate.cfg.xmlファイルをロードするには、HibernateUtilクラス内でこのメソッドを試してください:

public static void setConnectionProperties() {
    URL configFileURL = null;

    try {
        configFileURL = URL_OF_YOUR_CFG_XML_FILE;
        configuration = (new Configuration()).configure(configFileURL);
        sessionFactory = configuration.buildSessionFactory();

    } catch (HibernateException e) {
        e.printStackTrace(); 
        System.out.println("Error while initializing hibernate: " + e.getMessage());
    }

}
于 2013-10-21T10:22:18.567 に答える
0

私があなたの質問を正しく理解していれば:

sessionFactory を構成するときに、そのように書くことができます

new Configuration()
            .configure("/path/to/your/files/hibernate.cfg.xml")
            .buildSessionFactory();

完全な例

于 2013-10-21T11:20:32.870 に答える