7

コマンド ラインから注釈プロセッサを実行する際に問題が発生しています。問題は、Windows 環境では機能するが、私の Linux インストールでは機能しないことです。

私のプロセッサは jar ファイル (meta-validator.jar) にあります。また、プロセッサのクラスの完全修飾名を含むエントリを META-INF/services/javax.annotation.processing.Processor に追加しました。

次のコマンドで注釈プロセッサを呼び出そうとしています:

javac -cp "./metadata-validator.jar; ... (path to annotations.jar etc.)" -processor xammt.validator.modules.ValidatorModule -proc:only " ... path to sources" 

Windows 環境 (Windows 7 64 ビット Pro、JDK 1.7.xx) では正常に動作し、プロセッサが検出され、プロセス メソッドが実行されます。

私の Linux 環境 (Linux Mint 13 32 ビット -> 基本的に Ubuntu 12.04、Oracle JDK 1.7) では、次のメッセージが表示されます。

error: Annotation processor 'xammt.validator.modules.ValidatorModule' not found
warning: Annotation processing without compilation requested but no processors were found.

また、-processorスイッチがないと、同じ警告が表示されます(他の詳細な内容で)。

この問題の原因は何ですか? 問題なく Java アプリケーションを実行/コンパイルできるため、Linux マシン上の JDK は正しくインストールされていると思います。

アドバイスをありがとう。

編集:これが機能しない理由はまだわかりません。面白いのは、プログラムで動作することです - Java Compiler API を介して (両方のプラットフォームで) 問題なく注釈プロセッサを呼び出すことができました。これは、デバッグのためにより良い解決策でもあります。

EDIT2: 実際のコマンド:

javac -cp "./metadata-validator.jar;./lib/common-library.jar;./Annotation source.jar" 
-processor xammt.validator.modules.ValidatorModule -proc:only "SourceFile.java"

解決済み: http://en.wikipedia.org/wiki/Classpath_(Java)#OS_specific_notes を確認してください

4

2 に答える 2

4

Linux では、クラスパスの区切り文字としてセミコロンではなくコロンを使用していますか? 実行している Linux コマンドも含めます。

クラスパスでセミコロンをコロンに変更すると、機能するはずです。

このような:

javac -cp "./metadata-validator.jar:./lib/common-library.jar:./Annotation source.jar" -processor xammt.validator.modules.ValidatorModule -proc:only "SourceFile.java"
于 2012-12-18T04:38:36.283 に答える
1

また、Debian Wheezy (7u3) に含まれる OpenJDK 7 のバージョンは、アノテーション プロセッサでは動作しないこともわかりました。OpenJDK 7u9 (Ubuntu Quantal から) のカスタム ビルドを行いましたが、完全に動作します。

Debian のバグトラッカーでバグを報告しました: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=697658

于 2013-01-08T02:44:52.477 に答える