【问题标题】:Compilation errors when using Gradle task使用 Gradle 任务时的编译错误
【发布时间】:2013-05-27 08:04:25
【问题描述】:

我目前正在尝试将基于 Ant 的构建过程移动到 Gradle

对于我的一些 Java 项目,我需要生成一个 jar 文件。这个jar文件 将被其他 Java 项目使用。 当我使用 Ant 创建 Jar 文件时(通过 Ant Jar 任务),就可以了。

但是当我尝试使用 Gradle 时,对于某些项目,我遇到了一些编译错误,例如:

任务“:compileJava”执行失败。 编译失败;有关详细信息,请参阅编译器错误输出。”

--stacktrace 选项不提供额外信息。所以,摇篮 编译显示我的代码中有一些错误。 但是这个相同的代码(Ant jar 任务的 jar)目前被 20 个或更多其他项目使用,一切正常。

Gradle 似乎是一个很棒的构建工具,所以我想了解为什么在我使用 Gradle Jar 任务时会发生这种(编译错误)(当我使用 compileJava 任务时更准确)。

提前感谢任何帮助或解释。

【问题讨论】:

  • 你的 gradle 构建文件是什么样的,你在调用什么,实际结果是什么(即你得到了哪些编译错误)。好像您还没有声明所有依赖项。
  • 我很确定我的 build.gradle 中的所有依赖项都可以,因为我使用与 Ant 构建相同的依赖项。但是 gradle compileJava 告诉我代码有问题。比如error: type argument MyPanel is not within bounds of type-variable T ; private void setDefaultValue(MyList<MyPanel> ps) { where T is a type-variable: T extends APanel<?> declared in class MyList但是有了Ant jar任务,一切都OK了。或者,这个 ant 任务可能会忽略编译错误并在没有任何警告的情况下创建 jar。
  • 如果 ant build.xml 只创建一个 jar,这意味着其他东西正在编译它,否则 ant 也会失败。 gradle compileJava 不创建 jar,而是编译类。 gradle jar 创建一个 jar。
  • 行为上的差异可能来自于使用不同的 JDK 版本进行编译。有时较低的 JDK 版本不会抱怨与泛型相关的代码,尽管它们应该抱怨。默认情况下,Gradle 将使用gradle -vJRE 下)中显示的 JDK 版本进行编译。还要检查编译器源和目标版本设置是否相同。在 Gradle 中,它们由 sourceCompatibilitytargetCompatibility 属性控制(例如 sourceCompatibility = 1.5)。
  • @Peter 我已经尝试过您的解决方案,但我仍然遇到相同的编译错误。此外,我尝试对 Ant 和 Gradle 使用相同的编译器版本(通过 Eclipse)。但结果是一样的:使用 Ant,它可以正常工作,但使用 Gradle,我遇到了编译错误(即使我在 build.gradle 中更改了源和目标的兼容性)。此外,我尝试了另一件事:手动创建 jar 库(Eclipse 工作区中的项目 -> 导出.. -> Jar 文件)。与 Ant 一样,没有编译错误(只有警告,但没有一个与以前的泛型问题有关)。

标签: jar gradle


【解决方案1】:

经过数小时的调查,我找到了问题的答案。它与我们用 Ant 生成 Jar 的旧方法相关联。

Ant jar 任务仅将 Eclipse 生成的 bin 目录中的所有 .class 放入存档中。问题是Eclipse seems to ignore all errors that may have in a class。这就是 ant jar 任务起作用的原因。所以,事实上,@HieryNomus 当你在评论中说 Ant jar 任务还有其他东西可以编译代码时,你是对的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多