【问题标题】:Gradle How to include runtimeOnly dependencies in JavaExec classpath?Gradle 如何在 JavaExec 类路径中包含 runtimeOnly 依赖项?
【发布时间】:2017-07-04 17:04:18
【问题描述】:

Gradle 如何在 JavaExec 类路径中包含 runtimeOnly 依赖项? 例如,

子项目 foo:

dependencies {
    runtimeOnly files('libs/hello.jar')
}

子项目栏:

dependencies {
    compile project(':foo')
}

task execHello(type: JavaExec, dependsOn: 'compileJava') {      
     classpath = configurations.runtime         
     main 'myPackage.Hello'
}

主类 myPackage.Hello 在 libs/hello.jar 中定义,它是项目 foo 的 runtimeOnly 依赖项。

configurations.runtime 不包含 runtimeOnly 依赖项 hello.jar。如果我在项目 foo 中将 runtimeOnly 依赖项更改为 api 依赖项,它将起作用。

classpath = configurations.runtime + configuration.runtimeOnly

错误:runtimeOnly 无法显式解析。如何在 JavaExec 类路径中添加 hello.jar?

【问题讨论】:

  • 您使用的是Java plugin (apply plugin: 'java') 还是Java Library plugin (apply plugin: 'java-library')?
  • java 库。 compile project(":foo") 不会强制构建 jar。

标签: gradle runtime classpath javaexec-gradle-plugin


【解决方案1】:

runtimeruntimeOnly 用于声明依赖关系。要使用依赖项,您应该按照https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph 的文档使用配置runtimeClasspath

【讨论】:

  • runtimeClasspath 确实包含 runtimeOnly 依赖项,但类路径中依赖项目的一些 jar 不会被构建。即在使用 jar 之前不调用任务 jar。
  • 解决方法:在runtimeClasspath中使用之前添加dependOn来构建jar。
  • 不,dependsOn 是错误的方式。但是您需要向我展示一个示例,以便能够告诉您您做错了什么。你是如何依赖这些罐子的?
  • 如果项目A依赖项目B的依赖{ compile project(':B')},jar任务的顺序是不能保证的。有没有一种好方法可以说任务 B.jar 在 A.jar 之前调用而不使用dependsOn?
  • 我需要查看构建脚本。如果您正确制作了构建脚本,则应该保证顺序。
猜你喜欢
  • 2019-07-14
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 2016-06-04
相关资源
最近更新 更多