次のコマンドを使用して実行するプロジェクトがあります:java -cp ".\target\classes;lib\*;" org.testng.TestNG ParallelTestXML.xml を実行すると、正常に実行されます。このプロジェクトを SSH 経由でアップロードし、リモート コンピューター (AWS ec2 インスタンス) で実行したいのですが、「エラー: メイン クラス org.testng.TestNG が見つからないか、ロードできませんでした。」というメッセージが表示されます。同じプロジェクト フォルダーでまったく同じコマンドを使用しているにもかかわらず、失敗します。
すべての依存関係が lib フォルダー内のプロジェクト フォルダー内に含まれている場合に、testNG が見つからない場合、これは何が原因で発生する可能性がありますか。プロジェクトをローカルで問題なく実行できます。
この java -cp "./target/classes/;lib/*" のような testNG 部分を無視して Java クラスだけを実行しようとすると、同じエラーが発生します。 RealPackage.Controller を実行すると、次のエラーが発生します: エラー: メイン クラス RealPackage.Controller が見つからないか、ロードできませんでした。
これらのどちらの場合も、ローカルでテストしたところ、正常に動作しました。 SSH 経由でアップロードしたプロジェクトは、このプロジェクト全体です。同一であるはずなので、これらのコマンドが機能しないことに本当に混乱しています。
両方のプロジェクトの場所が同じ構造であることがわかります。左は私のローカル PC、右は AWS サーバー上にあるものです。
編集: しばらくして、Linux マシンで Windows sytnax を使用しようとしていたことが原因だと気づきました。そこで、Linux amchine 用にこれを思いつきました: java -cp .:/target/classes/:lib/* org.testng.TestNG ParallelTestXML.xml ですが、/ にあるクラスが見つかりません。ターゲット/クラスの場所。
「このプロジェクトは SSH 経由でアップロードしました」 .java (ソース) ファイルまたは .class (コンパイル済み) ファイル (あるいはその両方) をアップロードしましたか?とにかく、サーバー上に .class ファイルがあるかどうかを確認してください。
– マルコ・ルシディ
2020 年 9 月 4 日 16:52
はい、そうです。ソースファイルとコンパイル済みファイルの両方が存在します
– マスタークール
2020 年 9 月 4 日 16:53
「ルート」からコマンドを実行していますか?プロジェクトの? ls を実行すると、ターゲットが表示されますか?フォルダ (および lib/)?
– マルコ・ルシディ
2020 年 9 月 4 日 17:09
クラスパスは 2 つの相対パスで構成されているため、コマンドを実行するときの現在のディレクトリに完全に依存します。想像してみてください「リモート コンピュータで実行する」ときは、あなたが思っているものとは異なります。おそらく、絶対パスを指定すると問題が解決されるでしょう。
– アンドレアス
2020 年 9 月 4 日 17:09
はい、FileZilla で確認しましたが、同じように見えます
– マスタークール
2020 年 9 月 4 日 17:25
------------------------
クラスパスをリストする順序が重要であることがわかりました。それで、それを再配置するだけでうまくいきました。