【Apache OFBiz 系列】手把手教你快速运行OFBiz项目

环境准备

版本选择:最新稳定版本:release17.12.04

操作系统:windows 10

开发工具:ideal

下载源码:

git clone https://gitbox.apache.org/repos/asf/ofbiz-framework.git ofbiz-framework

git checkout release17.12.04

国内镜像:

从git仓库下载速度太慢,别挣扎,请转到国内镜像下载吧,

https://mirrors.tuna.tsinghua.edu.cn/apache/ofbiz/apache-ofbiz-17.12.04.zip 

 

安装步骤

    1. 导入项目

使用Ideal打开项目,导入项目源码

     2. 配置gradle插件版本

Ofbiz的配置文件为:

${ofbiz}/gradle/wrapper/gradle-wrapper.properties

另外从其他的gradle项目中拷贝gradle-wrapper.jar 到${ofbiz}/gradle/wrapper/ 目录

修改distributionUrl的值

Gradle默认缓存地址是 C:\Users\${user}\.gradle\wrapper\dists,如:

 

为了避免重新下载gradle插件提高构建速度,这里将distributionUrl修改为本地已缓存的版本gradle-4.1-all.zip

 

    3. 配置gradle国内仓库

Gradle镜像配置文件:

${ofbiz}/build.gradle

将buildscript节点的repositories改为:

repositories {

        maven{ url 'https://maven.aliyun.com/repository/public' }

    }

将allprojects节点的repositories改为:

repositories{

        maven{ url 'https://maven.aliyun.com/repository/public'}

}

 

    4. 修改数据库配置

Ofbiz默认使用的数据库是内置的derby,这里改为笔者熟悉的数据库mysql

配置文件为:

${ofbiz}/framework/entity/config/entityengine.xml

找到localmysql、localmysqlolap、localmysqltenant三个数据源配置节点,将其以下内容修改为自己所需的配置:

    character-set="utf8mb4"

    collate="utf8mb4_general_ci">   //修改数据库字符配置使其支持emoji表情

    jdbc-uri="jdbc:mysql://xxx.xxx.xxx.xxx:3306/ofbiz?autoReconnect=true&characterEncoding=UTF-8"

    jdbc-username="****"

    jdbc-password="****"     //修改数据库链接及账号密码使其能够访问您的mysql数据库

然后分别修改delegator name="default"节点的三个datasource-name为:localmysql、localmysqlolap、localmysqltenant

 

    5. 创建数据库

在mysql中创建用户:user:ofbiz,password:ofbiz;

创建数据库:ofbiz、ofbizolap、ofbiztenant;

sql语句:

create user 'ofbiz'@'localhost' identified by 'ofbiz';  

create database ofbiz DEFAULT  CHARACTER SET utf8 COLLATE utf8_general_ci;  

create database ofbizolap DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  

create database ofbiztenant DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  

grant all on *.* to 'ofbiz'@'localhost';

flush privileges;  

show grants for 'ofbiz'@'localhost';

 

    6. 清理项目

打开命令行工具,在${ofbiz}项目根目录执行以下命令:

gradlew cleanAll loadDefault

会出现以下错误:

 

解决办法:从报错可以看出是plugins中的birt这个项目依赖名不正确,为了正常运行项目,这里现将org.milyn的依赖从birt中排除,当前阶段不需要使用birt,后续再想办法解决。排除依赖的方法是修改${ofbiz}/plugins/birt/build.gradle文件,增加红色部分内容:

dependencies {

    pluginLibsCompile('org.eclipse.birt.runtime:viewservlets:4.4.1') {

        exclude group: 'org.eclipse.birt.runtime.3_7_1', module: 'derby'

        exclude group: 'org.eclipse.birt.runtime.3_7_1', module: 'org.apache.batik.pdf'

        exclude group: 'org.milyn'

    }

}

再次执行gradlew cleanAll loadDefault命令即可。

 

    7. 构建项目

