- 官方文檔地址 lhttp://maven.apache.org/guides/mini/guide-creating-archetypes.htm
單看這個官方文檔,構建一個多moudle archetype還是有點無從下手的,因爲modules 怎麼定義沒詳細說 - 再參考網上其他成功經驗https://blog.csdn.net/qxxiaohui/article/details/82013117 ,結合上面的官方文檔實驗成功
- 下面列一下我的archetype, archetype目錄結構如下
test-archetype 的pom文件, 我這裏參考了官方的寫法
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sendinfo</groupId>
<artifactId>test-archetype</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-archetype</packaging>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.1.1</version>
</extension>
</extensions>
</build>
</project>
.archetype-metadata.xml
文件,記得一定要放在src/main/resources/META-INF/maven/
目錄下, 我就是因爲用idea 創建目錄的時候將目錄創建爲META-INF.maven
在後面的mvn install的時候報錯The current project does not build an archetype.
我的archetype-metadata.xml 文件
其實這個文件可以參考官方文件的地址爲http://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html 這也是我後來才發現的
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="my-archetype">
<requiredProperties>
<requiredProperty key="groupId">
<defaultValue>com.sendinfo</defaultValue>
</requiredProperty>
<requiredProperty key="artifactId">
<defaultValue>test.archetype</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.test.archetype</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module id="${rootArtifactId}-util" dir="__rootArtifactId__-util" name="${rootArtifactId}-util">
<fileSets>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/test/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>pom.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-dal" dir="__rootArtifactId__-dal" name="${rootArtifactId}-dal">
<fileSets>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/test/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>pom.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-core" dir="__rootArtifactId__-core" name="${rootArtifactId}-core">
<fileSets>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
<include>**/*.txt</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="false">
<directory>src/test/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>pom.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
模板定義在src/main/resources/archetype-resources
目錄下,這個就根據你自己需求來定義,其中的變量的含義我參考了https://blog.csdn.net/qxxiaohui/article/details/82013117 的博客
這裏貼一個模板pom示例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${rootArtifactId}-core</artifactId>
<name>${rootArtifactId}-core</name>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-dal</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
</project>
模板包結構定義的注意項, java.xxx.xxxx.core 中間在使用模板時會用package變量連接,索引在使用archetype生成moudle時要指定package變量