开发步骤

本节将详细介绍开发者基于ablecloud提供的服务框架,快速开发自定义后端服务(UDS)和云端定时任务的流程:两者的开发流程是完全一致的。通过本节,你将掌握利用ablecloud框架进行开发环境搭建、单元测试、集成测试以及服务发布等知识。

服务框架发布库

ablecloud一期发布java版本服务开发框架,其发布目录、文件如下所示

/config
    /cloudservice-conf.xml
/lib
    /ablecloud-framework-1.0.0.jar
    /commons-collections-3.2.1.jar
    /commons-configuration-1.10.jar
    /commons-lang-2.6.jar
    /slf4j-api-1.7.7.jar
    /...
start.sh
start.cmd

注:所有依赖的第三方jar包,均放在lib文件夹下。其核心jar包为ablecloud的服务框架ablecloud-framework-1.0.0.jar。各jar包版本根据ablecloud发行的大版本不同可能不同。

在开发者开发完自定义服务后,需要将自定义服务编译好的jar包也放到ablecloud发布库的lib文件夹下。

本地启动命令

开发者写好服务后,可在本机启动服务进行测试集成或功能测试。

linux下在终端运行如下命令启动服务进行测试:

sh start.sh -m test

windows下在cmd中运行如下命令启动服务进行测试:

start.cmd -m test

注:启动时的参数"-m test"用于测试环境,所依赖的配置项如域名/版本等信息从config目录下的cloudservice-conf.xml配置文件中读取,开发者可以修改配置文件中的内容以适应测试环境。正式线上环境,开发者不用关心配置文件以及配置项,域名/版本等所有的信息均由框架自动获取并填充。

开发环境设置

系统准备

在进行开发前,需要对系统以及环境进行设置。目前框架只支持java语言,因此系统准备基本都是和java相关,如jdk、maven等。

