Skip to content
lixia edited this page Aug 29, 2014 · 15 revisions

概要说明

以下以我本人实际开发环境为例,简要说明开发环境配置过程,供初学者参考。当然你也完全可以根据熟悉的开发工具和环境可自行参考调整配置。本说明仅对配置过程予以说明,其中涉及到诸如Maven,Git等工具的使用相关请自行通过其他渠道了解。

提示说明: 以下说明和截图以自己平时使用的Ubuntu 14 X64位操作系统环境,Windows和32位系统环境请注意对应调整安装软件版本和相关路径参数等。

特别说明: 由于精力有限目前只对以下描述过程实际验证过,至于其他诸如MyEclipse/IDEA等相关IDE或jetty:run/tomcat:run等运行模式可能存在不确定问题,此类问题无法提供解答指导,请自行分析解决!

JDK:JDK7

目前已知在JDK5/6/7环境顺利运行(注意:在JDK8运行报错),我目前本地是Oracle JDK7,这个安装我想就没必要不多说了。建议安装Oracle JDK,网上说OpenJDK存在一些问题,不过具体没有实际验证过。

dev_cfg_jdk

IDE: Spring Tool Suite 3.6 based on Eclipse 4.X

(Spring Tool Suite)STS3.6参考下载地址: http://spring.io/tools/sts/all ,理论上Eclipse系列IDE应该都能正常导入使用。

STS3.6中基本上预装集成了大部分常用插件,如Spring系列,GIT等,同时还包含一个vfabric-tc-server,直接作为WEB应用开发部署Server,不用再单独下载配置Tomcat了。

初始化一个Workspace,可以根据一些常见优化建议,设置Workspace UTF-8编码,关闭不必要的的Startup,Validation选项等,优化STS启动和工程编译构建时间。

dev_cfg_sts

Apache Maven 3.0.X

Apache Maven目前官方同步发布3.2, 3.1, 3.0系列,估计是互补兼容的要不也不会几个版本同时维护更新。 目前自己本地为maven 3.0.5版本,其他版本未测试过,因此建议安装3.0.X系列Maven。

参考下载地址:http://maven.apache.org/download.cgi 注意滚动到Maven 3.0.5区域。

Maven下载到本地解压后,可根据自己习惯设定本地资源库地址/私服地址等配置。 然后一个步骤是需要在STS中设定指向本地Maven环境,参考如下图:

dev_cfg_maven

从Git资源库Checkout工程代码

根据自己的习惯通过STS的GIT插件或其他如TortoiseGit等工具,从git资源库checkout整个工程代码。OsChina和GitHub两个资源库同步更新,可自行根据访问情况选择,建议优先选择OsChina Git一般会访问更快。当然你如果熟悉SVN,可以选择GitHub支持SVN Checkout方式。各站点的Checkout方式请自行根据站点对应说明文档操作。

工程代码checkout后目录结构参考如图:

dev_cfg_git

将工程代码import到STS的workspace

启动按照前面已指向设定好Maven的STS Workspace,由于整个工程结构按照Maven的parent/module模式的父子目录结构,因此需要以Maven项目方式import导入所有项目,否则如果按照常规的项目导入只会导入parent主目录工程。

菜单或右键选择import..., 然后按照如下图示选择:

dev_cfg_import

然后点击浏览git checkout的s2jh工程主目录,会自动解析出一系列依赖项目列表:

dev_cfg_import

之后点击Finish开始导入项目。期间会进行整个项目的初始化编译构建/Maven资源库的下载初始化等操作,可能耗时较长,请耐心等待。

之后展开s2jh-parent项目,在pom.xml右键选择“Run As.” - > "Maven install", STS将自动编译构建/单元测试/初始化本地资源库,整个依赖项目列表。最终执行成功如下图:

dev_cfg_build

Server配置

STS自带一个基于Tomcat的vfabric-tc-server,可以直接用于开发调试。如下图,工作空间默认就已初始化一个Server配置,如下图双击左侧xml配置文件,最基本的需要添加一个 URIEndoing=“UTF-8”的编码参数,否则get请求会出现中文乱码问题。其余的诸如端口号/JNDI数据源等可根据实际需要修改即可。框架默认配置以H2嵌入数据库运行模式,暂时可以不用配置数据库链接参数等。

dev_cfg_server1

然后在server上面右键选择 Add/Remove..., 把prototype WEB项目加入的server部署:

dev_cfg_server2

初始化Server运行

框架默认配置以H2嵌入数据库运行模式(如果你希望以MySQL数据库运行,参考 MySQL数据库配置说明), 特别注意:首次运行需要设置参数初始化数据库 。如下图,修改对应文件和参数为 jdbc.initialize.database.enable=true

dev_cfg_init

之后启动Server ,查看Console会看到一系列数据库DDL和DML语句,最终启动运行完成大致如下图:

dev_cfg_init

提示:H2数据库以文件方式运行(具体H2数据文件路径可通过在启动日志中搜索“Using H2 EmbeddedFileDatabase:”对应行内容) ,只需初始化一次即可,因此初始化启动之后下次启动Server之前最好改回关闭初数据库始化参数jdbc.initialize.database.enable=false。

