起源与碎碎念
这几天公司要重构ERP,让我负责去研究主流开源ERP系统。本来让我了解的是python的odoo,但是我对py太不熟练,项目代码的依赖本身也很脆弱,最后倒在了一个 Odoo LINE 1: SELECT * FROM ir_model WHERE state=‘manual‘ 错误上,卡了几天搞不定,回头反思感觉自己完全在浪费时间。分析一下:
- 为什么要看开源ERP——了解主流ERP设计思路,博采众长
- 为什么是odoo——python胶水语言的插件式设计能够实现热插拔自由增删模块;UI最好看的ERP;
- 为什么把我卡住了——对其技术栈太不熟悉+源码依赖过于脆弱+源码对系统环境要求太苛刻导致无法正常运行demo
于是我亲自了解了一下有无具备类似优势的,Java版本的开源ERP系统,能够同样地帮助我了解主流ERP设计思路。最后的决定是Apache顶级项目之一Apache OFBiz,源码在github上,版本号我选择了 17.12 release
同样地,构建过程中也踩了不少坑...
坑
1.Downloading https://services.gradle.org/distributions/gradle-3.2.1-bin.zip timeout
下载gradle超时。这个问题我很久以前鼓捣安卓的时候就很奇怪,为什么Android Studio就永远下载不下来,我开网页下载就很轻松...
这种情况可以去gradle官网下载对应版本压缩包,然后放到对应的gradle目录。这样的话当检测到已经存在有下载好的gradle.zip后,程序就不会再到外网费劲去下载了。
2.gradlew cleanall loadall是干什么的
印象中从来没见过gradle还有这种指令丫?
还真没有,这两个都是OFBiz在build.gradle中自定义的脚本,大概是导依赖+build的作用。
3.resolve dependencies 'classpath'卡住
一看日志,jcenter,懂了。
jcenter貌似是gradle版的maven中心仓库之类,特别慢,特别容易超时或者宕掉。因此果断设置镜像。我win10系统的gradle路径在C:\Users\xxx\.gradle\文件夹下,在这里新建一个init.gradle然后粘贴进去如下镜像地址:
allprojects {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public"
}
}
}
当然如果不喜欢阿里云的镜像也可以自行搜索清华,豆瓣等其他地方的镜像源。
设置之后,再次运行gradlew cleanall loadall,可以看到导入依赖时打印日志的网址从jcenter变成自己设置的了,当然速度也直接起飞。
4. javax.ws.rs依赖无法导入
报错信息大概这样:
Could not determine artifacts for javax.ws.rs:javax.ws.rs-api:2.1
Could not get resource 'https://nexus.server/content/groups/tenable-cloud/javax/ws/rs/javax.ws.rs-api/2.1/javax.ws.rs-api-2.1.$%7Bpackaging.type%7D'.
4.1解决方案
将
compile 'org.apache.tika:tika-parsers:1.20'
改为:
compile ('org.apache.tika:tika-parsers:1.20'){
exclude group: 'javax.ws.rs'
exclude module: 'javax.ws.rs-api'
}
compile 'javax.ws.rs:javax.ws.rs-api:2.1@jar'
4.2解决思路
首先查错误原因:转义字符被错误地带进了URL中(%7B与%7D分别是左右大括号),这样的话问题就很简单了,只需把用到javax.ws.rs依赖找出来,exclude掉,然后手动再把这个javax.ws.rs依赖用不含转义字符的方式加进来就好了。
然后定位问题语句:这里借鉴了二分法的思路(还好只有一处依赖用到了这个,不然那么多依赖项,可能真要一条一条排查了)每次注释掉一半依赖,然后执行gradlew cleanall loadall看是否打印这个错误日志,逐渐缩小范围直到定位出目标。最后定位到去掉
compile 'org.apache.tika:tika-parsers:1.20'
就不会报这个错误,于是把这一行改掉,问题解决。
5.Gradle Build时卡住
重启解决80%的问题,Ctrl+D终止掉,然后重新执行就...好了。
6.OFBiz的Banner都打印出来,但卡在Building 91%不动
不用管它,反正这时候项目已经成功运行了,而且访问OFBiz开发者文档中给的诸如https://localhost:8443/ordermgr/control/main等几个地址都没问题。
7.账号密码是啥
文档中有的,第三个网址也有写。默认账号admin,默认密码ofbiz