Intellij

  1. 新建工程

    选择新建maven工程,JDK选择正确的版本。

    new project

    选择maven工程

    info

    注意jdk版本选择安装的1.7+ 点击next即可。

    next

    进入下一个页面,根据情况填写groupid/artifactid/version等信息。

    info

    填好后点击next,进入下一步,填写工程名以及存放路径。

    name

    然后点击finish完成新建工程向导。

    finish

    至此,新建工程完成。

  2. 设置工程

    按照步骤1完成了工程的新建,还需对工程属性进行一些设置以方便后续的编译、单测。 点击File -> Project Structure...

    setting

    首先设置工程所使用的JDK版本1.7+和语言级别7.0

    lib

    设置开发服务所要依赖的ablecloud框架包,点击+号,选择下载并解压后的ablecloud开发框架的lib目录即可。 同上,打开Project Structure...,然后选择Libraries,点击右边的+号,选择Java,如下图所示

    lib

    在弹出的对话框中选择下载并解压后的ablecloud中的lib目录,并点击OK

    lib

    回到上一个窗口后再次点击OK确认

    lib

    这个过程中,我们可以对添加的lib库重命名(可选),例如这里重命名为ablecloud-libs。点击OK完成添加。

    lib

    完成上述步骤后,我们将在工程视图里面看到新添加的该目录,如下

    lib)

    至此,开发者开发服务所以来的ablecloud开发框架库添加成功。

  3. 修改pom.xml文件

    下面是一个demo的完整pom.xml文件,如下:

    <?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>com.ablecloud.demo</groupId>
        <artifactId>SmartHome</artifactId>
        <version>1.0.0</version>
    
        <properties>
            <ablecloud.lib.dir>/home/chenpeng/IdeaProjects/ablecloud-framework/target/lib</ablecloud.lib.dir>
        </properties>
    
        <build>
            <plugins>
                <plugin>
                    <!--this plugin and dependency jars are used for testing-->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18.1</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-junit47</artifactId>
                            <version>2.18.1</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <argLine>-Dmode=test</argLine>
                        <additionalClasspathElements>
                            <additionalClasspathElement>${ablecloud.lib.dir}/ablecloud-framework-1.0.0.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/slf4j-log4j12-1.7.7.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/slf4j-api-1.7.7.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/log4j-1.2.17.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/junit-4.11.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/hamcrest-core-1.3.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/commons-configuration-1.10.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/commons-collections-3.2.1.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/commons-lang-2.6.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/commons-logging-1.1.1.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/jetty-all-9.2.10.v20150310.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/jackson-core-2.3.2.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/jackson-annotations-2.3.2.jar</additionalClasspathElement>
                            <additionalClasspathElement>${ablecloud.lib.dir}/jackson-databind-2.3.2.jar</additionalClasspathElement>
                        </additionalClasspathElements>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>UTF-8</encoding>
                        <compilerArguments>
                            <extdirs>${ablecloud.lib.dir}</extdirs>
                        </compilerArguments>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    完整拷贝该示例pom.xml文件内容,其中绝大部分内容都无须修改,开发者仅需修改如下几个配置项即可:

    <project>
        <groupId>your service group id</groupId>
        <artifactId>your service artifact id</artifactId>
        <version>your service version</version>
        <properties>
            <ablecloud.lib.dir>unzipped ablecloud lib dir where you put</ablecloud.lib.dir>
        </properties>
    </project>
    

    注意以下配置项一定不能修改,否则单测将无法通过。开发者不用担心该配置项,线上环境该配置项自动失效。 -Dmode=test

  4. 修改配置文件

    配置文件位于ablecloud发行库的config文件夹下,名字为cloudservice-conf.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <developer>
            <id>4</id>
        </developer>
    
        <authentication>
            <access-key>33df24a54054067e80af49d939b429c2</access-key>
            <secret-key>5e2fec3440e23c5e807910b13b672015</secret-key>
            <timeout>5000</timeout>
        </authentication>
    
        <framework>
            <router>192.168.1.126:5000</router>
        </framework>
    
        <service>
            <name>SmartHome</name>
            <class>com.ablecloud.demo.DemoService</class>
            <port>1234</port>
            <major-domain>ablecloud</major-domain>
            <sub-domain>demo</sub-domain>
            <major-version>1</major-version>
            <minor-version>0</minor-version>
            <patch-version>0</patch-version>
        </service>
    </configuration>
    

    注:开发者id,access-key,secret-key等信息,均能通过登录ablecloud测试环境的web console获取。 除了service.class配置项在测试环境和线上环境均生效外,所有的其它配置项只在测试环境有效。线上服务将忽略配置文件中的配置项。

  5. 编译单测

    在IDE的终端(terminal)或系统终端中运行命令mvn package即可完整的执行编译、单元测试(如果写了单测代码的话)。

  6. 本地运行

    如果编译、单测都没有问题,则将编译出来的服务jar包(在服务工程主目录下的target/lib目录下)拷贝到ablecloud框架的lib目录下,在ablecloud的框架主目录执行ablecloud提供的脚本sh start.sh -m teststart.cmd -m test,即可在您的开发机上启动您编写好的服务程序。

    注:在本机上运行服务测试时必须加-m test参数,否则无法启动服务。服务启动所需的参数,如域名、版本、端口等信息均在xml的配置文件中设置。

  7. 提交到平台

    将你编译好的服务jar包(位于你服务代码主目录下的target/lib文件夹中,如~/SmartHome/target/lib/SmartHome-1.0.0.jar)放入ablecloud框架的lib目录下,然后将ablecloud的config目录、lib目录、start.sh打成zip包,通过ablecloud的web平台提交。

Eclipse

  1. 新建工程

    选择File-->New-->Project...

    new project

    选择maven工程

    new project

    点击Next进入下一步

    next

    填写groupId,artifactId,version等信息,并点击Finish完成新建工程。

    info

  2. 设置工程 在工程视窗右键点击步骤1中新建的工程进行工程设置。或者点击菜单栏Project-->Properties进行设置

    setting

    首先设置工程对ablecloud发行库的依赖。如图选择Java Build PathLibaries标签页,点击Add Library...

    setting

    Add Library页选择User Library

    setting

    继续点击User Libraries...按钮

    setting

    然后点击New...新建一个用户library文件夹

    setting

    这里可以给该用户lib重命名,如图中命名为ablecloud-libs,点击OK完成

    setting

    回到User Libraries页面,点击右方的Add External JARs...按钮,选择下载并解压的ablecloud发行库中的lib目录,将该目录中所有的jars添加到新建的user library中。

    setting

    勾选上新建的user library,并点击Finish将ablecloud的jars添加到新建的工程中。

    setting

    下面进行java语言的设置,类似上面的设置,先进入Properties窗口,选择Java Compiler去掉默认的Use compliance from execution environment...,并且选择Compiler compliance level1.7

    setting

  3. 修改pom.xml文件

    intellij章节

  4. 修改配置文件

    intellij章节

  5. 编译单测

    TBD

  6. 本地运行

    intellij章节

  7. 提交到平台

    intellij章节