【问题标题】:How to compile only java classes with gradle without producing JAR如何只用 gradle 编译 java 类而不产生 JAR
【发布时间】:2017-08-03 09:01:30
【问题描述】:

我有我的 gradle 项目,使用 java 插件。

在我的情况下,我只需要调用 classes 任务来编译 java 文件,而不是创建 JAR - 需要它来加快某些过程。

如果我调用gradle classes,它也会生成 jar(我认为该任务具有依赖关系,因此也会运行构建 jar)。

您如何建议只编译类?我不想覆盖该任务,因为在某些情况下,我还需要运行正常的 gradle build 来生成 JAR。

我尝试使用 gradle classes -x jar 跳过 jar,但它似乎省略了外部依赖项并导致编译错误。

它是一个多项目,从根项目运行 gradle classes 会在某些项目中生成 JAR,您可以在此处看到 https://drive.google.com/file/d/0B0DLkIfwhVMEb25uWHcwX1V1QUk/view?usp=sharing

【问题讨论】:

标签: java gradle


【解决方案1】:

请参阅java plugin documentation 的下图。 classes 任务不应调用 jar

编辑

这是运行一个简单的 gradle 文件的结果

apply plugin: 'java'

输出:

> gradle classes
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE

BUILD SUCCESSFUL 

如您所见,jar 任务不在任务图中

您可以尝试将task tree 插件添加到您的构建中,然后运行gradle classes taskTree 以查看导致jar 任务添加到任务图中的原因

【讨论】:

  • 你可以运行它,你会看到它:)
  • 多项目可能会有所不同:(
  • 问题不在于多项目构建本身,而在于项目依赖的使用。要编译一个项目,您需要它的所有依赖项,因此对于模块依赖项,需要下载 JAR 文件,而对于项目依赖项,则构建 JAR 文件。对于不是另一个项目的项目依赖项的每个项目,只会执行classes 任务(及其依赖项)。即使您通过gradle :<my-subproject>:classes 调用特定的classes 任务,您最终仍会为<my-subproject> 的项目依赖项生成JAR 文件。
  • @lu.koerfer 我认为你是对的,你可以在评论中发表你写的东西,作为答案,所以我标记它?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多