1

間もなくプロジェクトが予定されており、すべてが非常にうまくまとめられていますが、Javaクラスパスが真剣に邪魔になっています。できるだけ明確かつ徹底的に状況を説明するように努めます。

そのため、Javaccを使用してプログラミング言語を記述しています。javaccファイルはいくつかのjavaファイルにコンパイルされます。Parser.javaファイルには、生成された他のjavaファイルへの参照と呼び出しが含まれています。したがって、生成後、Parser.javaファイルをコンパイルします。問題は、他のJavaファイルや自分のファイルへの呼び出しを認識できないなど、多くのエラーが発生することです。教室の掲示板で問題について質問したところ、教授は「クラスパスにクラスファイルが必要です」と答えました。わかりました。すばらしいので、問題は、どうすればよいのかということです。基本的に、生成されたJavaファイルと他のヘルパーファイルを含む単一のディレクトリがあります。

それで、私たちは何を試しましたか?

.bashrc(Ubuntu)ファイルを変更して正しいクラスパスを含めようとしましたが、機能しません。すなわち

 CLASSPATH=Home/project

(私がファイルに正しい構文を持っていたようなもの)

コンパイル実行してみました

javac -cp . Parser.java

javac -cp "." Parser.java

どちらも機能しません。

ファイルのディレクトリにあるxml(xmlだと思います).classpathファイルを編集しようとしました。それでも動作しません。

どういうわけか、私は自分が持っているディレクトリの1つでParser.javaをコンパイルできました(何かを機能させるための無駄な努力で同じファイルを含む複数のディレクトリを作成することになりました)が、実行しようとすると

java -cp . Parser.java

また

java Parser.java

メインが見つからないと表示され、(他のコンピューターでは)ClassNotFoundまたはClassNotDefined例外がスローされます(そのようなものですが、パーサーファイルにメインがありますが見つかりません)。

パッケージの減速とインポートステートメントをファイルに追加しようとしましたが、何も機能していないようです。

基本的に:Javaファイル(すべて1つのディレクトリにあり、jarファイルではない)をコンパイルしてマシンで実行できるように、クラスパスを正常に変更するにはどうすればよいですか?

ご協力ありがとうございました。大変感謝しております。

4

3 に答える 3

2

Antを調べることを強くお勧めします。単純なビルドファイルで、これらすべての問題を解決できます。

.bashrcまたはを編集する必要はありませんCLASSPATH

コマンドラインから、すべてのJavaファイルを一緒にビルドする必要があります。javacc.jarレクサーとパーサーが生成された後、JavaCCが必要かどうかはわかりません。しかし、それがいくつかの一般的なASTサポートに対して機能すると仮定しましょう。

javacc.jarに位置しています~/javacc-5.0/lib/javacc.jar

シナリオ1:単純なディレクトリ構造。すべてのJavaファイルはパッケージのないルートフォルダにあります。

root
  | Parser.java
  | Lexer.java
  | Program.java

これらをコンパイルするには、以下を実行する必要があります。

javac -cp ~/javacc-5.0/lib/javacc.jar Parser.java Lexer.java Program.java

Programプログラムが持っている場合、私はそのように実行することができますmain

java -cp ~/javacc-5.0/lib/javacc.jar:. Program

シナリオ2:中程度のディレクトリ構造、ルートにコードがありますが、パッケージがあります。

root
  | org
     | myproject
          | Parser.java
          | Lexer.java
          | Program.java

次に、次のようにjavacを実行する必要があります。

javac -cp ~/javacc-5.0/lib/javacc.jar org/myproject/Parser.java org/myproject/Lexer.java org/myproject/Program.java

と実行する

java -cp ~/javacc-5.0/lib/javacc.jar:. org.myproject.Program

シナリオ3:複雑なディレクトリ構造、パッケージを含む特定のソースディレクトリ。

root
   | src
      | org
          | myproject
              | Parser.java
              | Lexer.java
              | Program.java

次に、次のようにjavacを実行する必要があります。

javac -cp ~/javacc-5.0/lib/javacc.jar -sourcepath src src/org/myproject/Parser.java src/org/myproject/Lexer.java src/org/myproject/Program.java

と実行する

java -cp ~/javacc-5.0/lib/javacc.jar:src org.myproject.Program

于 2012-04-23T05:54:33.013 に答える
0

との間には違いがjavacありjavaます。あなたはそれらを間違った方法で使おうとします。javac* .classファイル(この場合はParser.class)を生成するコンパイラです。この*.classファイルは、によって実行される必要がありますjava

したがって、ファイルParser.javaがある場合

class Parser {

  public static void main(String[] args) {
    System.out.println("Hi");
  }

}

このファイルが存在するディレクトリに移動し、シェルで実行します。

javac Parser.java

コンパイルされたファイルを実行するより

java Parser

以上です。javaファイルのクラスの名前はファイルの名前と同じでなければならないことに注意してください。

于 2012-04-23T05:59:32.203 に答える
-2
  1. コンパイルされたすべてのクラスのJarファイルを作成します。jarファイルの作成方法については、このチュートリアルを参照してください。

  2. このコマンドでプログラムを開始します

     java -classpath pathToJarFile com.abc.MainClass
    
于 2012-04-23T05:43:28.633 に答える