9

Maven、maven-release-plugin、git 統合、pom.xml、および pom.xml がルートではなくリポジトリのローカル コピーのサブディレクトリにあることについて質問があります。

セットアップは次のとおりです。

  • 限られた数のプライベート リポジトリを持つ github アカウントを持っています
  • Maven を使用してビルド/リリースを整理したい (学習中)
  • 多くのMaven「プロジェクト」を作成する必要があるかもしれません.gitリポジトリごとにいくつかのプロジェクト
  • 各 Maven プロジェクトには、その特性を定義する「pom.xml」が必要です。
  • プロジェクトのすべての pom.xml ファイルを git リポジトリのルートに置くことができないか、少なくとも不便です。
  • したがって、プロジェクトのフォルダーレイアウトは次のようになります。
    • git_repo_root_dir
      • project_Aフォルダー
        • pom.xml
        • other_code
      • project_Bフォルダー
        • pom.xml
        • other_code
      • ...
  • ディレクトリ git_repo_root_dir/project_A に正常に移動し、「mvn release:prepare」を実行できます
  • git_repo_root_dir/project_A: "mvn release:perform" のこのステップで失敗します
    • 問題は、リリース ビルドの準備として git タグ付きコードが git_repo_root_dir/project_A/target/checkout/project_A に正常にチェックアウトされているようですが、チェックアウト後に "maven-release" プラグインがディレクトリ git_repo_root_dir/project_A に移動することです。 /ターゲット/チェックアウト/。git_repo_root_dir/project_A/target/checkout/project_A/ の代わりに。実際のビルドを行うには、「maven-release」プラグインに、pom.xml をいじる前にソースの特別なタグ付きコピーのサブディレクトリにステップインするように指示する方法はありません。
  • 質問: これを回避する方法はありますか? 「mvn release:perform」にサブディレクトリに移動するように指示するオプションはありますか?

このプロセス中に発生する実際のエラーは次のとおりです。

[INFO] --- maven-release-plugin:2.0:perform (default-cli) @ standard_parent_project ---
[INFO] Checking out the project to perform the release ...
[INFO] Executing: /bin/sh -c cd "/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target" && git clone git@github.com:clarafaction/0maven.git '/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout'
...
/* note, the pom.xml the build should go out of at this point is at
   '/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout/standard_parent_project/pom.xml'
*/
...
[INFO] [ERROR] The goal you specified requires a project to execute but
    there is no POM in this directory
    (/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout).
    Please verify you invoked Maven from the correct directory. -> [Help 1]

ありがとう。

4

3 に答える 3

11

これでうまくいくはずです:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>perform</goal>
            </goals>
            <configuration>
                <pomFileName>your_path/your_pom.xml</pomFileName>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2012-10-11T14:42:26.350 に答える
7

通常、別の場所にあるPOMから実行するようにMavenに指示するのと同じ方法で実行できます:-fオプション。mvn --helpそれを次のように説明します。

-f,--file <arg>    Force the use of an alternate POM
                   file.

リリースでこれを行うには、適切なオプションをリリース プラグインに渡すだけです。これを行うには、実行目標の「引数」プロパティを使用できます。mvnこのプロパティは、リリース時に実行するコマンドに追加するいくつかの追加引数をリリース プラグインに伝えるだけです。コマンドラインから追加する-D arguments="-f path/to/pom"か、リリースプラグインの構成のpomに永続的に設定することで設定できます。

<plugin>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <arguments>-f path/to/pom</arguments>
    </configuration>
</plugin>
于 2012-05-22T03:24:00.487 に答える
-2

最初のことは、すべてのプロジェクトが独自のリポジトリを持つという慣例を持つ git を理解することです。次に、Maven には規則があり、pom.xml をプロジェクトのルートに配置することが最も明白です。さらに、あなたは Maven と戦おうとしています。私は、あなたが戦いに負けて、あなたの人生が楽ではなくなると予測します。プロジェクト A と B が何らかの形で関連している場合 (同じバージョン番号または同じリリース時間)、次のような構造になるマルチモジュール ビルドについて考える必要があります。

root (Git Repos)
  +-- pom.xml
       +--- projectA (pom.xml)
       +--- projectB (pom.xml)

また、ルートから 1 つのステップで projectA (モジュールと呼んだほうがよい) とモジュール b の両方をリリースできます。

于 2012-05-22T06:29:00.303 に答える