执行命令:gradlew cleanAll loadAll

会出现以下错误:

 

解决办法:根据报错可以知道,我们配置了mysql数据库,但是没有添加mysql的jdbc驱动依赖,在${ofbiz}/build.gradle文件添加相应的驱动依赖即可,因OFbiz在构建阶段就使用到了依赖,我们在compile、runtime阶段都添加上:

compile 'mysql:mysql-connector-java:5.1.39'

runtime 'mysql:mysql-connector-java:5.1.39'

配置完成后再重新执行gradlew cleanAll loadAll

 

又出现如下错误:

 

解决办法:根据错误我们可以看出,这是因为修改了字符类型导致的,mysql的varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的,utf8mb4是四字节的,最多只能设置767/4=191因此我们要找到相关的表的定义,检查主键配置,凡是主键长度超过191的都需要改小。

首先我们修改${ofbiz}/framework/entity/fieldtype/fieldtypemysql.xml 文件,增加以下类型映射:

<field-type-def type="key-varchar" sql-type="VARCHAR(180)" java-type="String"/>

<field-type-def type="id-mlong" sql-type="VARCHAR(90)" java-type="String"/>

 

然后将对应数据实体定义中主键长度超过191的类型改为key-varchar

示范:修改${ofbiz}/framework/entity/entitydef/entitymodel.xml 中的TENANT_DOMAIN_NAME表实体的主键:

    <entity entity-name="TenantDomainName" package-name="org.apache.ofbiz.entity.tenant"

            title="Tenant and its Domain Name">

        <field name="tenantId" type="id"></field>

        <field name="domainName" type="key-varchar"></field> //原值为long-varchar,映射的类型是VARCHAR(255)

        <prim-key field="domainName"/>

        <relation type="one" fk-name="TNNT_DMNAM" rel-entity-name="Tenant">

            <key-map field-name="tenantId"/>

        </relation>

</entity>

 

以下是都需要修改的表实体定义:

文件

主键

原类型及长度

修改后类型

${ofbiz}/framework/entity/entitydef/entitymodel.xml

TENANT_DOMAIN_NAME(TenantDomainName)

DOMAIN_NAME

long-varchar(255)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/party-entitymodel.xml

ADDRESS_MATCH_MAP(AddressMatchMap)

MAP_KEY, MAP_VALUE

id-vlong(250) + id-vlong(250)

id-mlong(90) + id-mlong(90)

${ofbiz}/applications/datamodel/entitydef/party-entitymodel.xml

EMAIL_ADDRESS_VERIFICATION(EmailAddressVerification)

EMAIL_ADDRESS

id-vlong(250)

key-varchar(180)

${ofbiz}/framework/entityext/entitydef/entitymodel.xml

ENTITY_GROUP_ENTRY(EntityGroupEntry)

ENTITY_GROUP_ID, ENTITY_OR_

PACKAGE

id(20) + long-varchar(255)

id(20) + id-mlong(90)

${ofbiz}/framework/entity/entitydef/entitymodel.xml

ENTITY_KEY_STORE(EntityKeyStore)

KEY_NAME

id-vlong(250)

key-varchar(180)

${ofbiz}/framework/entityext/entitydef/entitymodel.xml

ENTITY_SYNC_INCLUDE(EntitySyncInclude)

ENTITY_SYNC_ID, ENTITY_OR_

PACKAGE

id(20) + long-varchar(255)

id(20) + id-mlong(90)

${ofbiz}/plugins/bin/pricat/entitydef/entitymodel.xml

EXCEL_IMPORT_HISTORY (ExcelImportHistory)

USER_LOGIN_ID, SEQUENCE_NUM

id-vlong(250)+numeric(20)

id-mlong(90) + numeric(20)

${ofbiz}/plugins/pricat/entitydef/entitymodel.xml

EXCEL_IMPORT_HISTORY (ExcelImportHistory)

USER_LOGIN_ID, SEQUENCE_NUM

