エラー:CentOS 7上のOpenJDKおよびOracle Javaでメインクラスを見つけられなかったか、ロードできませんでした


1

CentOS 7.2 Linuxでは、次を使用してOracle Javaを正常にダウンロードしてインストールしました。

# rpm -Uvh jdk-8u91-linux-x64.rpm

また、すでにOpenJDKがインストールされています:

# rpm -qa | grep -i jdk
java-1.8.0-openjdk-headless-1.8.0.91-0.b14.el7_2.x86_64
java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64
jdk1.8.0_91-1.8.0_91-fcs.x86_64

次のコマンドを使用して2を切り替えることができます。

# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre/bin/java
 + 2 /usr/java/jdk1.8.0_91/jre/bin/java

Enter to keep the current selection[+], or type selection number:

そして、以下のバージョンをご覧ください:

# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

# javac -version
javac 1.8.0_91

今私の問題にお願いします-

という単純なjavaファイルを作成しますTheClassName.java

package thepackagename;

public class TheClassName {
        public static final void main(String[] args)  {
                System.out.println("Hello World!");
        }
}

javac TheClassName.javaTheClassName.class同じディレクトリにファイルを生成する)で正常にコンパイルした後、残念ながら実行できません:

# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName

ここで別の試み:

# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre
# $JAVA_HOME/bin/java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName

別の環境変数を設定しても、次のいずれにも役立ちません。

# export CLASSPATH=.

Windows 7での同様のコマンドはうまくTheClassName.class機能し、そこからファイルもLinuxにコピーしようとしました。

上記のように、私はすでにほとんどの提案を試しているため、この質問を重複としてマークすることはお勧めしません。

SELINUXはオフ(SELINUX=disabled)で、サーバーは数週間前にインストールされ、MySQL / PostgreSQL / Apache / WordPressでLAMPとして(エラーなしで)提供されました。

更新:

はい、クラスファイルをthepackagenamedirの下に移動する必要があり、それが機能します。

# ls thepackagename
TheClassName.class

# java -cp . thepackagename.TheClassName
Hello World!

test.jarファイルを作成することもできますが、今でも動作します:

# zip -r test.jar thepackagename
  adding: thepackagename/ (stored 0%)
  adding: thepackagename/TheClassName.class (deflated 31%)

# java -cp test.jar thepackagename.TheClassName
Hello World!

回答:


1

クラスがパッケージ内にある場合:

package thepackagename;

public class TheClassName {
        public static final void main(String[] args)  {
                System.out.println("Hello World!");
        }
}

その後、間違ったディレクトリから呼び出すと、次の結果になります。

Error: Could not find or load main class thepackagename.TheClassName

完全修飾名で呼び出す必要があります。

java -classpath . thepackagename.TheClassName

また、このコマンドは、ディレクトリが存在する同じディレクトリから呼び出す必要がありますthepackagename。これは、という新しいディレクトリを作成してそこにthepackagename移動TheClassName.classし、thepackagenameディレクトリの親ディレクトリから上記のコマンドを実行する必要があることを意味します。


ああ、あなたは100%正しいですし、ファイルを移動するとthepackagename/TheClassName.class役立ちます(そしておそらく私の質問を複製します)...しかしいくつかのjarファイルで構成される私の実際のプログラムはまだ実行されません。さらに調査する必要があり、別の質問をします。
アレクサンダーファーバー

2
外部jarを使用してJavaファイルを実行するには、外部.jarファイルへのフルパスにjava -cp .:/path/to/jar/file MyCompiledFile 置き換え/path/to/jar/fileて実行します。
karel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.