通常来说,公司针对某一类型的业务的技术架构是一致的,采用的技术框架和项目目录结构是规范统一的。如果每次新立项一个项目,都手动去创建同样的项目目录结构,这其实会浪费一些不必要的时间,降低开发效率,而且很容易破坏开发规范。我们知道Maven是一个非常易用方便的依赖管理插件,但其实Maven的作用并非只是依赖管理,其实它还有一个非常有用的功能——创建统一的项目结构骨架以及根据某个骨架生成自定义的项目结构。这样子在新开设一个项目的时候,通过统一的骨架来生成对应初始的项目结构,从而实现代码的规范开发和管理。
1. 使用Maven生成项目骨架
我们先来看一下需要生成的项目的整体目录结构,com/testcampus是我们针对目标项目的包名,一般一个独立的项目对应一个独立的包名,所以我们的骨架必须支持包名的自定义,当然包的路径下可能存在一些统一的类,比如说专门做手机端h5的可能在controller下会固定有一个MobileController来专门负责手机端的请求处理,所以我们的骨架也必须支持自定义类。
1.1 我们来建一个骨架项目
IDEA-->File-->New-->Project-->Maven-->create from archetype-->maven-archetype-webapp
填写骨架的maven配置.png
1.2 创建需要的目录结构
创建项目结构.png
由于包名使用的是自定义参数__ baseDir __(参数前后都是双下线),所以我们的类所在的包名也必须跟着变量而改变,而目录结构的参数形式是com/demo,但是包名的形式是com.demo,所以我们必须使用另外一个变量来定义包名(这里使用的是basePackage作为参数)
1.3 创建默认的类文件
这里需要用到Spring和Spring MVC我们先添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wind</groupId>
<artifactId>archetype-demo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>archetype-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>archetype-demo</finalName>
<plugins>
<plugin><!--配置资源打包方式 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<!--最关键的地方 -->
<configuration>
<includeEmptyDirs>true</includeEmptyDirs>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.4 开始生成骨架
- 打开cmd进入骨架所在目录(D:\work\StudyProjects\archetypedemo),执行命令
mvn clean archetype:create-from-project
创建骨架项目初始命令1.png - 添加构建骨架配置和参数
- 进入项目路径\target\generated-sources\archetype\src\main\resources\META-INF\maven;编辑
archetype-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="archetype-demo"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
<requiredProperties>
<requiredProperty key="basePackage">
<defaultValue>com.testcampus</defaultValue>
</requiredProperty>
<requiredProperty key="baseDir">
<defaultValue>test/testcampus</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" packaged="false" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="false" encoding="UTF-8">
<directory>src/main/java/__baseDir__/controller</directory>
</fileSet>
<fileSet filtered="true" packaged="false" encoding="UTF-8">
<directory>src/main/java/__baseDir__/service</directory>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/webapp</directory>
<includes>
<include>**/*.jsp</include>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>.idea</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>.idea/artifacts</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>.idea/libraries</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory></directory>
<includes>
<include>archetypedemo.iml</include>
</includes>
</fileSet>
</fileSets>
</archetype-descriptor>
- 进入项目路径\target\generated-sources\archetype\src\test\resources\projects\basic;编辑
archetype.properties
文件
#Mon Mar 26 18:53:52 CST 2018
package=it.pkg
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=basic
#配置自定义参数
baseDir=com/googletool
basePackage=com.googletool
- 将项目路径\src下的所有文件复制到项目路径\target\generated-sources\archetype\src\main\resources\archetype-resources\src下
- 删除项目路径\target\generated-sources\archetype下的target目录,然后复制当前目录下的到项目路径下(注意先把项目路径下的所有东西删掉)
- 进入项目目录,执行命令:
mvn clean install
,执行结果看到success表示执行成功
执行结果部分截图.png -
去本地Maven仓库查看,确实存在我们刚刚生成的骨架
本地Maven仓库.png - 测试使用刚生成的骨架来创建项目目录结构
我在骨架项目的同等路径下创建一个test文件夹,我们把生成的项目放到test目录下;cmd进入test目录(D:\work\StudyProjects\test),执行命令:
mvn archetype:generate -B -DarchetypeGroupId=com.wind -DarchetypeArtifactId=archetype-demo-archetype
-DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.testcampus -DartifactId=test-campus-archetype
-Dversion=1.0-SNAPSHOT -DbaseDir=com/testcampus -DbasePackage=com.testcampus -DarchetypeCatalog=local
然后进入test目录下就可以看到生成的项目结构了