0

我的 pom 文件中有 maven-compiler-plugin 如下,但编译器对泛型参数很生气。我的 Maven 版本是“Apache Maven 3.0.3 (r1075438; 2011-02-28 19:31:09+0200)”

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <compilerVersion>1.6</compilerVersion>
    </configuration>
</plugin>

编译器生气的类如下

List<EulTransactionHistory> list = hibernateTemplate.findByCriteria(criteria, -1, 1);
EulTransactionHistory existingRecord = DBUtils.oneAndOnlyOne(list);

DBUtils.oneAndOnlyOne 的规范如下

public static <T> T oneAndOnlyOne(List<T> list) {...}

最后的例外是

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project etlscheduler: Compilation failure: Compilation failure SchedulerDaoImpl.java:[329,18] incompatible types
found   : java.lang.Object
required: com.aric.etlscheduler.domain.EulTransactionHistory

此外,当我用 eclipse 编译这个项目时,它会成功编译。

4

4 回答 4

0

The jar containing the com.aric.etlscheduler.domain.EulTransactionHistory class is missing from the classpath of your project. Make sure you have added the jar as dependency in your project's pom.

于 2011-08-18T07:34:19.127 回答
0

从编译器错误来看,这可能是正在发生的事情。

  • DBUtils.oneAndOnlyOne(list)正在返回Object而不是EulTransactionHistory.
  • 这是因为传递给该方法的列表是 的列表,Objects而不是 的列表EulTransactionHistory
  • 反过来,这又是因为hibernateTemplate.findByCriteria()返回的是 的列表Objects而不是 的列表EulTransactionHistory
于 2011-08-18T09:21:44.580 回答
0

如果第 329 行是

EulTransactionHistory existingRecord = DBUtils.oneAndOnlyOne(list);

那么这是因为 1)你的 Maven 类路径的第一个 DBUtils 类有一个 oneAndOnlyOne() 方法,它返回 java.lang.Object,或者 2)你没有传递你认为你正在传递它的列表,而是一个未参数化的列表或列表。

于 2011-08-18T14:12:41.457 回答
0

DBUtils 是否在不同的项目中,您是否曾经有一个返回对象的 DBUtils.oneAndOnlyOne()?如果是这样,您需要在该项目上进行 Maven 安装。

Maven 使用最后安装的 jar,而 Eclipse,假设您以通常的方式设置它,则直接窥探到另一个项目。

于 2011-08-18T14:33:07.947 回答