Maven Archetypeの作成方法と利用方法
概要
mvn archetype:create-from-package
コマンドで既存のプロジェクトからArchetypeを生成することができるが、
Mavenプロジェクト生成時に指定したPackage名に変更する必要がある。
ソースコードはこちら github.com
Archetypeの生成
1. 既存のMavenプロジェクトから一旦作成
$ mvn archetype:create-from-project
2. ソースファイル内のpackage名の修正
target/generated-sources/archetype/target/classes/archetype-resources/src/main/java/App.java
ファイル内の pacakge Sample
を package ${package}
に変更する
#set( $symbol_pound = '#' ) #set( $symbol_dollar = '$' ) #set( $symbol_escape = '\' ) package Sample; /**
から以下に変更する
#set( $symbol_pound = '#' ) #set( $symbol_dollar = '$' ) #set( $symbol_escape = '\' ) package ${package}; /**
これによってMavenプロジェクト生成時に指定したPackage名に変更される。
Note: ${package} プロパティのデフォルト値を定義できる
生成されたtarget/generated-sources/archetype/target/classes/META-INF/maven/archetype-metadata.xml
ファイルにて
以下のように<requiredProperty>
項目にプロパティの初期値を定義することができる。
<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"> <fileSets> <fileSet filtered="true" packaged="true" encoding="UTF-8"> <directory>src/main/java</directory> </fileSet> </fileSets> <requiredProperties> <requiredProperty key="package"> <defaultValue>${groupId}.${artifactId}.mypackage</defaultValue> </requiredProperty> </requiredProperties> </archetype-descriptor>
3. ローカルリポジトリにインストール
$ cd target/generated-sources/archetype/ $ mvn install
Mavenプロジェクトの生成
$ mvn archetype:generate -DarchetypeCatalog=local -DarchetypeGroupId=io.github.yossan -DarchetypeArtifactId=maven-quickstart-archetype
-DarchetypeCatalog=local
これによってローカルリポジトリからArchetypeを検索するので非常に早くなる-DarchetypeGroupId
既存のプロジェクトから生成した場合、同一-DarchetypeArtifactId
既存のプロジェクトから生成した場合、後ろに-archetype
がくっついているので注意
参考
ソースコード内のPakcage名をMavenプロジェクト生成時に指定した名前に変更する方法
Change package property in Maven Archetype - Stack Overflow
Maven Archetype Descriptor Model – ArchetypeDescriptor
Archetypeにおいて$
は特別な意味を持つため、エスケープする必要がある
Prevent Maven from removing $ (dollar sign) from archetype resources? - Stack Overflow
-DarchetypeCatalog=local
を一緒に指定するとローカルリポジトリ内部での検索となり非常に早くなる
maven archetype:generate does not find archetype in local catalog - Stack Overflow