0

非同期呼び出しを処理するための小さなフレームワークを作成しています。フレームワークがどのように機能するかを示すために、ショーケースを作成しました。ショーケース内で、(Java ソース ファイルからの) コードと、コードが実行されると何が起こるかを示したいと思います。GWT Showcase に似たもの。

コードを表示するには、IncrementalGenerator を使用して Java ソース ファイルを読み取り、コードを表すウィジェットのコードを生成します。そのために、以前に他のプロジェクトで行ったのと同じコードを使用して Java ファイルを読み取りました。

次のようになります。

InputStream in = classLoader.getResourceAsStream(path);
if (in == null) {
  logger.log(TreeLogger.ERROR, "Resource not found: " + path);
  throw new UnableToCompleteException();
}

path は、読み取りたいファイルの相対パスです。SuperDevMode の場合、InputStream は常に null です。古い Generator クラスも使用しようとしましたが、これも機能しませんでした。コードサーバーが起動された場合にジェネレーターが実行されると、クラスパス内でファイルが利用できないようです。

Dev-Mode-Plugin で同じコードを試したところ、問題なく動作しました。

では、SuperDevMode を使用して IncrementalGenerator 内のプロジェクトの Java ソース ファイルにアクセスするにはどうすればよいでしょうか?

GWT 2.6.1、IntelliJ v13.1 Ultimate を使用しています。

前もって感謝します

4

2 に答える 2

1

引数を使用して CodeServer にソースを渡す場合、ソース-srcはクラスパスに含まれません。にあると予想さClassLoaderれる場合は、クラスパスにある必要があります (GWT コンパイラまたは DevMode に渡すように)。ジェネレータを堅牢にするには、まず を試してResourceOracleから にフォールバックする必要がありClassLoaderます。


参考までに、一部の組み込みジェネレーターは現在クラスパスからロードされており、ResourceOracleインクリメンタル コンパイルを改善するために からロードするように変更されています: https://gwt-review.googlesource.com/8811

于 2014-08-25T09:03:42.340 に答える
0

この問題の回避策を見つけるために、さらに数時間を費やします。

結局、GWTとは関係ありませんでした。-src引数がクラスパスの内容に影響を与えないことを発見しました。IntelliJ プロジェクトのコンパイラ設定内で、クラスパスにコピーされるリソースのタイプを制御する設定を見つけました。IntelliJ が *.java ファイルをクラスパスにコピーするのを止めるパターンを削除した後、すべて正常に動作します。

コンパイラ リソース パターン設定の外観

-srcIntelliJ の引数でクラスパスの出力を制御できなかったようです。

于 2014-08-26T05:29:34.913 に答える