Javacに、拡張しようとしているクラスの外部.jarファイルを認識させることができません。同じディレクトリにTestConsole.Javaとacm.jarの2つのファイルがあります。次のコマンドを使用して、同じディレクトリからコンパイルしています。
javac -classpath .:acm.jar TestConsole.Java
しかし、javacは単にacm.jarを無視しているようです。それは私にエラーを与えます:
TestConsole.Java:1: package acm does not exist
import acm.program;
^
もちろん、acm.programはacm.jarのパッケージです。 acm.jar内のすべてのクラスはすでにコンパイルされています。コンパイルするのではなく、クラスで使用したいだけです。
何が悪いのですか?
私はこれをMacで実行しており、acm.jarのディレクトリ構造は有効であるように見えます。これには、acm/program
、TestConsole
が拡張する唯一のクラスがあるConsoleProgram.class
ディレクトリが含まれています。
javac -classpath ".:acm.jar" TestConsole.Java
も機能しません。
チェックリスト:
acm.jarのクラスは次のように表示されます。
acm/program/CLASSX.class
acm/program/CLASSY.class
jar tf acm.jarでデカンテーションした場合
あなたはそれらを次のようにインポートしています:
インポートacm.program.CLASSX;
または
import acm.program。*;
javac -cp <jar you want to include>;<jar you want to include> <source.Java>
<jar you want to include>
同じディレクトリにある場合は、jarの名前だけで十分です。そうでない場合は、絶対パスまたは相対パスを指定します
複数のjarの場合は、,
で区切ります
unix
の;
を:
に置き換えます
可能であれば、IDE Eclipseのようなものを使用します。以前は同じようなことに多くの時間を費やしていましたが、業界では、この方法でこれを行うことはほとんどありません。
これらのコマンドをWindowsマシンで実行していますか? Windowsでは、クラスパスの要素はコロンではなくセミコロンで区切られます。そう:
javac -classpath .;acm.jar TestConsole.Java
別の可能性:acm.jar
の構造が間違っています。内部のクラスファイルがpackage acm.program
を宣言するファイルからコンパイルされただけでは不十分です。パッケージ構造もディレクトリ階層として表す必要があるため、acm.jar
にはディレクトリacm
を含める必要があります。その中のサブディレクトリprogram
には、TestConsole
で使用されるクラスの実際のクラスファイルが含まれています。
何時間も苦労してコンパイルしようとして問題が解決しない場合は、上記のすべての回答を試してみましたが、1つの小さな問題のためにプログラムを実行できませんでした。
簡単な問題は、すべてのパッケージの後のセミコロンです。 MacかLinuxかはわかりませんが、Windowsコマンドプロンプトの場合はそうでした
javac -cp mysql-connector-Java-8.0.12.jar; Testing.Java
Java -cp mysql-connector-Java-8.0.12.jar; Testing
ケースのコンパイルまたは実行の両方に従う必要があります。