web-dev-qa-db-ja.com

コンパイル方法Java .jarライブラリを使用したプログラム

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/programTestConsoleが拡張する唯一のクラスがあるConsoleProgram.classディレクトリが含まれています。

javac -classpath ".:acm.jar" TestConsole.Javaも機能しません。

15
Rebecca Nelson

チェックリスト:

  1. acm.jarのクラスは次のように表示されます。

    acm/program/CLASSX.class

    acm/program/CLASSY.class

    jar tf acm.jarでデカンテーションした場合

  2. あなたはそれらを次のようにインポートしています:

インポートacm.program.CLASSX;

または

import acm.program。*;

3
Andrew
javac -cp <jar you want to include>;<jar you want to include> <source.Java> 

<jar you want to include>同じディレクトリにある場合は、jarの名前だけで十分です。そうでない場合は、絶対パスまたは相対パスを指定します

複数のjarの場合は、,で区切ります

unix;:に置き換えます

可能であれば、IDE Eclipseのようなものを使用します。以前は同じようなことに多くの時間を費やしていましたが、業界では、この方法でこれを行うことはほとんどありません。

23
Bhushan

これらのコマンドをWindowsマシンで実行していますか? Windowsでは、クラスパスの要素はコロンではなくセミコロンで区切られます。そう:

javac -classpath .;acm.jar TestConsole.Java

別の可能性:acm.jarの構造が間違っています。内部のクラスファイルがpackage acm.programを宣言するファイルからコンパイルされただけでは不十分です。パッケージ構造もディレクトリ階層として表す必要があるため、acm.jarにはディレクトリacmを含める必要があります。その中のサブディレクトリprogramには、TestConsoleで使用されるクラスの実際のクラスファイルが含まれています。

6

何時間も苦労してコンパイルしようとして問題が解決しない場合は、上記のすべての回答を試してみましたが、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

ケースのコンパイルまたは実行の両方に従う必要があります。

1
Kirk