4

Mavenを使用してビルドおよびリリースされたアーティファクトがあります。アーティファクトの元のpom.xmlには、通常のプロジェクト情報(artifactId、名前など)と依存関係が含まれています。それはいいです。ただし、pom.xmlには、SCM URL、開発者の名前、親アーティファクトなどの個人情報も含まれています。

依存関係などの技術的な関連情報を破壊することなく、アーティファクトを公開できるように、サニタイズされたpom.xmlを生成するようにMavenに指示する方法はありますか?

SCM URLも、開発者のリストも、親pomの存在(DepMgmt定義やその他のメタスタッフにのみ使用される)も、アーティファクトのユーザーにはあまり関係がないので、私はリリースされたpom.xml

Archivaなどのリポジトリマネージャーとアーティファクトのjarファイル内にパッケージ化されたpom.xmlには、これらの情報が含まれています。Mavenはすべてをコピーしているだけだと思います。

要約する:

私は持っています:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>my-artifact</artifactId>
    <scm>
        <connection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</connection>
        <developerConnection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</developerConnection>
        <url>http://buildmachine/org.example/my-artifact/trunk</url>
    </scm>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>

が欲しいです:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>my-artifact</artifactId>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>
4

3 に答える 3

3

私はあなたの問題の完璧な解決策を知りませんが、いくつかのことができます。これらはハックですが、役立つ場合があります。
まず、pomから個人情報(scm、開発者名など)を外部化します。scmメタデータの場合は次のようになります。

<scm>
   <connection>${my.scm.connection}</connection>
   <developerConnection>${my.scm.developerConnection}</developerConnection>   
   <url>${my.scm.url}</url>
</scm>

次に、プロパティを設定ファイルに移動して、プロファイルに配置します。設定ファイルでは、会社のプライベートリポジトリを「非表示」にすることもできます。プロファイル/settings.xmlファイルを他のアソシエートと共有する必要がある場合は、実行中のグローバル設定ファイルを使用するmvn -gs path_to_global_settingsか、これらの設定を準備して一般的なMavenインストールを準備してみてください。
残念ながら、親のpomセクションはそのままにしておく必要があります。

于 2009-12-04T20:37:34.357 に答える
1

私の知る限り、リリースプラグインにはこれに対する組み込みのサポートがありません。2つの可能性が思い浮かびます。

オプション1:

  • jarにpomを含めないでください。これは、jarゴールの「archive」パラメーターを使用して制御できます。<archive><addMavenDescriptor>false</addMavenDescriptor></archive>
  • 公開されたPOMに不要な要素を取り除くプログラムを作成します。これは、release:prepareとrelease:performの間に行う必要があります。これは、作成後にタグを変更するためのSCMのサポートがある場合、または別のタグ/ブランチで変更を行ってからrelease:performfromを使用する場合にのみ機能します。そこの。

オプション1は厄介だと思います。

オプション2:

  • preparationGoalsパラメーターをリリースプラグインに活用してみてください。pom操作をMavenアクションとして記述できる場合は、この方法で実行できる可能があります。

オプション2の方が難しいと思います。

それでもうまくいかない場合は、release:stageのようなものを使用して手作業でサニタイズを行う必要がありますが、それでもjarの内容からPOMを除外する必要があります。

于 2009-12-02T05:44:29.530 に答える
0

このために独自の原型を作成し、一般に公開します。その後、ユーザーはアーキタイプを取得し、アーキタイプに基づいて独自のプロジェクトを設定できます。

アーキタイプは非常に単純なプラグインであり、作成したいプロジェクトのプロトタイプが含まれています。

アーキタイプに基づいて新しいプロジェクトを作成するにはmvn archetype:generate、次のようにゴールを呼び出す必要があります。

  mvn archetype:generate                              \
  -DarchetypeGroupId=<archetype-groupId>              \
  -DarchetypeArtifactId=<archetype-artifactId>        \ 
  -DarchetypeVersion=<archetype-version>              \
  -DgroupId=<my.groupid>                              \
  -DartifactId=<my-artifactId>
于 2009-11-21T06:43:30.680 に答える