web-dev-qa-db-ja.com

エラー:CentOS7でOpenJDKとOracle Java)を使用してメインクラスを検索またはロードできませんでした

CentOS 7.2 Linuxでは、正常にダウンロードしてインストールしました Oracle Java with:

# 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

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

TheClassName.Javaという名前の単純なJavaファイルを作成します:

package thepackagename;

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

javac TheClassName.Java(同じディレクトリにTheClassName.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での同様のコマンドはうまく機能し、そこからLinuxにもTheClassName.classファイルをコピーしてみました。

上記のように、私はすでにほとんどの提案を試したので、助けてください。この質問を重複としてマークすることを提案しないでください。

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

更新:

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

# 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ディレクトリの親ディレクトリから上記のコマンドを実行する必要があります。

1
karel