编译Tomcat5.5.x

来源:互联网 发布:js 识别浏览器 编辑:程序博客网 时间:2024/06/06 02:01
1. 准备工作:
   1.1 系统信息:
       OS : Windows XP Professional 2002 SP2
CPU: Intel(R) Core(TM)2 Duo T5870 2GHz
       RAM: 2G
   1.2 构建工具:
       JDK: 1.6.0_13(HotSpot)
       ANT: 1.7.1
       SVN: 1.6.4

2. 下载源码:
   cd F:/env/leisore/tomcat/tc5.5.x
   co http://svn.apache.org/repos/asf/tomcat/tc5.5.x/trunk F:/env/leisore/tomcat/tc5.5.x/trunk

3. 创建依赖库存放文件夹:
   cd F:/env/leisore/tomcat/tc5.5.x/trunk
   mkdir lib

5. 准备build.properties:
   5.1
进入F:\env\leisore\tomcat\tc5.5.x\trunk\build,将build.properties.default
       copy一份,名字修改为build.properties
   5.2 修改build.properties中的base.path,指定为lib的绝对路径:
       base.path=F:/env/leisore/tomcat/tc5.5.x/trunk/lib

6. 下载依赖库:
   6.1
进入F:\env\leisore\tomcat\tc5.5.x\trunk\build
   6.2 执行命令:
       ant download

7. 构建时出错:
   7.1