如H2文件路径信息:Using H2 EmbeddedFileDatabase: /home/java/h2/prototype, 此/home/java/h2/prototype是文件前缀信息不是目录,其总/home/java/h2才是一个具体文件目录,如果在试用样列应用过程随意乱修改数据把应用搞乱了而希望重新初始化数据库,只需把/home/java/h2目录下所有prototype为前缀的文件删除,并重新设置jdbc.initialize.database.enable=true运行Server即可。

浏览器访问Web应用

启动最新版本的FireFox或Chrome或IE8+浏览器,访问:http://localhost:8080/prototype/ , 出现如下图所示,无需输入登录信息直接点击下方的测试入口admin入口链接即可进入系统主界面:

dev_cfg_signin

开发指南

之后即可参考开发指南部分进行Demo样列功能开发了!

### 参考:MySQL数据库配置说明

框架默认以H2运行模式,考虑到实际情况框架另外再提供了基于MySQL的Profile配置以演示主流数据库配置,其余的数据库支持大同小异,添加相应的JDBC Driver的Maven配置和连接参数修改即可。提示:以下配置和运行在MySQL 5.5.37版本测试通过。

  • MySQL中创建s2jh框架对应数据库,注意必须为UTF-8编码。参考DDL脚本:CREATE DATABASE s2jh DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  • 找到prototype/src/main/resources/context/context-profiles.xml文件中mysql对应的spring profile定义部分,根据实际需要修改:

            <property name="poolProperties">
                <bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
                    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                    <!-- 创建MySQL UTF-8编码数据库脚本:CREATE DATABASE s2jh DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -->
                    <property name="url" value="jdbc:mysql://localhost:3306/s2jh?characterEncoding=utf8" />
                    <!-- 根据实际需要修改相应的用户和密码参数 -->
                    <property name="username" value="root" />
                    <property name="password" value="" />
                </bean>
            </property>
  • 修改prototype/src/main/webapp/WEB-INF/web.xml中spring.profiles.default参数设定为mysql:
    <context-param>
        <param-name>spring.profiles.default</param-name>
        <param-value>mysql</param-value>
    </context-param>
### 参考:关于热部署开发的建议

为了最大化提高开发效率,避免不必要的随时重启开发应用服务器导致的时间浪费,框架尝试了一下maven-tomcat-plugin、 cargo-maven2-plugin、以及jetty-maven-plugin等几种热部署方式,由于框架布局分解成多个项目依赖形式,同时采用了Servlet3.0规范的Embedded Resource模式把一些JS/CSS/Img等静态资源分散在多个project中,也可能是还没有完全掌握更细节的配置选项,目前发现几个插件都无法很好的实现在IDE修改任何代码后能友好的实现热部署更新。

目前已实际验证过本框架最有效的机制是基于JRebel方式实现高效的开发热部署支持,有关JRebel插件的具体安装配置用法请自行网上途径了解。提供一个基本的rebel.xml配置文件参考,其中s2jh.root环境变量可通过系统环境变量/Java启动-D参数等形式设定指向框架git根目录:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

    <classpath>
        <!-- 动态加载并监控当前web项目构建的java编译输出 -->
        <dir name="${s2jh.root}/prototype/target/classes">
        </dir>
        <!-- 动态加载并监控core-service项目构建的java编译输出 -->
        <dir name="${s2jh.root}/core-service/target/classes">
            <exclude name="META-INF/**" />
        </dir>
        <!-- 动态加载并监控common-service项目构建的java编译输出 -->
        <dir name="${s2jh.root}/common-service/target/classes">
            <exclude name="META-INF/**" />
        </dir>
    </classpath>

    <web>
        <!-- 动态加载并监控当前web项目的web资源 -->
        <link target="/">
            <dir name="${s2jh.root}/prototype/src/main/webapp">
            </dir>
        </link>
        <!-- 动态加载并监控assets-resource项目的web资源 -->
        <link target="/">
            <dir name="${s2jh.root}/assets-resource/src/main/resources/META-INF/resources">
            </dir>
        </link>   
        <!-- 动态加载并监控common-service项目的web资源 -->     
        <link target="/">
            <dir name="${s2jh.root}/common-service/src/main/resources/META-INF/resources">
            </dir>
        </link>         
    </web>

</application>

通过此方式,基本可以实现在Eclipse IDE中随意修改JS/JSP/Java等文件内容,如页面逻辑调整/添加实例方法/方法内部逻辑变更等,JRebel会自动重新加载相应代码实现并且无需重启应用Server即可实时看到最新Java代码运行的效果,极大的提高了开发效率。

当然,如果是变更了Spring Bean等一些定义,Hibernate Entity等一些定义,虽然JRebel对此有所支持,只是目前看到的效果此类变动的更新基本上算是重新加载整个容器了,而且很可能存在资源释放异常等问题,因此此类变更建议还不如直接重启应用服务器来的快些。

Clone this wiki locally