tomcat7源码编译过程以及问题解决
2014-10-12 20:57
1121 查看
今天为了学习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中的抽象方法<T>getObject(Strin
g,Class<T>)
[javac] public class DelegatingCallableStatement extends DelegatingPreparedS
tatement
[javac] ^
[javac] 其中, T是类型变量:
[javac] T扩展已在方法 <T>getObject(String,Class<T>)中声明的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中的抽象方法<T>getObject(String,Class<T>)
[javac] public class DelegatingResultSet extends AbandonedTrace implements R
esultSet {
[javac] ^
[javac] 其中, T是类型变量:
[javac] T扩展已在方法 <T>getObject(String,Class<T>)中声明的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行添加<property name="compiled-dbcp.home" value="${base.path}/compiled-dbcp" />
修改<target name="build-tomcat-dbcp" depends="build-manifests" unless="no.build.dbcp">里面的内容
将javac里面修改成<include name="**/org/apache/tomcat/dbcp/pool/*.java" />
在javac下面添加
<copy todir="${tomcat-dbcp.home}/classes/org/apache/tomcat/dbcp">
<fileset dir="${compiled-dbcp.home}/classes/org/apache/commons" />
</copy>
大家看了上面的解决方案,意思就是不编译dbcp的源代码,只编译common-pool的源码,再将官网已经编译好的文件拷贝到class的对应位置,再打成jar包
这只是一种简单的解决方案,这部分源码对于研究tomcat的核心原理没有影响,姑且可以忽略之部分代码,只要编译通过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中的抽象方法<T>getObject(Strin
g,Class<T>)
[javac] public class DelegatingCallableStatement extends DelegatingPreparedS
tatement
[javac] ^
[javac] 其中, T是类型变量:
[javac] T扩展已在方法 <T>getObject(String,Class<T>)中声明的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中的抽象方法<T>getObject(String,Class<T>)
[javac] public class DelegatingResultSet extends AbandonedTrace implements R
esultSet {
[javac] ^
[javac] 其中, T是类型变量:
[javac] T扩展已在方法 <T>getObject(String,Class<T>)中声明的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行添加<property name="compiled-dbcp.home" value="${base.path}/compiled-dbcp" />
修改<target name="build-tomcat-dbcp" depends="build-manifests" unless="no.build.dbcp">里面的内容
将javac里面修改成<include name="**/org/apache/tomcat/dbcp/pool/*.java" />
在javac下面添加
<copy todir="${tomcat-dbcp.home}/classes/org/apache/tomcat/dbcp">
<fileset dir="${compiled-dbcp.home}/classes/org/apache/commons" />
</copy>
大家看了上面的解决方案,意思就是不编译dbcp的源代码,只编译common-pool的源码,再将官网已经编译好的文件拷贝到class的对应位置,再打成jar包
这只是一种简单的解决方案,这部分源码对于研究tomcat的核心原理没有影响,姑且可以忽略之部分代码,只要编译通过tomcat源码即可
相关文章推荐
- tomcat7源码编译过程以及问题解决
- ubuntu下编译Android源码过程遇到问题解决
- OGRE 2.1 使用VS2015编译的过程以及问题的解决
- Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序
- 编译Android源码时常见问题以及解决方法
- Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
- live555源码研究(十)------在编译过程中遇到的问题及解决方法
- 编译安装apache+php,以及安装过程中的报错问题解决
- tomcat开启https配置过程中的问题以及解决方法
- Tomcat热部署以及热部署过程中问题解决
- Linux 从源码编译安装 OpenSSH以及各问题解决
- mini2440之编译gdb-6.7过程以及问题解决
- nginx源码编译以及源码编译过程中遇到的问题
- Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
- Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
- chromium源码编译过程中出现的问题及解决方法
- cmd使用cl编译的配置方法以及相关问题的解决方法
- 关于修改frameworks的源码遇到的一点问题以及解决方法
- tomcat6源码下载编译时错误的解决
- ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)