Maven
Javaのビルドが遅いと感じる瞬間 Javaという言語は本当に遅いのか MavenやGradleは悪者なのか アノテーション地獄がビルドを重くする テスト設計が最大のボトルネックになる モジュール分割と依存関係の問題 CI環境が足を引っ張るケース 実際に改善するとど…
GradleとMavenの依存解決をざっくり比較 Mavenの依存解決の特徴 依存関係は基本的に固定的 dependencyManagementによる中央管理 Gradleの依存解決の特徴 解決戦略が存在する 動的バージョンとキャッシュ 実際にやるとこうなる:バージョン衝突の例 失敗しが…
Mavenで起きがちな「バージョン地獄」とは何か Mavenの依存解決ルールを最低限理解する 依存関係は「近いもの」が優先される transitive dependencyは自動で入ってくる バージョンを省略すると上位定義に従う バージョン地獄を招く設計パターン 各dependency…
Mavenマルチモジュール構成とは何か 単一プロジェクトとの違い なぜマルチモジュールに分けるのか 依存関係を明示できる ビルドとテストの影響範囲を限定できる よくあるマルチモジュール構成パターン レイヤー別分割 機能別分割 親POMの役割と設計の考え方 …
MavenでBOM(Bill of Materials)とは何か なぜMavenでBOMを使う理由が生まれたのか 依存関係の数は必ず増える transitive dependencyの存在 BOMを使うと何が変わるのか pom.xmlが読みやすくなる バージョン衝突を事前に抑えやすい 複数モジュールでの統一が…
親POMとは何かをざっくり整理する 親POMが嬉しい一番の理由は「重複を消せる」こと 同じ設定を何度も書かなくて済む バージョン管理が楽になる 親POMが効いてくるのは「プロジェクトが育ってから」 小規模なうちは恩恵を感じにくい チーム開発で差が出る dep…
MavenのdependencyManagementとは何か なぜdependenciesだけでは不十分なのか dependencyManagementの基本的な書き方 親pomと組み合わせたときの本領 dependencyManagementを使わない方が楽なケース よくある誤解と失敗例 BOMとの関係 リスクと注意点 結局ど…
先に結論として知っておきたいこと Mavenのスコープとは何か 依存関係に「利用される場面」を与える仕組み compileスコープの役割と特徴 開発・テスト・実行すべてで必要な依存関係 compileを多用しすぎたときに起きがちなこと testスコープの役割と特徴 テ…
Mavenのライフサイクルとは何か defaultライフサイクルの考え方 主要フェーズを言葉で追ってみる validate compile test package verify install deploy 「フェーズを指定する」とはどういう意味か 実際にやるとこうなる例 よくある勘違いと失敗 フェーズを…
フロントエンドとJavaで依存管理が違って見える理由 npm的な感覚で考えると混乱しやすい点 Java依存管理の核心:推移的依存関係 Mavenでの具体例 lockファイルがないことへの不安 実際に現場で起きやすいトラブル ビルドは通るが実行時に落ちる バージョンを…
lockファイルがないJavaは本当に不安なのか なぜJavaにはlockファイル文化が根付かなかったのか 中央集権的なリポジトリの存在 バージョン解決ルールがツール側で安定している 実際にやるとどうなるのか:現場でのリアル 何も指定しないと「じわっと壊れる」…
Mavenキャッシュ(.m2)とは何をしているのか Mavenキャッシュが原因で起きがちな代表的トラブル ビルドが突然失敗するようになった 依存関係を更新したはずなのに反映されない 他の人の環境では通るのに自分だけ失敗する Mavenのエラーメッセージがやたら分か…
Mavenのビルドが突然失敗する最大の理由 ローカルリポジトリ(.m2)が壊れている Maven Centralや社内リポジトリの一時的な不調 snapshot依存が更新されて壊れる Mavenプラグイン周りの落とし穴 プラグインの暗黙アップデート Javaのバージョン差分による失…
POMのSNAPSHOTとは何か なぜSNAPSHOTが存在するのか POMでSNAPSHOTを指定すると実際に何が起きるのか SNAPSHOTを使ってよいケース ローカル開発・個人開発 密に連携する少人数チーム 一時的な検証・実験 SNAPSHOTを避けたほうがよいケース 本番リリースや商…
Mavenのバージョン競合とは何か Mavenはどうやってバージョンを決めているのか 具体例:nearestが招く意外な結果 なぜMavenは自動で解決してくれないのか 実際に起きがちなトラブル dependency:treeを見ずに進む危険性 dependencyManagementが重要な理由 exc…
Maven Centralとは何か なぜMaven Centralが生まれたのか 実際にやるとこうなる:依存関係解決の裏側 Maven Centralと他のリポジトリの違い 失敗しがちなポイント セキュリティと信頼の話 Maven Centralが向いているケース 向いていない、または注意が必要な…
pom.xmlにおけるgroupId / artifactId / versionの役割 Mavenが依存関係を識別する仕組み ファイル名やフォルダ名とは違う概念 groupIdとは何か、どう決めるのか groupIdは「組織」や「所有者」を表す 個人開発・社内ツールの場合の考え方 よくある失敗例 ar…
pom.xmlのdependencyとは何か groupId / artifactId / version の役割 groupIdとは何か artifactIdとは何か versionとは何か Mavenはdependencyをどう解決しているのか 「dependencyを書いたら動く」の裏側 scopeという見落とされがちな重要要素 失敗しがち…
Javaの依存関係とは何かを初心者向けに整理する 依存関係という言葉が分かりにくい理由 Javaは「クラス単位」ではなく「ライブラリ単位」で依存する MavenやGradleで混乱しがちなポイント pom.xmlやbuild.gradleは何をしているのか バージョン指定の意味を理…
「とりあえずMaven」が選ばれ続ける背景 Mavenの基本構造が「困りにくさ」を作っている pom.xmlに集約される設定 ディレクトリ構成がほぼ固定 依存関係管理でハマりにくい理由 中央リポジトリの存在 依存関係の解決ルールが明確 実務でよくある「Mavenで助か…
MavenとGradleの基本的な違い Mavenは「決まりごと重視」のビルドツール Gradleは「柔軟性と表現力」を重視する 実際に使うと感じる違い ビルド速度と開発体験 設定ファイルの読みやすさ Mavenを選ぶときに向いているケース Gradleを選ぶときに向いているケ…
Java初期にパッケージ管理ツールがなかった理由 JAR地獄と呼ばれた時代 Antの登場と限界 Mavenがもたらした転換点 Gradleの登場と柔軟性 Javaにおけるパッケージ管理の注意点 結局どうすればいいのか Javaの開発現場では、今やMavenやGradleといったパッケー…
Javaとパッケージ管理の関係が深い理由 標準ライブラリだけでは足りない現実 ライブラリ同士も依存している パッケージ管理をしないと何が起きるのか クラスパス地獄に陥る 環境差分が原因のバグが増える パッケージ管理ツールが解決すること 依存関係を宣言…
Javaのパッケージ管理とは何か jarファイルそのもの 依存関係の依存関係 バージョン管理で何が起きているのか なぜバージョン固定が必要なのか 曖昧な指定が招く問題 ビルド管理との関係 コンパイル時と実行時の違い 成果物の形を決める 実際にやるとこうな…
pom.xmlに記載したmoduleのパッケージは、全部ビルドされる 子モジュールをビルドした場合は親モジュールはビルドされない pom.xmlに記載したmoduleのパッケージは、全部ビルドされる pom.xmlは、Mavenプロジェクトのビルド、依存関係、プロジェクト情報を管…
mvn installとmvn packageの違い mvn install mvn package まとめ mvn installでもtargetディレクトリは生成されるのか mvn installとmvn packageの違い mvn installとmvn packageは、Mavenビルドツールで実行できる2つのタスクです。 混同されがちですが用…