gpt4 book ai didi

java - MyBatis升级导致构建错误

转载 作者:行者123 更新时间:2023-12-01 14:43:56 24 4
gpt4 key购买 nike

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

// 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"

现在,当我构建时,出现以下错误:

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,而一切都应该在 Java 7 下。有人知道这里发生了什么 id 吗?

Gradle 不喜欢的类:

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;
}
}

但据我所知,这没有任何问题。正确的方法已被覆盖。

确定修复了构建:

在方法中添加:

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

如果我在此方法上使用覆盖注释,则 Eclipse 会出错,但如果没有该注释,Gradle 构建也会成功完成。如果该方法被删除,Gradle 会生成一个错误,表明该类需要重写具有该签名的方法(或声明为抽象方法)。

因此,尽管我的问题已得到解决,但我并不真正了解此错误的本质。

最佳答案

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

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

关于java - MyBatis升级导致构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com