【发布时间】: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 -v(JRE下)中显示的 JDK 版本进行编译。还要检查编译器源和目标版本设置是否相同。在 Gradle 中,它们由sourceCompatibility和targetCompatibility属性控制(例如sourceCompatibility = 1.5)。 -
@Peter 我已经尝试过您的解决方案,但我仍然遇到相同的编译错误。此外,我尝试对 Ant 和 Gradle 使用相同的编译器版本(通过 Eclipse)。但结果是一样的:使用 Ant,它可以正常工作,但使用 Gradle,我遇到了编译错误(即使我在 build.gradle 中更改了源和目标的兼容性)。此外,我尝试了另一件事:手动创建 jar 库(Eclipse 工作区中的项目 -> 导出.. -> Jar 文件)。与 Ant 一样,没有编译错误(只有警告,但没有一个与以前的泛型问题有关)。