SOFABoot 支持创建 Web 和 Core 两种类型的工程。
Web 工程
通常用于需要 Web 页面展现的应用。当用该工程类型开发一个 Web 程序时,相当于“基于 Spring Boot 的 Web 应用 + SOFA 中间件”进行开发。
结合中间件 SOFAREST 服务,可提供基于 JAX-RS(Java API for RESTful Web Services) 标准的前后端分离解决方案。
Core 工程:通常用于实现无页面展现的后端服务。当使用 SOFABoot 开发一个 J2SE 程序(无 Web 页面访问),相当于“基于 Spring Boot 的非 Web 应用(无 servlet 依赖)+ SOFA 中间件” 进行开发。
下文将向您介绍如何创建工程,并对已创建工程的结构进行说明。
如何创建工程
本部分将向您介绍如何在本地使用 Maven 工具创建 SOFABoot Web 工程和 Core 工程。在开始创建前,请务必参考 前置条件,完成工程运行前的准备工作。
前置条件
为执行本文代码示例,您需要首先搭建 SOFABoot 的运行环境。具体步骤详见 搭建环境。
操作步骤
以操作系统管理员身份打开命令行工具,定位到需要创建工程的目录,并运行以下命令:
如果使用的是 Maven 默认安装目录下的
settings.xml
,且已按照 搭建环境 中的要求,对原settings.xml
进行了覆盖操作,则使用下述 Maven 命令进行创建。Web 工程:
mvn archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-web-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
Core 工程:
mvn archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-core-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
如果使用的是 Maven 自定义安装目录下的
settings.xml
,且已按照 搭建环境 中的要求,对原settings.xml
进行了覆盖操作,则使用下述 Maven 命令进行创建。Web 工程:
mvn -s "custom_settings_path" archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-web-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
Core 工程:
mvn -s "custom_settings_path" archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-core-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
重要使用自定义路径下的
settings.xml
时,请勿直接复制 Maven 命令,请把 “custom_settings_path” 替换为真实的文件路径,例如:"C:\apache-maven-3.3.3\conf\settingsXXX.xml"
。
在执行过程中,会提示您输入以下信息,可根据实际情况进行配置:
groupId
:是工程在 Maven 仓库中的唯一标识,一般为公司域名或组织域名的反写,如:com.yourCompanyName.sofa
。重要请按照开发规范创建自己的 groupId,避免在扫描配置时出现问题。
artifactId
:表示项目名称或应用名称,如:web-app
或core-app
。version
:版本号。默认为1.0-SNAPSHOT
。SNAPSHOT 意为快照,说明该项目还在开发中,是不稳定的版本。此处可维持默认值。package
:应用包名。此处可不填。说明groupId、artifactId、version 三个元素生成了一个 Maven 项目的基本坐标。
完成以上配置后,会向您再次确认信息。
输入 Y,表示确认,继续安装;
输入 N,表示取消,重新定义以上属性。
属性定义完成后,工程创建会继续进行。当看到以下信息时,表示工程创建完成。
[INFO]------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO]------------------------------------------------------------------------ [INFO]Total time:28.298 s [INFO]Finished at:2018-01-10T23:36:19+08:00 [INFO]FinalMemory:15M/163M [INFO]------------------------------------------------------------------------
请移步 版本说明,查看最新的 SOFABoot 版本,然后在步骤 1 中定位的目录中查看新建的工程文件夹(以 artifactId 命名),然后在工程根目录下的主 pom.xml 中,修改
<parent>
标签的版本号,示例如下:
工程结构说明
对于上面所创建的两种 SOFABoot 两种工程的目录结构,现说明如下:
为了便于理解目录结构,本文通过示例进行说明。示例工程所使用的依赖信息如下:
groupId:com.alipay.sofa
artifactId:APPNAME
Web 工程原型目录
Web 工程模型默认生成 endpoint
和 web
两个模块:
endpoint
模块:SOFAREST 的服务模块,对外提供 SOFAREST 服务。web
模块:包含 main 函数的启动模块,可以直接运行。另外,还包含全局配置文件、测试模块和静态资源等。
使用 Maven 命令创建的 Web 工程目录结构如下:
├── app
│├── endpoint
││├── pom.xml
││└── src
││└── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││└── endpoint => SOFAREST 实践代码
│││├── constants
││││├──RestConstants.java
││││└──URLConstants.java
│││├── exception
││││├──CommonException.java
││││└──SofaRestExceptionHandler.java
│││├── facade
││││└──SampleRestFacade.java
│││├── filter
││││└──CommonContainerResponseFilter.java
│││├── impl
││││└──SampleRestFacadeRestImpl.java
│││├── model
││││└──DemoUserModel.java
│││└── response
│││├──AbstractFacadeResp.java
│││└──RestSampleFacadeResp.java
││└── resources
││└── META-INF
││└── APPNAME
││└── APPNAME-endpoint.xml
│└── web
│├── pom.xml
│└── src
│├── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││└──Slite2WebSpringBootApplication.java =>启动函数
││└── resources
││├── META-INF
│││└── APPNAME =>Spring配置文件存放处,放到指定的 APPNAME 目录下
│││└── APPNAME-web.xml
││├── config =>配置目录,详见「配置解决方案」
│││└── application.properties =>应用的日志配置文件
│││└── application-dev.properties
│││└── application-test.properties
││├── logback-spring.xml =>应用的日志配置文件
││└──static=> WEB 工程的静态页面存放处
││└── index.html
│└── test =>应用的测试模块,内置启动了SpringBoot,方便业务测试
│└── java
│└── com
│└── alipay
│└── APPNAME
│└── web
│└── test
│├──base
││└──AbstractTestBase.java
│└── usercases
│└──SofaRestServiceTest.java
└── pom.xml =>应用的Maven配置文件
默认情况下,静态页面都存放至
src/main/resources/static
目录下以进行统一管理。SOFABoot 的全局属性配置解决方案和日志配置解决方案,请参考 SOFABoot 技术栈的 技术栈使用指南。
应用的测试模块,在
web
模块的src/test/java
目录下,测试用例包含一个测试基类(base)和一个测试类(usercases),测试类中启动了 Spring Boot 进行 SOFAREST 的简单功能测试。
Core 工程原型目录
根据实际应用名称,Core 工程模型会默认生成 {APPNAME}-facade
和 {APPNAME}-service
两个模块:
facade
模块:定义应用的接口依赖包。service
模块:包含 main 函数的启动模块,可以直接运行。另外,还包含全局配置文件和测试模块。以groupId=com.alipay.sofa
、artifactId=APPNAME
为例,使用 Maven 命令创建的 Core 工程目录结构如下:
├── APPNAME-facade
│├── pom.xml
│└── src =>当前应用用于分发给其他应用的接口依赖包
│└── main
│└── java
│└── com
│└── alipay
│└── APPNAME
│└── facade
│└──SampleService.java
├── APPNAME-service
│├── pom.xml
│└── src
│├── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││├──Slite2SpringBootAPPNAMEApplication.java =>启动函数
│││└── service
│││└──SampleServiceImpl.java
││└── resources
││├── META-INF
│││└── APPNAME =>Spring配置文件存放处,放到指定的 APPNAME 目录下
│││└── APPNAME-service.xml
││├── config =>配置目录,详见「配置解决方案」
│││├── application-dev.properties
│││├── application-test.properties
│││└── application.properties
││└── logback-spring.xml =>应用的日志配置文件
│└── test =>应用的测试模块,内置启动了SpringBoot方便业务测试
│├── java
││└── com
││└── alipay
││└── APPNAME
││└── test
││├──base
│││└──AbstractTestBase.java
││└── usercases
││└──BeanTest.java
│└── resources
│└── test
│└── META-INF
│└── APPNAME
│└── test.xml
└── pom.xml =>应用的Maven配置文件
SOFABoot 的全局属性配置解决方案和日志配置解决方案,请参考 SOFABoot 技术栈的 技术栈使用指南。 应用的测试模块,在 service
模块的 src/test/java
目录下,测试用例包含一个测试基类(base)和一个测试类(usercases)。测试类中启动了 Spring Boot 进行 bean 的简单功能测试。