一、简介
原型提供了一种很好的方式,可以以与您的项目或组织采用的最佳实践一致的方式快速启用开发人员。在 Maven 项目中,我们使用原型来尝试让我们的用户尽快启动并运行,方法是提供一个示例项目来演示 Maven 的许多特性,同时向新用户介绍 Maven 采用的最佳实践。在几秒钟内,一个新用户就可以拥有一个工作的 Maven 项目,作为一个跳板来研究 Maven 中的更多功能。更多
二、快速入门
2.1、项目创建
通过maven官方提供的用来生成Archetype模板项目的Archetype (了解结构可以手动创建)
mvn archetype:generate -DgroupId=[your project's group id] -DartifactId=[your project's artifact id] -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-archetype
2.2、项目结构
archetype
│ pom.xml
└─src
├─main
│ └─resources
│ ├─archetype-resources
│ │ │ pom.xml
│ │ │
│ │ └─src
│ │ ├─main
│ │ │ └─java
│ │ │ App.java
│ │ │
│ │ └─test
│ │ └─java
│ │ AppTest.java
│ │
│ └─META-INF
│ └─maven
│ archetype-metadata.xml
│
└─test
└─resources
└─projects
└─it-basic
archetype.properties
goal.txt
Archetype模板项目同样是一个maven项目,archetype模板项目必须要包含以下文件:
- pom.xml
- archetype-metadata.xml
- archetype-resources/
- archetype模板项目的pom.xml跟普通maven项目一样,也需要设置groupId、artifactId、version、packaging等元素。
2.3 项目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>cn.meshed.archetype</groupId>
<artifactId>spring-boot-archetype</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-archetype</packaging>
<name>Archetype - spring-boot-archetype</name>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.0.1</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.4 Archetype描述文件
META-INF/maven/archetype-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<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"
name="${artifactId}">
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
</fileSet>
<fileSet filtered="true" packaged="true">
<directory>src/test/java</directory>
</fileSet>
</fileSets>
</archetype-descriptor>
fileSets是该文件核心元素,fileSets可以包含一个或多个fileSets,其中directory目录元素最终会指向archetype-resources/目录下的子目录。
fileSet两个属性filtered和packaged。
-
filtered表示是否对directory指定的目录中的文件应用属性替换,比如src/main/java目录下的App.java这个文件,其中使用了String name =“${X}”;这样一段代码,然后开发者通过命令或者eclipse从该archetype模板项目导出骨架项目的时候会输入X的具体替换内容,最终导出后name的值就是你所替换的内容。 -
packaged表示是否将该目录下的内容放到生成项目的包路径下。比如开发者从该archetype模板项目导出骨架项目的时候,设置package=com.start.archetype,如果package=true,那么最终生成的项目目录为src/main/java/com/start/archetype/App.java,反之目录为src/main/java/App.java。一般对于java文件设置为package=true,对于properties等配置文件设置为package=false。 -
参考Archetype-Descriptor教程。
代码模板
package $package;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
$package 会替换成创建的项目具体包
实战
代码见 仓库 (一个一个粘贴太麻烦了)
基本项目
仓库中 springboot-demo 是一个最基础的项目 根据上面的基础例子,尝试对demo项目做成模板: spring-boot-archetype
导出骨架项目
格式
mvn archetype:generate \
-DarchetypeGroupId=<archetype-groupId> \
-DarchetypeArtifactId=<archetype-artifactId> \
-DarchetypeVersion=<archetype-version> \
-DgroupId=<my.groupid> \
-DartifactId=<my-artifactId>
例如
mvn archetype:generate \
-DarchetypeGroupId=cn.meshed.archetype \
-DarchetypeArtifactId=spring-boot-archetype \
-DarchetypeVersion=1.0-SNAPSHOT \
-DgroupId=cn.meshed.springboot \
-DartifactId=springboot \
-Dversion=1.0-SNAPSHOT
多模块项目
如果不满足普通项目,多模块可以参考此案例 多模块demo:spring-multi-module-demo 项目:spring-multi-module-archetype
mvn archetype:generate \
-DarchetypeGroupId=cn.meshed.archetype \
-DarchetypeArtifactId=spring-multi-module-archetype \
-DarchetypeVersion=1.0-SNAPSHOT \
-DgroupId=cn.meshed.springboot \
-DartifactId=multi-module-test \
-Dversion=1.0-SNAPSHOT
多模块参考: cola-archetypes
|