在JavaWeb的开发中,由于需要用到很多的包,所以出现了一种专门对包进行管理和下载的工具,成为自动化构建工具。在Java 平台,自动化构建工具的发展经历了Make ==> Ant ==> Maven ==> Gradle(最新)。 本文以maven为研究对象,探究基于Maven工具构建的Java项目的基本目录结构,以及官方所提供的一些maven项目模板。
1. 基于Maven的基本项目目录
Maven默认约定了一套目录结构,在通过Maven创建了项目以后,项目的目录结构就是以这套目录结构作为模板创建的。虽然Maven提供了很多的模板,但是基本的目录结构都是固定的。如下所示。
${basedir}
|-- pom.xml
|-- src
| |-- main
| | -- java
|| com.xxx.xxx 项目源码
| | `-- resources
|| 项目配置文件 .xml等
| | `-- filters
| | `-- test
| | `-- java
| | `-- resources
| | `-- filters
在使用maven来创建的项目,默认会自动创建src/main/等级别的结构。其中各个目录所存放的内容如下:src/main/java 项目的源代码所在的目录
src/main/resources 项目的资源文件所在的目录
src/main/filters 项目的资源过滤文件所在的目录
src/main/webapp 如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。
src/test/java 测试代码所在的目录
src/test/resources 测试相关的资源文件所在的目录
src/test/filters 测试相关的资源过滤文件所在的目录
2. 基于Maven模板构建的三种常见Java项目
新建Maven project项目时,需要选择archetype。archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。原型将帮助作者为用户创建Maven项目模板,规范了项目的结构。根据所创建项目的不同,常见的三种模板有:maven-archetype-quickstart
maven-archetype-webapp
cocoon-22-archetype-webapp
2.1 maven工程样例 maven-archetype-quickstart 目录结构
使用idea,基于maven-archetype-quickstart模板,创建一个名为quickStart的项目之后,得到的目录如下所示:
默认的Archetype,基本内容包括:一个包含junit依赖声明的pom.xml
src/main/java主代码目录及一个名为App的类
src/test/java测试代码目录及一个名为AppTest的测试用例。
从上图的结构分析可知,该模板适用于简单的Java项目,且没有相关的resources文件夹,说明此模板用于简单类的使用。如果涉及到相关配置文件,需要自定义资源文件夹,并指定为Resource。
2.2 maven工程样例 maven-archetype-webapp
使用idea,基于maven-archetype-quickstart模板,创建一个名为webapp的项目之后,得到的目录如下所示:
一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:一个packaging为war且带有junit依赖声明的pom.xml
src/main/webapp/目录
src/main/webapp/index.jsp文件
src/main/webapp/WEB-INF/web.xml文件
从上面的分析可知,该目录结构中,在src下,仅仅含有一个webapp的目录,其中的内容是前端的内容。如果需要写Java后端的代码,只需在main目录下,创建java/com.xxx.xxx.controller等相关目录结构即可。
2.3 maven工程样例 cocoon-22-archetype-webapp
使用idea,基于cocoon-22-archetype-webapp模板,创建一个名为cocoonWebapp的项目之后,得到的目录如下所示:
一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:一个packaging为war的pom.xml
src/main/webapp/resources目录
src/main/webapp/WEB-INF目录
src/main/webapp/WEB-INF/applicationContext.xml文件
src/main/webapp/WEB-INF/log4j.xml文件
src/main/webapp/WEB-INF/web.xml文件
通过上面的分析可知,该模板提供了webapp中常见的resource文件夹,用于放置配置文件。以及在webapp中常见的一些配置文件,如日志配置文件log4j.xml,Spring的配置文件applicationContext.xml以及web工程的配置文件web.xml。基于该模板开发,相关Java代码可以在src/main目录下,新建java/com/xxx/xxx结构的目录即可。
3. Maven 的41种骨架功能介绍
Maven 的41种骨架:
1: internal -> appfuse-basic-jsf (创建一个基于Hibernate,Spring和JSF的Web应用程序的原型)
2: internal -> appfuse-basic-spring (创建一个基于Hibernate,Spring和Spring MVC的Web应用程序的原型)
3: internal -> appfuse-basic-struts (创建一个基于Hibernate,Spring和Struts 2的Web应用程序的原型)
4: internal -> appfuse-basic-tapestry (创建一个基于Hibernate, Spring 和 Tapestry 4的Web应用程序的原型)
5: internal -> appfuse-core (创建一个基于 Hibernate and Spring 和 XFire的jar应用程序的原型)
6: internal -> appfuse-modular-jsf (创建一个基于 Hibernate,Spring和JSF的模块化应用原型)
7: internal -> appfuse-modular-spring (创建一个基于 Hibernate, Spring 和 Spring MVC 的模块化应用原型)
8: internal -> appfuse-modular-struts (创建一个基于 Hibernate, Spring 和 Struts 2 的模块化应用原型)
9: internal -> appfuse-modular-tapestry (创建一个基于 Hibernate, Spring 和 Tapestry 4 的模块化应用原型)
10: internal -> maven-archetype-j2ee-simple (一个简单的J2EE的Java应用程序)
11: internal -> maven-archetype-marmalade-mojo (一个Maven的 插件开发项目 using marmalade) 12: internal -> maven-archetype-mojo (一个Maven的Java插件开发项目)
13: internal -> maven-archetype-portlet (一个简单的portlet应用程序)
14: internal -> maven-archetype-profiles (基本轮廓,和maven-archetype-quickStart类似)
15: internal -> maven-archetype-quickstart (Maven工程样例)
16: internal -> maven-archetype-site-simple (简单的网站生成项目)
17: internal -> maven-archetype-site (更复杂的网站项目)
18: internal -> maven-archetype-webapp (一个简单的Java Web应用程序)
19: internal -> jini-service-archetype (Archetype for Jini service project creation)
20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (无残留) 原型)
22: internal -> softeu-archetype-jsf (JSF+Facelets 原型)
23: internal -> jpa-maven-archetype (JPA 应用程序)
24: internal -> spring-osgi-bundle-archetype (Spring-OSGi 原型)
25: internal -> confluence-plugin-archetype (Atlassian 聚合插件原型)
26: internal -> jira-plugin-archetype (Atlassian JIRA 插件原型)
27: internal -> maven-archetype-har (Hibernate 存档)
28: internal -> maven-archetype-sar (JBoss 服务存档)
29: internal -> wicket-archetype-quickstart (一个简单的Apache Wicket的项目)
30: internal -> scala-archetype-simple (一个简单的scala的项目)
31: internal -> lift-archetype-blank (一个 blank/empty liftweb 项目)
32: internal -> lift-archetype-basic (基本(liftweb)项目)
33: internal -> cocoon-22-archetype-block-plain ([http://cocoapacorg2/maven-plugins/])
34: internal -> cocoon-22-archetype-block ([http://cocoapacorg2/maven-plugins/])
35: internal -> cocoon-22-archetype-webapp ([http://cocoapacorg2/maven-plugins/])
36: internal -> myfaces-archetype-helloworld (使用MyFaces的一个简单的原型)
37: internal -> myfaces-archetype-helloworld-facelets (一个使用MyFaces和Facelets的简单原型)
38: internal -> myfaces-archetype-trinidad (一个使用MyFaces和Trinidad的简单原型)
39: internal -> myfaces-archetype-jsfcomponents (一种使用MyFaces创建定制JSF组件的简单的原型)
40: internal -> gmaven-archetype-basic (Groovy的基本原型)
41: internal -> gmaven-archetype-mojo (Groovy mojo 原型)
总结
本文以Maven工具,这种基于Java平台的自动化构建工具为引子,介绍了Maven标准下的Java项目基本结构,然后介绍了常见的三种Maven模板创建的目录结构,最后简要介绍了其它的四十一中常见的模板目录。