下载过程中构建DBCP时出错,内容如下:
       ============================================================================================
       [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\
       dbcp\dbcp\DelegatingDatabaseMetaData.java:41: org.apache.tomcat.dbcp.dbcp.DelegatingDatabaseMetaData
       不是抽象的,并且未覆盖 java.sql.DatabaseMetaData 中的抽象方法 getFunctionColumns(java.lang.String,
        java.lang.String,java.lang.String,java.lang.String)
        [javac] public class DelegatingDatabaseMetaData extends AbandonedTrace
        [javac]        ^
        [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\
        dbcp\dbcp\DelegatingResultSet.java:61: org.apache.tomcat.dbcp.dbcp.DelegatingResultSet 不是抽象的,并且
        未覆盖 java.sql.ResultSet 中的抽象方法 updateNClob(java.lang.String,java.io.Reader)
        [javac] public class DelegatingResultSet extends AbandonedTrace implements ResultSet {
        [javac]        ^
        [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\
        PoolableCallableStatement.java:38: org.apache.tomcat.dbcp.dbcp.PoolableCallableStatement 不是
        抽象的,并且未覆盖 java.sql.CallableStatement 中的抽象方法 setNClob(java.lang.String,java.io.Reader)
        [javac] public class PoolableCallableStatement extends DelegatingCallableStatement implements
        CallableStatement {
        [javac]        ^
        ......
        [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\
        datasources\SharedPoolDataSource.java:52: org.apache.tomcat.dbcp.dbcp.datasources.SharedPoolDataSource
        不是抽象的,并且未覆盖 java.sql.Wrapper 中的抽象方法 isWrapperFor(java.lang.Class)
        [javac] public class SharedPoolDataSource
        [javac]        ^
        [javac] 注意:某些输入文件使用或覆盖了已过时的 API。
        [javac] 注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
        [javac] 14 错误
       
        BUILD FAILED
        F:\env\leisore\tomcat\tc5.5.x\trunk\build\build.xml:2094: The following error occurred while executing this line:
        ============================================================================================
   
    7.2 Google了一下也没有找到为什么出错,但是在下载的dbcp的README.txt总看到如下信息:
        README.txt位置:F:\env\leisore\tomcat\tc5.5.x\trunk\lib\commons-dbcp-1.3-src
    信息:
    ============================================================================================
    DBCP 1.4 compiles and runs under JDK 1.6 only (JDBC 4)
        DBCP 1.3 compiles and runs under JDK 1.4-1.5 only (JDBC 3)
    ============================================================================================
    于是决定试试DBCP1.4,因为JDK是1.6,修改build.properties中那个的DBCP项:
    修改前:
    ============================================================================================
    # ----- Commons DBCP, version 1.1 or later -----
    # commons-dbcp.version=1.3
    commons-dbcp.version=1.3
    ============================================================================================
    修改后:
    ============================================================================================
    # ----- Commons DBCP, version 1.1 or later -----
    # commons-dbcp.version=1.4
    commons-dbcp.version=1.4
    ============================================================================================
    继续编译:
    ant download
    7.3 还是出错,信息为:
        ============================================================================================
        [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\
    dbcp\dbcp\PoolingDataSource.java:89: -source 1.4 中不支持泛型
        [javac] (请使用 -source 5 或更高版本以启用泛型)
        [javac]     public boolean isWrapperFor(Class<?> iface) throws SQLException {
        [javac]                                      ^
        [javac] F:\env\leisore\tomcat\tc5.5.x\trunk\lib\tomcat-deps\dbcp\src\java\org\apache\tomcat\
    dbcp\dbcp\datasources\InstanceKeyDataSource.java:171: -source 1.4 中不支持泛型
        [javac] (请使用 -source 5 或更高版本以启用泛型)
        [javac]     public boolean isWrapperFor(Class<?> iface) throws SQLException {
        [javac]                                      ^
        [javac] 7 错误

        BUILD FAILED
    ============================================================================================
    这次的错误就比较明显了,继续修改build.properties:
        ============================================================================================
    compile.source=1.5
        compile.target=1.5
    ============================================================================================
    修改前均为1.4,修改完继续编译:
    ant download
       
8. 依赖库下载成功:
   经过上边的折腾,ant download成功,可以看到lib下有如下依赖库:
   ============================================================================================
   commons-beanutils-1.7.0
   commons-collections-3.2
   commons-digester-1.8
   commons-el-1.0
   commons-logging-1.1.1
   commons-modeler-2.0.1
   commons-fileupload-1.2
   commons-io-1.4
   xerces-2_9_1
   mx4j-3.0.2
   junit3.8.2
   commons-launcher
   nsis-2.46
   struts-1.2.9-bin
   commons-daemon-1.0.7
   tomcat-native-1.1.22
   javamail-1.4.1
   jaf-1.1.1
   servlet-api-2.4
   jsp-api-2.0
   commons-pool-1.5.5-src
   tomcat-deps
   commons-dbcp-1.3-src
   commons-dbcp-1.4-src
   ecj-3.7
   ============================================================================================

9. 编译tomcat源码:
   9.1
设置ant的jvm属性:
       set ANT_OPTS=-Xms1024M -Xmx1024M
   9.2 编译tomcat:
       进入F:\env\leisore\tomcat\tc5.5.x\trunk\build
       执行命令:
       ant

10. 编译成功:
    ============================================================================================
    BUILD SUCCESSFUL
    Total time: 39 seconds
    ============================================================================================
    可以看见在F:\env\leisore\tomcat\tc5.5.x\trunk\build下游如下目录:
    ============================================================================================
    classes
    server
    common
    bin
    conf
    docs
    lib
    tests
    logs
    shared
    work
    temp
    webapps
    ============================================================================================

11. 构建release版本:
    11.1
修改 build.properties:
         ============================================================================================
         full.dist=on
         ============================================================================================
    11.2 构建release版本:
         ============================================================================================
         cd F:\env\leisore\tomcat\tc5.5.x\trunk\build
         ant release
         ============================================================================================
    11.2 构建成功:
         在F:\env\leisore\tomcat\tc5.5.x\trunk\build有如下目录:
         ============================================================================================
     release
     └─v5.5.34
         │  KEYS
         │  RELEASE-NOTES
         │  README.html
         │
         ├─bin
         │      apache-tomcat-5.5.34.exe
         │      apache-tomcat-5.5.34.exe.md5
         │      apache-tomcat-5.5.34.zip
         │      apache-tomcat-5.5.34.zip.md5
         │      apache-tomcat-5.5.34.tar.gz
         │      apache-tomcat-5.5.34.tar.gz.md5
         │      apache-tomcat-5.5.34-embed.zip
         │      apache-tomcat-5.5.34-embed.zip.md5
         │      apache-tomcat-5.5.34-embed.tar.gz
         │      apache-tomcat-5.5.34-embed.tar.gz.md5
         │      apache-tomcat-5.5.34-deployer.zip
         │      apache-tomcat-5.5.34-deployer.zip.md5
         │      apache-tomcat-5.5.34-deployer.tar.gz
         │      apache-tomcat-5.5.34-deployer.tar.gz.md5
         │      apache-tomcat-5.5.34-compat.zip
         │      apache-tomcat-5.5.34-compat.zip.md5
         │      apache-tomcat-5.5.34-compat.tar.gz
         │      apache-tomcat-5.5.34-compat.tar.gz.md5
         │      apache-tomcat-5.5.34-admin.zip
         │      apache-tomcat-5.5.34-admin.zip.md5
         │      apache-tomcat-5.5.34-admin.tar.gz
         │      apache-tomcat-5.5.34-admin.tar.gz.md5
         │      apache-tomcat-5.5.34-fulldocs.tar.gz
         │      apache-tomcat-5.5.34-fulldocs.tar.gz.md5
         │      README.html
         │
         └─src
                apache-tomcat-5.5.34-src.zip
                apache-tomcat-5.5.34-src.zip.md5
                apache-tomcat-5.5.34-src.tar.gz
                apache-tomcat-5.5.34-src.tar.gz.md5

12. 测试:
    12.1
进入F:\env\leisore\tomcat\tc5.5.x\trunk\build,执行:
         ant clean-tester run-tester
    12.2 测试成功
  
13. 至此,tomcat构建完毕。