概要
Maven は、プロジェクトオブジェクトモデル(POM)に基づくソフトウェアプロジェクト管理ツールであり、ビルド、レポート、ドキュメントを一元管理し、再現可能なビルドと依存関係管理をサポートします。
README プレビュー
\nApache Maven\n============\n\n[][license]\n[](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/maven/README.md)\n\n- [master](https://github.com/apache/maven) = 4.1.x\n[][build]\n[][gh-build]\n\n- [4.0.x](https://github.com/apache/maven/tree/maven-4.0.x): \n[](https://central.sonatype.com/artifact/org.apache.maven/apache-maven)\n[][build-4.0]\n[][gh-build-4.0]\n\n- [3.10.x](https://github.com/apache/maven/tree/maven-3.10.x):\n[][build-3.10]\n[][gh-build-3.10]\n\n- [3.9.x](https://github.com/apache/maven/tree/maven-3.9.x): \n[](https://central.sonatype.com/artifact/org.apache.maven/apache-maven)\n[][build-3.9]\n[][gh-build-3.9]\n\nApache Maven is a software project management and comprehension tool. Based on\nthe concept of a project object model (POM), Maven can manage a project's\nbuild, reporting and documentation from a central piece of information.\n\nIf you think you have found a bug, please file an issue in the [Maven Issue Tracker](https://github.com/apache/maven/issues).\n\nDocumentation\n-------------\n\nMore information can be found on [Apache Maven Homepage][maven-home].\nQuestions related to the usage of Maven should be posted on\nthe [Maven User List][users-list].\n\n\nWhere can I get the latest release?\n-----------------------------------\nYou can download the release source from our [download page][maven-download].\n\nContributing\n------------\n\nIf you are interested in the development of Maven, please consult the\ndocumentation first and afterward you are welcome to join the developers\nmailing list to ask questions or discuss new ideas/features/bugs etc.\n\nTake a look into the [contribution guidelines](CONTRIBUTING.md).\n\nLicense\n-------\nThis code is under the [Apache License, Version 2.0, January 2004][license].\n\nSee the [`NOTICE`](./NOTICE) file for required notices and attributions.\n\nDonations\n---------\nDo you like Apache Maven? Then [donate back to the ASF](https://www.apache.org/founda
FAQ (5)
トラブル対応組み込みの Maven 3.10.0 が `--color=yes` を無視し、`MavenCli.doMain` で ANSI 出力が生成されない問題を修正する方法
これは Maven 3.10.0 におけるリグレッションです。JAnsi から JLine への移行後、MessageUtils.isColorEnabled() は colorEnabled と null でない Terminal の両方を必要とします。MavenCli.main(...) はターミナルをインストールしますが、MavenCli.doMain(...) を経由する埋め込み呼び出しではインストールされないため、--color=yes はフラグを設定するものの ANSI 出力は無効のままになります。
修正: PR #13358 を含む Maven 3.10.x ビルド、または対応する修正済みリリースを使用してください。この修正により、doMain は埋め込み呼び出し用に MessageUtils.systemInstall(Terminal) を通じて dumb-color の JLine ターミナルをインストールし、その後削除します。新しい API は必要ありません。
一時的な回避策:
1. 埋め込み Maven ランタイムを 3.9.x にダウングレードしてください。例えば maven-embedder 3.9.16 では --color=yes が正しく反映されます。
2. 埋め込みエグゼキューター(EmbeddedMavenExecutor)を使用する代わりに、Maven をフォークして実行してください。フォークされたエグゼキューターは 3.10.0 でも正しく動作します。
3. カスタムエンベッダーを保守している場合は、doMain を呼び出す前に MessageUtils.systemInstall(...) でカラー対応の JLine Terminal をインストールし、finally ブロックで復元・削除してください。これは Maven の内部 API を使用するため、パッチ適用済みの Maven バージョンへのアップグレードを推奨します。
mvn -v でランタイムのバージョンを確認し、--color=yes を付けて埋め込みコマンドを再実行してください。
トラブル対応Maven 3.10.0 で内部アーティファクトに対して発生する 'ArtifactFilteredOutException: prefixes: Path NOT allowed from central' を解決する方法
Maven 3.10.0 は Resolver 2.0.x を使用しており、リモートリポジトリのプレフィックスフィルタリングがデフォルトで有効になっています。Artifactory/Nexus が公開されている Maven Central インデックスのみから生成された prefixes.txt を提供している場合、集約された仮想リポジトリ内の内部アーティファクトは、実際に存在し直接ダウンロード可能であってもブロックされます。
即時の回避策: ビルドでプレフィックスフィルタリングを無効にします:
mvn -Daether.remoteRepositoryFilter.prefixes.enabled=false clean verify
永続的に適用するには、.mvn/maven.config に次の行を追加します:
-Daether.remoteRepositoryFilter.prefixes.enabled=false
必要に応じて、次のコマンドですべてのリモートリポジトリフィルタを無効にできます:
mvn -Daether.remoteRepositoryFilter.enabled=false clean verify
これはあくまで回避策です。恒久的な修正としては、リポジトリマネージャーが内部アーティファクトのパスを含む正しい prefixes.txt を提供するか、集約リポジトリに対して不正確なプレフィックスファイルの提供を停止することです。Maven 3.9.x へのダウングレードでもこの問題は回避できます。Maven 3.9.x は Resolver 1.x を使用しており、デフォルトではプレフィックスファイルを取得しないためです。
トラブル対応Maven 4 で2回目のプラグイン実行時に MojoExecution.getPlugin().getDependencies() から発生する NullPointerException を修正する方法
これは、プラグインのクラスレルムが PluginRealmCache から提供される場合に、Maven 4.0.0-rc-7 で発生します。このキャッシュはクラスレルムとアーティファクトを復元しますが、リゾルバーの依存関係ノードは復元しないため、後続の実行では PluginDescriptor.getDependencyNode() が null になります。修正が含まれる Maven 4 のビルドにアップグレードしてください。この修正では、PluginRealmCache.CacheRecord が依存関係ノードを保持し、DefaultMavenPluginManager.setupPluginRealm() がそれを復元します。Maven をソースからビルドしている場合は、DependencyNode をキャッシュレコードに格納し、キャッシュされたレルムとともに復元するというアップストリームの修正を適用してください。一時的な回避策として、1つのビルドで同じプラグインを複数回バインドすることを避けるか、それらのプラグイン実行をまとめてください。
トラブル対応`mvnup check` がドライラン中に "POM(s) modified" や "Plugin upgrades applied" と報告するのはなぜですか?
これは Apache Maven 4.0.0-rc-7 における、誤解を招く出力のバグです。mvnup check はドライランを実行するため POM ファイルを書き込みませんが、そのレポートにはアップグレードが適用され POM が変更されたと記載されます。cp pom.xml /tmp/before.xml && mvnup check && diff /tmp/before.xml pom.xml で確認してください。差分は報告されないはずです。この修正ではドライランの状態を追跡し、文言を「would upgrade」や「POM(s) would be modified」などの実行予定のアクションを示すテキストに変更します。PR「fix: clarify mvnup check dry-run output」を含む Maven リリースにアップグレードしてください(または、その PR を適用して Maven をソースからビルドしてください)。それまでは、check の出力はプレビューとしてのみ扱い、変更を書き込みたい場合にのみ、該当する apply/write ゴールを実行してください。
トラブル対応Maven 4拡張でPackagingProviderを通じてパッケージングを提供する際に「Unknown packaging」エラーが発生した場合、どのように修正すればよいですか?
これは Maven 4.0.0-rc-7 および現在の master に存在するバグです。DefaultPackagingRegistry.lookup() はレガシーな Sisu の LifecycleMapping のみをチェックし、インジェクションされた List<PackagingProvider> を無視するため、app-client のような提供されたパッケージングが Unknown packaging: app-client で失敗します。
修正方法:
1. PR #13319 を含むリリースに Maven をアップグレードするか、まだリリースが利用できない場合はそのブランチから Maven をビルドしてください。
2. このパッチにより、DefaultPackagingRegistry はインジェクションされた PackagingProvider インスタンスを読み取り、LifecycleMapping にフォールバックする前にそれらのパッケージングを ID で解決するようになります。
修正がリリースされるまでの回避策: META-INF/plexus/components.xml に Maven 3/Plexus の登録を残し、カスタムパッケージング ID を LifecycleMapping コンポーネントとして登録してください。PackagingProvider/TypeProvider のみに依存しないでください。そのディスクリプタを復元した後、エクステンションを再ビルドしてください。これは maven-acr-plugin、maven-rar-plugin、maven-jmod-plugin、および maven-jlink-plugin で使用されるパッケージングに影響します。