tomcat7源码编译过程以及问题解决

   今天为了学习tomcat的核心源代码,下载了tomcat7的源代码进行编译,参考了网上的编译过程,但是在编译过程中遇到了问题,百度了一下,也没找到问题的解决方案,所以自己思考问题,经过一下午的思考,终于解决了tomcat源码的编译过程

  下面我把tomcat编译过程中遇到的问题以及解决方案列在下面,仅供参考


[javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\BasicDataSource.java:44: 错误: BasicDataSource不是抽象的,
并且未覆盖CommonDataSource中的抽象方法getParentLogger()
    [javac] public class BasicDataSource implements DataSource {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingStatement.java:46: 错误: DelegatingStatement不是
抽象的, 并且未覆盖Statement中的抽象方法isCloseOnCompletion()
    [javac] public class DelegatingStatement extends AbandonedTrace implements S
tatement {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingStatement.java:131: 错误: DelegatingStatement中的
isClosed()无法实现Statement中的isClosed()
    [javac]     protected boolean isClosed() {
    [javac]                       ^
    [javac]   正在尝试分配更低的访问权限; 以前为public
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingPreparedStatement.java:50: 错误: DelegatingPrepar
edStatement不是抽象的, 并且未覆盖PreparedStatement中的抽象方法setNClob(int,Reade
r)
    [javac] public class DelegatingPreparedStatement extends DelegatingStatement


    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingCallableStatement.java:53: 错误: DelegatingCallab
leStatement不是抽象的, 并且未覆盖CallableStatement中的抽象方法getObject(Strin
g,Class)
    [javac] public class DelegatingCallableStatement extends DelegatingPreparedS
tatement
    [javac]        ^
    [javac]   其中, T是类型变量:
    [javac]     T扩展已在方法 getObject(String,Class)中声明的Object
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingConnection.java:51: 错误: DelegatingConnection不
是抽象的, 并且未覆盖Connection中的抽象方法getNetworkTimeout()
    [javac] public class DelegatingConnection extends AbandonedTrace
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\DelegatingResultSet.java:55: 错误: DelegatingResultSet不是
抽象的, 并且未覆盖ResultSet中的抽象方法getObject(String,Class)
    [javac] public class DelegatingResultSet extends AbandonedTrace implements R
esultSet {
    [javac]        ^
    [javac]   其中, T是类型变量:
    [javac]     T扩展已在方法 getObject(String,Class)中声明的Object
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\PoolablePreparedStatement.java:41: 错误: PoolablePreparedSt
atement不是抽象的, 并且未覆盖PreparedStatement中的抽象方法setNClob(int,Reader)
    [javac] public class PoolablePreparedStatement extends DelegatingPreparedSta
tement implements PreparedStatement {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\PoolingConnection.java:42: 错误: PoolingConnection不是抽象
的, 并且未覆盖Connection中的抽象方法getNetworkTimeout()
    [javac] public class PoolingConnection extends DelegatingConnection implemen
ts Connection, KeyedPoolableObjectFactory {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\PoolingDataSource.java:45: 错误: PoolingDataSource不是抽象
的, 并且未覆盖CommonDataSource中的抽象方法getParentLogger()
    [javac] public class PoolingDataSource implements DataSource {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\PoolingDriver.java:52: 错误: PoolingDriver不是抽象的, 并且
未覆盖Driver中的抽象方法getParentLogger()
    [javac] public class PoolingDriver implements Driver {
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\cpdsadapter\ConnectionImpl.java:41: 错误: ConnectionImpl不
是抽象的, 并且未覆盖Connection中的抽象方法getNetworkTimeout()
    [javac] class ConnectionImpl implements Connection {
    [javac] ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\cpdsadapter\PooledConnectionImpl.java:43: 错误: PooledConne
ctionImpl不是抽象的, 并且未覆盖PooledConnection中的抽象方法removeStatementEventL
istener(StatementEventListener)
    [javac] class PooledConnectionImpl
    [javac] ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\cpdsadapter\DriverAdapterCPDS.java:86: 错误: DriverAdapterC
PDS不是抽象的, 并且未覆盖CommonDataSource中的抽象方法getParentLogger()
    [javac] public class DriverAdapterCPDS
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\cpdsadapter\PoolablePreparedStatementStub.java:34: 错误: De
legatingStatement中的isClosed()无法实现Statement中的isClosed()
    [javac] class PoolablePreparedStatementStub extends PoolablePreparedStatemen
t {
    [javac] ^
    [javac]   正在尝试分配更低的访问权限; 以前为public
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\datasources\PerUserPoolDataSource.java:52: 错误: PerUserPoo
lDataSource不是抽象的, 并且未覆盖CommonDataSource中的抽象方法getParentLogger()
    [javac] public class PerUserPoolDataSource
    [javac]        ^
    [javac] D:\Java\java×???\tomcat\basepath\tomcat6-deps\dbcp\src\java\org\apa
che\tomcat\dbcp\dbcp\datasources\SharedPoolDataSource.java:45: 错误: SharedPoolD
ataSource不是抽象的, 并且未覆盖CommonDataSource中的抽象方法getParentLogger()
    [javac] public class SharedPoolDataSource
    [javac]        ^
    [javac] 注: 某些输入文件使用或覆盖了已过时的 API。
    [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
    [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
    [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
    [javac] 17 个错误
    [javac] 1 个警告



    上面这个编译过程可以采取一下的方法解决:

    (1)下载dbcp的jar包   commons-dbcp-1.4

    (2)用360压缩打开该文件,将里面的class文件复制到一个目录下

    (3)修改build.xml文件,我采取的是

        在105行添加

        修改里面的内容

       将javac里面修改成

       在javac下面添加

      
 
 


    大家看了上面的解决方案,意思就是不编译dbcp的源代码,只编译common-pool的源码,再将官网已经编译好的文件拷贝到class的对应位置,再打成jar包

这只是一种简单的解决方案,这部分源码对于研究tomcat的核心原理没有影响,姑且可以忽略之部分代码,只要编译通过tomcat源码即可


    

你可能感兴趣的:(Java,编程)