1.3. Windows环境下的,基于Cygwin的Docbook开发环境的搭建

其实如果只是普通的用用docbook去写技术文档,那么上述的纯windows的docbook开发环境,即:

xsltproc + fop + docbook-xsl-ns

已经够用了,即对于普通的docbook开发者的话,看到此处,已经足够了。

但是如果你也是像我一样,需要用到写更多的技术文档,需要用makefile等去管理各个book的编译,去传递定制的参数给xsltproc

以及利用Linux下面的一些常用工具,去实现特定的需求的话,那么就要用到cygwin了。

1.3.1. 安装Cygwin

关于什么是Cygwin和如何安装Cygwin,请参考:Cygwin

需要注意的是,安装时候,记得要选择以下几个库/模块:

  1. xsltproc

    用于将xml转换为HTML和FO等格式

  2. xsltproc所依赖的一些库

    xsltproc运行的话,需要依赖一些库,所以也要选上这些库。

    同时,后期的一些其他处理,比如编码转换等,也需要相关的像iconv等工具,所以要安装上这些工具,方便后期使用。

    • libxml2
    • zlib
    • libxslt
    • iconv
  3. [docbook-xsl]

    如前面第 1.2.3 节 “下载docbook-xsl-ns-1.77.1”中的解释,为了生成各种格式的文件,是需要对应的xsl配置文件的。

    其实这部分配置文件,新版本的cygwin中,也有了,所以可以选择安装,也可以不安装:

    • 安装的话,就是选择对应的模块docbook-xsl

      安装的理由是,cygwin自带的xsl,其实版本已经够新了,也基本足够用了。而且总类也很多,包括docbook-xsl,docbook-xsl-ns等等。

    • 不安装的理由是,可以自己去按照前面的第 1.2.3 节 “下载docbook-xsl-ns-1.77.1”一样去手动自己下载最新版本的,自己所需要的docbook-xsl。

      因为最新的版本,往往功能上更加全。

    所以,是否安装此docbook-xsl的话,可以根据自己的需要决定。

    个人更加倾向于后者,自己手动下载最新版本的。

安装完毕cygwin后,可以查看对应的这些工具的版本等信息:

CLi@PC-CLI-1 ~/develop/docbook/books/soft_dev_basic/src
$ which xsltproc.exe
/usr/bin/xsltproc.exe

CLi@PC-CLI-1 ~/develop/docbook/books/soft_dev_basic/src
$ xsltproc --version
Using libxml 20708, libxslt 10126 and libexslt 815
xsltproc was compiled against libxml 20708, libxslt 10126 and libexslt 815
libxslt 10126 was compiled against libxml 20708
libexslt 815 was compiled against libxml 20708
            

1.3.2. 下载cygwin下使用fop-1.0

按理来说,cygwin下,直接是可以正常使用1.0版本的fop的,但是后来遇到那个很多人都遇到的NoClassDefFoundError的问题。

所以,要在cygwin下使用fop-1.0之前,去解决掉此问题:

将fop中(大概是189行)的:

LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`

改为:

#LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
# for cygpath has bug, so use follow workaround
# edit by admin AT crifan DOT com
LCP_TEMP=`cygpath --path --$format "$LOCALCLASSPATH"`
LCP_TEMP=`cygpath --path --unix "$LCP_TEMP"`
            

详情参看:【终极解决】fop错误:Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/xmlgraphics/image/loader/ImageContext 的终极解决办法,即cygpath有bug,转换路径出错,导致部分路径被截断