【问题标题】:Maven clean compile does not workMaven 干净编译不起作用
【发布时间】:2011-10-29 12:39:42
【问题描述】:

我的 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 编译这个项目时,它会成功编译。

【问题讨论】:

  • 你的类路径中有多个版本的 DBUtils 或 spring 的东西吗? Eclipse 和 Maven 可能以不同的顺序加载它们。

标签: maven maven-3 maven-compiler-plugin


【解决方案1】:

项目的类路径中缺少包含 com.aric.etlscheduler.domain.EulTransactionHistory 类的 jar。确保您已将 jar 作为依赖项添加到项目的 pom 中。

【讨论】:

  • 它在那里,它不是依赖项,它在我的源代码中,当然在类路径中
  • 顺便说一下用eclipse编译成功了。
【解决方案2】:

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

  • DBUtils.oneAndOnlyOne(list) 正在返回 Object 而不是 EulTransactionHistory
  • 这是因为传递给方法的列表是Objects 的列表,而不是EulTransactionHistory 的列表。
  • 这又是因为hibernateTemplate.findByCriteria() 返回的是Objects 的列表,而不是EulTransactionHistory 的列表。

【讨论】:

  • 我不认为我的语法有任何问题,因为它是用eclipse编译成功的。
【解决方案3】:

如果第 329 行是

EulTransactionHistory existingRecord = DBUtils.oneAndOnlyOne(list);

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      相关资源
      最近更新 更多