首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyBatis升级导致生成错误

MyBatis升级导致生成错误
EN

Stack Overflow用户
提问于 2013-03-27 19:45:55
回答 1查看 885关注 0票数 0

在我使用Gradle (Windows 7,Java 1.7.0.15)构建的现有项目中,我升级了Mybatis库,如下所示:

代码语言:javascript
复制
// MyBatis      
compile "org.mybatis:mybatis:3.2.1"
compile "org.mybatis:mybatis-spring:1.2.0"  

//compile "org.mybatis:mybatis:3.0.6"
//compile "org.mybatis:mybatis-spring:1.0.2"

现在,当我构建时,我得到了以下错误:

代码语言:javascript
复制
11:38:37.308 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler]
Compiling with JDK 6 Java compiler API.
11:38:39.147 [ERROR] [system.err] ...java:14: error: DateTimeHandler is not abstract and does not override abstract method getNullableResult(ResultSet,int) in BaseTypeHandler
11:38:39.153 [ERROR] [system.err] public class DateTimeHandler extends BaseTypeHandler<DateTime> {
11:38:39.274 [ERROR] [system.err] Note: Some input files use or override a deprecated API.
11:38:39.279 [ERROR] [system.err] Note: Recompile with -Xlint:deprecation for details.
11:38:39.284 [ERROR] [system.err] 1 error

我已经检查了这个类一百次,它确实覆盖了正确的方法(实际上,Eclipse同意它没有显示错误)。

我不知道为什么要使用内部Gradle类jdk6,而所有的东西都应该在Java7下。

Gradle不喜欢的类:

代码语言:javascript
复制
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.joda.time.DateTime;

@MappedTypes(value = DateTime.class)
public class DateTimeHandler extends BaseTypeHandler<DateTime> {

    public DateTimeHandler() {
    }

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, DateTime parameter, JdbcType jdbcType) throws SQLException {
        ps.setTimestamp(i, new java.sql.Timestamp((parameter.toDate()).getTime()));
    }

    @Override
    public DateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
        java.sql.Timestamp sqlTimestamp = rs.getTimestamp(columnName);
        if (sqlTimestamp != null) {
            return new DateTime(sqlTimestamp.getTime());
        }
        return null;
    }

    @Override
    public DateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        java.sql.Timestamp sqlTimestamp = cs.getTimestamp(columnIndex);
        if (sqlTimestamp != null) {
            return new DateTime(sqlTimestamp.getTime());
        }
        return null;
    }
}

但据我所知,这并没有什么问题。正确的方法会被覆盖。

OK修复了构建:

在方法中添加:

公共DateTime getNullableResult(ResultSet rs,int columnIndex)抛出SQLException;

如果我在这个方法上使用了覆盖注释,但是没有注释,Gradle构建就会成功完成,那么就会出现Eclipse错误。如果该方法被删除,Gradle会生成一个错误,指出该类需要用该签名覆盖一个方法(或者被声明为抽象的)。

所以,虽然我的问题已经解决了,但我并不真正理解这个错误的本质。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 20:16:00

Gradle支持多种调用Java编译器的方式。其中之一是通过JDK 6和更高版本中存在的JDK 6 Java编译器API。gradle -v将告诉您哪个JDK用于执行Gradle。默认情况下,将使用相同的JDK编译Java代码。

至于编译错误,我需要更多的信息来帮助(Gradle版本,源代码,compile类路径的打印输出,可重现的例子,等等)。如果代码在Eclipse中编译,而不是在Gradle中编译,那么Gradle和Eclipse的配置可能是不同的,例如,在编译类路径方面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15658021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档