id-vlong(250)+numeric(20)

id-mlong(90) + numeric(20)

${ofbiz}/plugins/passport/entitydef/entitymodel.xml

GIT_HUB_USER(GitHubUser)

GIT_HUB_USER_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/plugins/bin/passport/entitydef/entitymodel.xml

GIT_HUB_USER(GitHubUser)

GIT_HUB_USER_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/framework/entity/entitydef/entitymodel.xml

JAVA_RESOURCE(JavaResource)

RESOURCE_NAME

id-vlong(250)

key-varchar(180)

${ofbiz}/framework/common/entitydef/entitymodel.xml

KEYWORD_THESAURUS(KeywordThesaurus)

ENTERED_KEYWORD, ALT

ERNATE_KEYWORD

long-varchar(255) + long-varchar(255)

id-mlong(90) + id-mlong(90)

${ofbiz}/framework/common/entitydef/entitymodel.xml

LINKED_IN_USER(LinkedInUser)

LINKED_IN_USER_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/plugins/bin/passport/entitydef/entitymodel.xml

LINKED_IN_USER(LinkedInUser)

LINKED_IN_USER_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/content-entitymodel.xml

MIME_TYPE(MimeType)

MIME_TYPE_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/content-entitymodel.xml

MIME_TYPE_HTML_TEMPLATE(MimeTypeHtmlTemplate)

MIME_TYPE_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/order-entitymodel.xml

ORDER_BLACKLIST(OrderBlacklist)

BLACKLIST_STRING, ORDER_BLACKLIST_TYPE_ID

long-varchar(255) + id(20)

id-mlong(90) + id(20)

${ofbiz}/applications/datamodel/entitydef/product-entitymodel.xml

PRODUCT_PROMO_CODE_EMAIL(ProductPromoCodeEmail)

PRODUCT_PROMO_CODE_ID, EMAIL_ADDRESS

id(20) + email(320)

id(20) + email(150)

${ofbiz}/framework/webapp/entitydef/entitymodel.xml

SERVER_HIT(ServerHit)

VISIT_ID, CONTENT_ID, HIT_START_DATE_TIME, HIT_TYPE_ID

id(20) + id-vlong(250)  + date-time(3) + id(20)

id(20) + id-mlong(90)  + date-time(3) + id(20)

${ofbiz}/framework/security/entitydef/entitymodel.xml

TARPITTED_LOGIN_VIEW(TarpittedLoginView)

VIEW_NAME_ID, USER_LOGIN_ID

id-long(60) + id-vlong(250)

id-long(60) + id-mlong(90)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN(UserLogin)

USER_LOGIN_ID

id-vlong(250)

id-mlong(90)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN_HISTORY(UserLoginHistory)

USER_LOGIN_ID, FROM_DATE

id-vlong(250) + date-time(3)

id-mlong(90) + date-time(3)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN_PASSWORD_HISTORY(UserLoginPasswordHistory)

USER_LOGIN_ID, FROM_DATE

id-vlong(250) + date-time(3)

id-mlong(90) + date-time(3)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN_SECURITY_GROUP(UserLoginSecurityGroup)

USER_LOGIN_ID, GROUP_ID, FROM_DATE

id-vlong(250) + id(20) + date-time(3)

id-mlong(90) + id(20) + date-time(3)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN_SECURITY_QUESTION(UserLoginSecurityQuestion)

QUESTIO

N_ENUM_ID, USER_LOGIN_ID

id(20) + id-vlong(250)

id(20) + id-mlong(90)

${ofbiz}/framework/security/entitydef/entitymodel.xml

USER_LOGIN_SESSION(UserLoginSession)

USER_LOGIN_ID

id-vlong(250)

id-mlong(90)

${ofbiz}/framework/common/entitydef/entitymodel.xml

USER_PREFERENCE(UserPreference)

USER_LOGIN_ID, USER_PREF_TYPE_ID

id-vlong(250) + id-long(60)

id-mlong(90)  + id-long(60)

