TLの間に必要なすべてのクラスをリスト; DR
私は私が特定のソースファイル用のJavaコンパイラが必要とするすべてのクラスをログに記録することができますjavac
プラグインのAPIを探しています。Javaコンパイラは、コンパイル
もっとコンテキスト:
私はそこBazel
が可能であることである、とモジュール」のより細かい粒粒度、恩恵Maven
からBazel
と課題(および機会)のいずれかに移行するためのツールを書いています"さらに、クラスパスのコンパイルに関しては、依存関係は推移的ではありません。私は、唯一の可能なコードの依存性グラフを構築しようとしていると(等定数、輸入のための)ソースコード上のバイトコードに加えヒューリスティックを使用しているが、私は恐怖エッジケースに上につまずいた
コンパイラプラグインを使用して解決してください。 ParentInterface
はバイトコードまたはソースコードに表示されませんが、コンパイルのクラスパスにSomeInterface
とParentInterface
の両方を必要とjavac
次いでParentInterface
を拡張インタフェースSomeInterface
を受け入れるクラスConcrete
における方法Foo
考える
。
がに関して推移している依存関係は、クラスパスをコンパイルするが、これは非常にクラスパス(ソースdependneciesとビルドトリガーに関して主に興味深い)を広げるため、私はそれを避けるしたいので、これはMaven
で解決されます。
compiler pluginsを使用して、特定のソースファイルに対してコンパイラが必要とするすべてのクラスを識別できるかどうかを確認しようとしています。これは、私が情報を収集し、この情報からグラフを生成するために私のビルドを一度実行することができるので、私を助けるでしょう。問題は、私はAPIに関して少し失われているということです。
ありがとうございます!
SomeInterfaceを調べて、ParentInterfaceが必要であることを確認できます。リフレクションまたはバイトコード分析のいずれかを使用できます。それがあまりにも難しいと思うなら、私はこの情報を得るためにコンパイラを使用しようとすると10倍の難しさがあることを保証することができます。 –
@PeterLawreyありがとう!ビルドの時間に興味があるので、おそらく私の助けとはならないでしょうが、バイトコードがうまくいくかもしれません。問題は、私が親を必要とするケースのうちのいくつかの場合に限られており、あなたのアプローチでは、これらのすべてのケースを学ぶか、すべての補助タイプとその祖先にスコープを拡大することが義務付けられています(そして、さらに)... – Ittai
はい。また、実行時にリフレクションによって取得されたクラスが必要になります。 –