未解决的引用 war.getWebAppDir()

Unresolved reference war.getWebAppDir()

在我的项目中,我应用了 WAR plugin and have call war.getWebAppDir()。 在具有 kotlin DSL 1.0-rc-6 的 Gradle 4.10.2 中,调用工作正常。 但是在具有 Kotlin DSL 1.0.3 的 Gradle 5.0-rc-3 中,调用失败并显示消息 Unresolved reference : getWebAppDir

我正在使用 gradle 4.10.2,调用 war.getWebAppDir() 在我的情况下不起作用。构建失败说没有找到 属性。不确定为什么它适用于您的情况。

通话:

logger.info " web app dir is : ${war.getWebAppDir()}"

错误:

Could not find method getWebAppDir() for arguments [] on task ':war' of type org.gradle.api.tasks.bundling.War

快速搜索后,我发现 getWebAppDir 是由 WarPluginConvention 而不是 WAR 插件本身提供的 属性。所以只调用了 getWebAppDir() 并且在我的情况下似乎一切正常。

通话:

logger.info " web app dir is : ${getWebAppDir()}"

输出:

web app dir is : D:\Practice\Gradle\GradleInAction\todo-webapp-customized\webfiles

我不确定这是否与 Kotlin DSL 完全相关,因为它在失败日志中明确表示无法在 WAR 任务中找到 属性。

因此尝试通过 war 任务调用它会出错。

您能否尝试启用日志和堆栈跟踪并共享它们。 我只是在学习gradle,不是专家,甚至不是中级。只是尝试通过帮助他人学习来学习。

编辑 1 开始

尝试使用 Gradle 5.0-rc-3。在我的案例中展示了类似的行为。与上面相同的输出。

编辑 1 结束

我问了this question on the Gradle-Kotlin-dsl github site. It was answered by Paul Merlin

Gradle 5 引入了任务访问器。所以现在 tasks {} 块中的 war 解析为 tasks.war,即 War task, instead of resolving to project.war which is the WarPluginConvention that has this webAppDir 属性。这可以通过从 IDE 导航到 webAppDir 的源代码或打印 war 来了解它是什么来发现。您应该在任务 {} 块中将旧的 4.10.2 war.getWebAppDir() 调用更新为 5.0 方式 project.war.getWebAppDir()