1、找到模板项目
删掉.idea文件夹
2、在项目目录下执行
mvn archetype:create-from-project
3、找到生成出的模板
cd到target/generated-sources/archetype
4、修改文件
(1)修改你这个archetype的target/generated-sources/archetype/pom.xml
配置
<groupId>com.scipio</groupId>
<artifactId>app-scaffold-archetype</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-archetype</packaging>
<name>app-scaffold-archetype</name>
(2)修改archetype-metadata
在目录target/generated-sources/archetype/src/main/resources/META-INF/maven/atchetype-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor 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" name="app-scaffold"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<requiredProperties>
<requiredProperty key="groupId">
<defaultValue>com.scipio</defaultValue>
</requiredProperty>
<requiredProperty key="artifactId">
<defaultValue>myapp</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.scipio.myapp</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet encoding="UTF-8">
<directory></directory>
<includes>
<include>.gitignore</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module id="${artifactId}-web" dir="app-web" name="app-web">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/webapp</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/webapp</directory>
<includes>
<include>**/*.inc</include>
<include>**/*.js</include>
<include>**/*.ftl</include>
<include>**/*.css</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.sql</include>
<include>**/*.ftl</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory></directory>
<includes>
<include>.gitignore</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${artifactId}-remote-service" dir="app-remote-service" name="app-remote-service">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
(3)修改两个模块的名称,与配置文件的dir对应
比如app-web,app-remote-service
(4)修改母project的pom.xml
在archetype/src/main/resources/archetype-resources/pom.xml
修改名称
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>pom</packaging>
<name>${artifactId}</name>
<url>http://maven.apache.org</url>
配上相应的子模块
<modules>
<module>${artifactId}-remote-service</module>
<module>${artifactId}-web</module>
</modules>
(5)修改子模块的pom.xml
app-remote-service
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${rootArtifactId}-remote-service</artifactId>
<packaging>jar</packaging>
<name>${rootArtifactId}-remote-service</name>
<version>${version}</version>
app-web
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
<relativePath>..</relativePath>
</parent>
<artifactId>${rootArtifactId}-web</artifactId>
<version>${version}</version>
<packaging>war</packaging>
<name>${rootArtifactId}-web</name>
<url>http://maven.apache.org</url>
5、安装
mvn clean package install (本地安装)
mvn clean package deploy (远程安装)
6、本地使用
切换到其他目录(该目录不能有pom.xml文件)
mvn archetype:generate -DarchetypeCatalog=local
选择本地的那个app-scaffold
然后按提示输入变量,artifactId默认是myapp,自己在confirm时按N,然后自己修改
最后就生成出来了
7、部署你的archetype
在arget/generated-sources/archetype目录下
修改pom.xml
在project节点下增加maven服务器
<distributionManagement>
<repository>
<id>scipio-nexus-releases</id>
<name>Scipio Nexus Repository</name>
<url>http://nexus.scipio.com:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>scipio-nexus-snapshots</id>
<name>Scipio Nexus Repository</name>
<url>http://nexus.scipio.com:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
mvn clean package deploy
8、使用该archetype
mvn archetype:generate -DgroupId=com.scipio -DartifactId=myapp -Dpackage=com.scipio.myapp -DarchetypeGroupId=com.scipio -DarchetypeArtifactId=mtapp-scaffold-archetype
参考:
http://numberformat.wordpress.com/2009/11/15/creating-a-new-maven-archetype-and-publishing-it-to-nexus/
http://www.shenyanchao.cn/blog/2013/05/21/use-maven-archetype-to-generate-project-architecture/
http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html