首页 > 解决方案 > 在委托给 gradle 的 IntelliJ 运行配置中使用“compileOnly”范围依赖项

问题描述

我正在使用 install4j 来捆绑我的 Java 应用程序。由于 install4j 带来了自己的 api,我将它作为 'compileOnly' 依赖项添加到 build.gradle

compileOnly(files("${project.projectDir}/lib/i4jruntime.jar"))

当我运行 gradle 任务run时,应用程序按预期启动。所以我假设run任务包括类路径中的 compileOnly 依赖项。

但是,当我使用 IntelliJ 运行配置来运行我的 Main 类时,它会因 ClassNotFoundException 而失败:

java.lang.ClassNotFoundException: com.install4j.api.launcher.SplashScreen$ConnectionException

对我来说很明显,我必须在运行配置中检查“包含具有“提供”范围的依赖项”,但是执行仍然失败。

令人惊讶的是,只有当我将构建和运行任务委托给 Gradle 时,运行配置才会失败。如果我在“使用构建和运行”的设置中选择“IntelliJ IDEA”,则运行配置按预期工作。

可以在GitHub 上找到示例项目。我IntelliJ 2019.3.4在 Windows 上运行并使用OpenJDK 11.0.1

这是 IDE 中的错误还是我遗漏了什么?


我在build.gradle中发现了使任务正常工作的小行run,现在这对我来说很有意义:

tasks.run {
  classpath = configurations.compileClasspath + sourceSets.main.output
}

但是我仍然认为使用“提供”范围检查包含依赖项应该使 IntelliJ 运行配置工作。至少这是我作为用户的期望。

标签: gradleintellij-idea

解决方案


推荐阅读