私はJCasGen用のMavenプラグインに取り組んでいます。このプラグインは、XML型のシステム記述ファイルを受け取り、いくつかのJavaクラスを生成します。型システム記述ファイルは、多くの場合、クラスパスを介して同じプロジェクト内の他の型システム記述ファイルを指します。したがって、JCasGenを実行するには、すべてのXML型システム記述ファイルを含むクラスパスが必要です。(これらのXMLファイルは、Javaコードもクラスパスを介して参照する可能性があるため、プロジェクトの最終的なjarファイルにも配置する必要があります。)
XMLファイルは、src/main/resources
Mavenがそれらをコピーしtarget/classes
、プロジェクトのjarファイルに含まれるようになっています。したがって、プラグインに与える自然なクラスパスはtarget/classes
です。ただし、プラグインが直感的なgenerate-sources
フェーズで実行されている場合、のXMLファイルsrc/main/resources
はまだにコピーされておらずtarget/classes
、JCasGenは失敗します。
では、JCasGenに正しいクラスパスを与えることができるように、どのように構造化するのでしょうか。
これが私が考えたいくつかのことですが、それらが意味をなすかどうかは本当にわかりません。
process-resources
フェーズでプラグインを実行しtarget/classes
、クラスパスに使用します。これは私が現在行っていることであり、機能しているようです。(プラグインが常にリソースの標準のMavenコピーの後に実行されるようにすることを心配していましたが、それがデフォルトで発生するようです。)このアプローチの主な問題は、process-resources
ソースを生成するプラグインの直感的なフェーズではないことです。リソースディレクトリと
target/classes
:を連結してクラスパスを作成します。StringBuilder classpath = new StringBuilder(); for (Resource resource : this.project.getBuild().getResources()) { classpath.append(resource.getDirectory()); classpath.append(File.pathSeparatorChar); } classpath.append(this.project.getBuild().getOutputDirectory());
このようなことを試してみたところ、うまくいったようですが、包含または除外を含む複雑なリソースでは失敗する可能性があるのではないかと心配しています。