1

依存関係として(内部のJavaクラスを参照するために)含めることができ、プラグインとして実行できる単一のMavenプロジェクトを作成できますか?

LAMPスタックでのGWTのホスティングを支援するライブラリに取り組んでいます。誰かがこれを使用するには、いくつかのJavaクラスを拡張する必要があり(したがって、依存関係である必要があります)、Mavenプラグインを呼び出す必要があります(したがって、プラグインである必要があります)。プラグインコードは同じJavaクラスを参照するため、それらが別個のプロジェクトである場合、プラグイン1はライブラリ1に依存する必要があります。

現状では、ライブラリは通常のMavenプロジェクトとして、プラグインはライブラリに依存するMavenプラグインとして持っています。つまり、リリースを行うには、2つの異なるアーティファクトをリリースする必要があり、依存プロジェクトは両方のアーティファクトの両方のバージョン番号を更新する必要があります。1つのプロジェクトがあると便利です。

4

3 に答える 3

1

Mavenプラグインを作成した場合でも、artifactId / groupId/versionがあります。あなたのセクションとあなたのセクションの両方で参照できない理由はありません。一方、それが醜い場合は、メインプロジェクトとMavenプラグインプロジェクトの両方が依存する共通コードを使用してライブラリを作成してみませんか?

編集:

申し訳ありませんが、2番目の部分は明確ではありませんでした。多数の子モジュールを定義するトップレベルのpomがある複合Mavenプロジェクトを調べてください。この場合、mavenプラグインと共通ライブラリコードは別々の子であり、別々のアーティファクトを生成できますが、必要なのは1つのバージョン番号と1つのリリースコマンドだけでトップレベルから実行されます。私はこれを行っていませんが、行うオープンソースプロジェクトはいくつもあります。多くの場合、テストコードを単一のモジュールに入れて、他のすべてのモジュールから参照できるようにするためのイディオムとして使用されます。配布可能なjarファイルに出力する必要はありません。

于 2009-05-20T19:08:11.717 に答える
1

あなたは次のことをすることによってより良くなるでしょう

  1. jarのプロジェクトFoo:Foo.jar
  2. プラグインをビルドする依存関係としてFoo:Foo.jarを使用するプロジェクト
  3. 1&2をビルドするMaven親プロジェクト

ディレクトリ構造は次のようになります

\project\pom.xml
\project\foo\pom.xml
\project\foo\src\main\java\foo.java
\project\plugin\pom.xml
\project\plugin\src\main\resources
\project\plugin\src\main\java

\ projectからmvn clean package、ビルド\project\foo\target\foo.jar\project\plugin\target\plugin.jar

お役に立てれば。

于 2009-05-21T19:18:54.000 に答える
0

ベストプラクティスは、提案していることを行わないことです。この例には、PMD、BND、JUnit / TestNGなどが含まれます-深刻なプロジェクトでは、mavenプラグインを適切なライブラリにパッケージ化していないようです。

両方の選択肢を取得する1つの方法は、Mavenアセンブリを使用して、ライブラリ本体とプラグインごとに2つの個別のMavenプロジェクトを作成し、両方のクラスを含むjarとして個別のパッケージを作成することです。

于 2009-05-24T05:54:07.673 に答える