4

これはMavenのベストプラクティスに反することを理解していますが、おそらく私の状況はルールからの数少ない例外の1つです-少なくとも私は代替案を考えることに固執しています:(

環境は次のとおりです。

  • 外の世界への独自のテクノロジーベースのインターフェースを備えたレガシーアプリケーションがあります
  • 新しいフロントエンドとしてフラッシュを使用したい
  • 従来のインターフェースに基づいて、フラッシュクラスを生成し、フロントエンド開発者が使用できるようにフラッシュスイッチにパッケージ化します。
  • レガシーインターフェイスに基づいて、フラッシュサービスリクエスト(ブレイズ経由で送信)をレガシーインターフェイスにブリッジするJavaクラスを生成します
  • さらに難しくするために、インターフェイスごとにpomを使用したくない/使用できません。これは、数十のインターフェイス(インターフェイス)があり、artifactIdのみが異なるためです。代わりに、ビルドごとに(jenkinsによって)パラメーター化される「汎用」プロジェクト構造を使用します。プロジェクトは、完全に自動化された環境でのみ使用されます。

最初に、これらすべてを1つの「単純な」プロジェクトにまとめようとしました。これは、アーティファクトをインストールする必要がある時点まで機能します。

私の現在のアプローチは、Mavenリファレンスの第13章に触発されたマルチモジュールプロジェクト構造ですが、それ自体にいくつかの欠点があります。

GenericProject
|
+-- GenerateSources from legacy interface
|   +-- pom.xml
|
+-- Java 
|   +-- pom.xml
|
+-- SWC 
|   +-- pom.xml
|
+-- pom.xml

このアプローチには、「Java」と「SWC」から「GenerateSource」の内部構造への参照があるという欠点があります。これは醜いですが許容範囲内です。
私の邪魔になるのは、インストールプラグインとデプロイプラグインを大幅に調整して、プロセス全体をトリガーしたレガシーインターフェイスの名前とバージョンのアーティファクトを取得する必要があることです。今実行しましたが、非常に壊れやすいようです。

プロジェクトを2つの単純なプロジェクトに分割/複製することを検討しました。

  • GenerateSources&Java
  • GenerateSources&SWC

しかし、これは相互参照による小さな煩わしさを解決するだけです。

アーロンが彼のコメントで指摘したように、私は問題を述べるのがはっきりしていません。さらにいくつかの実験を行った後、これは私にとって非常に明確になりました。本質的に、解決すべき2つの問題があります。

  1. 2つのアーティファクトを一緒にインストール/デプロイする
  2. アーティファクトに別の名前を付けますproject.artifactId

プロセス全体をよりMavenのようにするための提案はありますか?

前もって感謝します。

4

3 に答える 3

3

マルチモジュールアプローチでいくつか迂回した後、私は次の実用的な解決策に到達しました:

  1. を使用して、build-helper-plugin自動的にインストール/デプロイされるセカンダリアーティファクトをアタッチします
  2. 2フェーズビルド:

    2.1解決された&sedを含むpom.xmlを生成しますproject.artifactIdproject.version

    2.2Mavenビルドを実行する

理論的にはproject.artifactId&として式を使用できますproject.versionが、Mavenはこれに対する警告を表示します。。。正当な理由:生成されたアーティファクトを参照しようとすると、nexusは「...のアーティファクト記述子の読み取りに失敗しました」を表示します。エラー。これは、リポジトリに保存されているpomで式が解決されていないためだと思います。

于 2011-04-18T10:40:58.123 に答える
2

generate-sourcesフェーズにアタッチする小さな Maven プラグインを作成する必要があります。例については、 maven-annotation-pluginを参照してください( main クラス)。

これにより、生成されたソースが の出力にGenerateSource含まれ、他の POM に依存関係を含めるだけで、これらのクラスを使用できます。target/これらのファイルは、 ではなく の下に作成する必要があることに注意してくださいsrc/

インストール/デプロイに関して: これらのプラグインは、アーティファクトを作成するプラグインから名前を取得します。したがって、プロパティの設定方法に問題があるはずです。あなたの場合、それはJAR pluginです。ドキュメントには、デフォルトのアーティファクトの名前を設定する方法の例があります。

于 2011-04-15T07:51:02.177 に答える
1

Maven オーバーレイを使用してみてください。これは、複数の Web アプリケーション間でリソースを共有するために使用されます。

http://maven.apache.org/plugins/maven-war-plugin/overlays.html

于 2011-04-15T10:36:57.527 に答える