#author("2023-05-01T10:01:41+09:00","default:irrp","irrp")
#author("2023-07-03T21:39:50+09:00","default:irrp","irrp")
→開発支援ツール

→Java関連開発ツール

→Spring Framework関連

→CI/CD

#contents

*基本的な用語 [#w7a40626]
-ビルドライフサイクル
--以下の3つがある
---clean: ビルドした成果物を削除する
---default: デプロイまでを行う
---site: サイトドキュメントを生成する
--各ライフサイクルは複数のフェーズで構成される
--[[Mavenのビルドライフサイクル>https://qiita.com/kawakawaryuryu/items/96db58fb9a607973eca0]] 2019.1

-フェーズ
--defaultライフサイクルのフェーズの例:validate,initialize,compile,test-compile,test,package,verify,install,deploy 

-プラグイン…Mavenの各フェーズで実行する具体的な処理のこと
-- Java のソースコードをコンパイルするための処理は maven-compiler-plugin によって提供されている。 https://maven.apache.org/plugins/maven-compiler-plugin/
--[[Available Plugins>https://maven.apache.org/plugins/index.html]]

-ゴール…各プラグインが持つ特定の処理(をその目的で表現したもの?)。1つのプラグインが複数のゴールを持つことがある
--例:コンパイラプラグインのゴール>https://maven.apache.org/plugins/maven-compiler-plugin/plugin-info.html
--フェーズとゴールの紐付けは、プラグインの設定の中で <execution> で行う

-アーキタイプ…プロジェクトをひな形から自動生成する仕組み

-Nexus…プライベートなリモートリポジトリを構築するのに使えるOSSのリポジトリサーバ
--[参考][[7.2. NEXUSによるMavenリポジトリの管理 &#8212; TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation>https://terasolunaorg.github.io/guideline/public_review/Appendix/Nexus.html]] 2023.4


*POM [#r4072a8e]
-POM…Project Object Modelの略。Maven の設定を持つXMLファイル。
-POMは複数のファイルで親子関係を持てる。
--最上位のPOM を Super POM と呼ぶ。子POMに無い情報は親POMから引き継がれる
-GAV情報…Mavenで管理するプロジェクト情報の基本的な要素。グループ、アーティファクト、バージョン
--グループID…プロジェクトが属する組織や上位プロジェクト
--アーティファクトID…プロジェクトを識別する名前
--バージョン
-グループ+アーティファクトでプロジェクトが特定され、さらにバージョンで断面を特定する。
-バージョンは開発中バージョン(SNAPSHOT)とリリースバージョン(SNAPSHOT以外)に分かれる。
--バージョン番号につけるサフィックス-SNAPSHOTは「開発中であり、今後内容が変わる可能性がある」ことを表す
--SNAPSHOTがついていないものはリリース版であり、基本的には変更されないことを表す
--SNAPSHOT云々は慣例であって、システム的に制限があるわけではない

-プロジェクトの完全修飾名… <groupId>:<artifactId>:<version>
-親子関係をマージ後のPOM(実効POM)は maven-help-plugin の effective-pom ゴールを指定するとみられる。

-依存関係の定義を親にまとめるには、 <dependencyManagement> を使用する
-プロジェクトを集約するには、集約元となるプロジェクトで <modules> を使用する

-maven-dependency-plugin の tree ゴール を実行すると、この推移的な依存関係を含めたすべての依存関係をツリー構造のグラフで確認できる
 mvn dependency:tree

-ビルド環境によって pom.xml の内容を切り替えたい(特定のプラグインを有効にしたり、設定値を変更したり)場合に、プロファイル(Profile)という仕組みが使える
--プロファイルごとに、プロパティや依存関係、 project.build.directory の設定を変えられる。
--JDKのバージョンやOSを条件にプロファイルを切り替えることができる
--mvn help:all-profiles で使えるプロファイルが見られる

** 依存関係とスコープ [#u910d9db]
-[[Mavenの依存範囲>https://www.codeflow.site/ja/article/maven-dependency-scopes]]
-[[Mavenのscopeに何を書いたら良いのかわからなかったので調べてみた>https://qiita.com/tao829/items/6df8a763229a26c2acbc]] 2019.12
-依存関係にはスコープを設定できる。スコープとは、その依存関係を使用する範囲
-compile スコープに指定されている依存関係は、ソースコードをコンパイルするときからアプリケーションを実行するときまで、常に使用することを表している
-test スコープが指定されている依存関係は、テストコード(src/test/java)のコンパイルとテストの実行時にだけ使用することを表している
-スコープは、次の6種類存在する
    compile
    provided
    runtime
    test
    system
    import



* Tips [#z8070a8d]
-[[今さら聞けないMaven &#8211; 実行オプションの固定化 | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2023/04/30/maven-option-fixation/]] 2023.4

-[[今さら聞けないMaven &#8211; コンテナのビルドと一緒にpushもMavenでしたい。 | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2023/03/02/docker-push-with-maven/]] 2023.3

-[[spring mvc - Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer -Maven Configuration Problem Any solution? - Stack Overflow>https://stackoverflow.com/questions/68397062/could-not-initialize-class-org-apache-maven-plugin-war-util-webappstructureseria]]
--build plugin が古いとこのメッセージが出る模様

-[[JPA project updateがやたら出てきて重い>https://stackoverflow.com/questions/7359800/how-do-i-stop-jpa-facet-on-eclipse-from-updating-all-the-time]]
--try on menu Window >> Preferences >> Maven >> Java EE Integration
--disable the "JPA Configurator" option.


-[[Mavenで差分コンパイルできない>https://himeji-cs.jp/wiki/Java]] 2019
--<useIncrementalCompilation>false</useIncrementalCompilation> を設定することで、本来この機能に期待されている *賢い* インクリメンタルコンパイルが行われなくなる。 (この賢いインクリメンタルコンパイル機能がバグっているため、全ファイル変更されたと見なされているのが現状。) 


-Setting.xml 	
--Eclipseの場合、デフォルトでは下記の場所にある。(Preference参照)
--C:\Users\<UserName>\.m2
--コンソール版では conf フォルダの下にあります。

-[[プロジェクトの作成>http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2-2/]]
-[[コンパイル>http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2-3/]]
--メモ:mvn compileのコマンドはsampleフォルダに移ってから打つ
--するとsampleフォルダの下に target\classesができる

-コンパイラ準拠に関するエラーが出る場合 2021.11
--&ref(コンパイラ準拠問題.png);
 指定されたコンパイラー準拠は 1.5 ですが、JRE 17 が使用されています
 ビルド・パスは実行環境 J2SE-1.5 を指定しています。この環境と厳密に互換性のあるワークスペースにインストールされた JRE がありません。 
--pomに下記のような設定をすると消える (Maven超入門より)ワーニングなので無視してもよい
 <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <java.version>1.8</java.version>
 </properties>
 
 <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     < artifactId>maven-compiler-plugin</artifactId>
     <version>3.6.1</version>
         <!-- ここでJavaのバージョンを設定する -->
     <configuration>
         <source>${java.version}</source>
         <target>${java.version}</target>
     </configuration>
 </plugin> 	

-[[Azure Cloud Shell で Maven 3.6 を Java 11 で動かしてみる | DevelopersIO>https://dev.classmethod.jp/articles/azure-cloud-shell-maven-3-6-java-11/]] 2022.5


* 入門・参考になる記事 [#q0cb6723]
-[[【超初心者向け】Maven超入門>https://qiita.com/tarosa0001/items/e5667cfa857529900216]] 2018.11

-[[Mavenの基本勉強メモ>https://qiita.com/opengl-8080/items/bb32732f9aa5cb3495d2]] 2020.4

-[[Maven解説>http://www.techscore.com/tech/ApacheJakarta/Maven/1.html]]
--Maven は Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、プロジェクトのライフサイクル全体を管理します。プロジェクトのビルドツールである Ant とは異なり、Maven はプロジェクト管理ツールとして、プロジェクトに関する色々な情報を POM に集約し、POM の情報に基づきプロジェクト全体を管理します。
--プロジェクトの依存するライブラリの管理。
--プロジェクト情報の配信。(サイトの作成、配備やユニットテストのレポートなど)
--プロジェクトの作成からコンパイル、テスト、パッケージング、配備などのプロジェクトのライフサイクルに含まれる各タスクの支援。

-[[Maven入門>http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2/]]
--リモートリポジトリとローカルリポジトリは、どちらもプラグインやライブラリが置かれる場所です。 Maven は必要なプラグインやライブラリをリモートリポジトリからダウンロードし、それをローカルリポジトリに保存します。そして、各プロジェクトはローカルリポジトリに保存されているライブラリを参照します。この仕組みによって、ローカル環境にある全てのプロジェクトの間でライブラリを共有することができます。

-[[Mavenビルド@Hishidama>http://www.ne.jp/asahi/hishidama/home/tech/apache/maven/build.html]]



* 公式 [#be4491d0]
-http://maven.apache.org/
-http://maven.apache.org/guides/index.html
-http://maven.apache.org/download.cgi
--インストールはこのページのInstallation Instructionsに従う

-[[Getting Started>https://maven.apache.org/guides/getting-started/index.html]]

-http://maven.apache.org/guides/getting-started/windows-prerequisites.html
--Windowsで動かすときに必要な設定

-[[Maven Repository: Search/Browse/Explore>https://mvnrepository.com/]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS