JRadius在windows下的编译错误,警惕windows与linux的编译环境差别
目前在做radius项目,项目采用Freeradius,c语言写的,提供java开发接口,我们部门主要以java为主,所以需要调研JRadius的开发。
JRadius虽然是个不错的项目,但是看得出来,无论是作者还是使用JRadius的开发者都让人觉得漫不经心。。论坛空空荡荡,mailing list几乎为空,wiki上面的页面也相当少。杯具。
svn上面down下来JRadius,我采用的是tags下面的1.0版本,虽然官方文档上的例子是trunk版本,但是trunk其实一般都是出于开发阶段,我们不是想要研究而是想要使用的,所以还是采用正式的tags下的版本比较好。
mvn install。编译失败。
D:eclipseworkspacejradius-1.0dictionarytargetdictionary-srcnetjradiusdi
ctionaryvsa_dhcpAttr_DHCPBootFilename.java:[20,13] 类 Attr_DHCPBootFileName 是
公共的,应在名为 Attr_DHCPBootFileName.java 的文件中声明
我囧,这是啥错误啊,看来看去这文件名跟类名没有错啊,尝试了无数次,反复查看了文件名跟类名,没错啊。。。
最终,终于让我发现了一个问题,生成的文件名是DHCPBootFilename,而类名是DHCPBootFileName,大小写不同。奇怪,这又是怎么回事,查看了下它用来生成这个文件的代码,没有错啊。为什么生成的文件大小写会不一样?
查看它用来生成代码的工具类,反复调试。。没错。。完全没错。。郁闷了。。
查看了dictionary配置文件,艹,终于让我发现了端倪,配置文件需要2个属性,分别是:
ATTRIBUTE DHCP-Boot-Filename 269 string # 128 octets
ATTRIBUTE DHCP-Boot-File-Name 67 string
按照生成器的逻辑,它会生成:
DHCPBootFilename.java
DHCPBootFileName.java
关键的问题就在于,我的环境是windows,windows文件名不区分大小写,结果文件内容会被直接覆盖掉。而开发者的环境是linux,所以他可以顺利编译发布出来。
解决这个问题,没什么特别的方法,要嘛就是开发了以后到linux上面编译。或者把dictionary的编译放到linux上面,然后作为依赖包引入到开发环境中。
个人建议是所有开发的代码都上传到linux下去编译,因为产品环境会在linux下面,在linux下面编译测试才最接近实际。毕竟项目的编译会依赖于操作系统。