${ofbiz}/applications/datamodel/entitydef/accounting-entitymodel.xml

VALUE_LINK_KEY(ValueLinkKey)

MERCHANT_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/content-entitymodel.xml

WEB_SITE_PATH_ALIAS(WebSitePathAlias)

WEB_SITE_ID, PATH_ALIAS, FROM_DATE

id(20) + id-vlong(250)  + date-time(3)

id(20) + id-mlong(90) + date-time(3)

${ofbiz}/applications/datamodel/entitydef/content-entitymodel.xml

WEB_USER_PREFERENCE(WebUserPreference)

USER_LOGIN_ID, PARTY_ID, VISIT_ID, WEB_PREFERENCE_TYPE_ID

id-vlong(250) + id(20) + id(20) + id(20)

id-mlong(90) + id(20) + id(20) + id(20)

${ofbiz}/applications/datamodel/entitydef/workeffort-entitymodel.xml

WORK_EFFORT_REVIEW(WorkEffortReview)

WORK_EFFORT_ID, USER_LOGIN_ID, REVIEW_DATE

id(20) + id-vlong(250)  + date-time(3)

id(20) + id-mlong(90) + date-time(3)

 

主键长度限制导致的问题修复后,重新执行gradlew cleanAll loadAll命令,又发现如下错误:

 

解决方案:从报错日志看出这是由于外键索引长度超过限制导致的报错,需要重新设置外键索引长度,按照报错日志找到对应的实体定义文件进行修改,修改方法和修改主键的方法相同。需要修改的文件如下:

文件

数据表(实体)

外键索引值

原长度

修改后长度

${ofbiz}/applications/datamodel/entitydef/accounting-entitymodel.xml

(BudgetStatus)

BUDGET_STTS_USRLGN

id-vlong(250)

id-mlong(90)

${ofbiz}/applications/datamodel/entitydef/party-entitymodel.xml

(CommunicationEvent)

CONTENT_MIME_TYPE_ID

id-vlong(250)

key-varchar(180)

${ofbiz}/applications/datamodel/entitydef/marketing-entitymodel.xml

(ContactList)

CNCT_LST_CBUL,

CNCT_LST_LMUL

id-vlong(250),

id-vlong(250)

id-mlong(90),

id-mlong(90)

${ofbiz}/applications/datamodel/entitydef/marketing-entitymodel.xml

(ContactListCommStatus)

CNCT_LST_CST_ST_UL

id-vlong(250)

id-mlong(90)

其他文件不一一列出    

外键很多名称相同,可以使用全局替换的命令修改。

 

在这个过程,如果再有执行报错,及时中断运行,然后找到错误原因,再将数据库中的数据表全部删除,修复问题后再重新执行gradlew cleanAll loadAll命令,如果您的数据库配置正确,gradle将在数据库自动创建OFbiz的所需数据表并建立主键与外键。

直到不报错并输出:

 

检查数据库:ofbiz(847张表)、ofbizolap(6张表)、ofbiztenant(6张表)

 

    8. 运行ofbiz

执行命令:gradlew ofbiz

成功启动后浏览器访问:https://localhost:8443/accounting 

 

Ofbiz默认使用的是https协议,到这里我们还没有配置证书,所以需要点击继续前往localhost(不安全)。

 

账号和密码:admin/ofbiz,登录成功后:

 

访问过程中注意观察:

 

系统自动根据您访问所在地判断显示何种语言,ofbiz几乎支持的全世界所有主要语言,访问:https://localhost:8443/accounting/control/ListLocales 可以查看和手动设置语言:

 

Ofbiz是一个真正实现国际化的开源ERP,是一个非常值得学习和研究的开源系统。

 

    9. 关闭ofbiz

执行命令:gradlew ofbiz --shutdown

 

    10. 开发者手册

Ofbiz提供了详尽的开发者指导手册,能够帮助开发者快速熟悉系统:

https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Development+Guide 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值