如何在 Eclipse WTP 项目中使用 Gradle 依赖管理而不出错?

How can I use Gradle dependency managemenent with an Eclipse WTP project without errors?

我是 Gradle 的新手。我已使用 Gradle 插件将我的项目设置为 Gradle Project,以便根据 gradle 构建脚本重建项目配置。我正在尝试将我的应用程序设置为动态 Web 项目(使用 eclipse-wtp Gradle 插件),这样做,我需要我的项目可以访问 Tomcat Server Runtime 图书馆。

显然,在 Gradle 中执行此操作的方法是将其设置为 "provided dependency,",它应该仅用于编译而不用于部署。但是,这对我的 IDE Tomcat 部署不起作用。看起来 Gradle 正在配置两组依赖项:Web App Libraries,它遵守提供的依赖项设置,而 Grade Dependencies,它不遵守。 两者 都包含在 Web 应用程序部署程序集中,这意味着 "provided" Tomcat jar 正在部署并阻止 Tomcat 启动。

如何配置 Gradle 以防止 Gradle Dependencies 自动包含在 Eclipse 部署程序集屏幕中?我无法手动删除它,因为它会在下次 Gradle 运行时刷新。


我已经尝试过Remove Gradle Dependency Management(右键单击项目 -> Gradle -> 删除 Gradle 依赖管理),但这不起作用。它解决了 Tomcat 问题,但随后我的测试依赖项不再位于构建路径上,这导致我的单元测试出现错误。

如果您随后还手动 Gradle -> Refresh All,则以上内容实际上有效。这将导致 Gradle Eclipse 插件重新生成配置文件,不属于 Web App Libraries 的依赖项将包含在 Referenced Libraries.

Gradle -> Remove Dependency Management 只会删除 Grade Dependencies 库,它本身是不够的。


我正在使用:

这是导致问题的库,它包括 "provided" Tomcat 罐子:

这是我的 build.gradle 文件:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
webAppDirName = 'WebContent'

// <snip>

dependencies {
    providedCompile('org.apache.tomcat:tomcat-catalina:7.0.34')

    // <snip>
}

// snip

使用 WTP 项目的推荐方法是在禁用 'dependency management' 的情况下导入它们。这是因为 Gradle 用于填充 'Gradle Dependencies' 容器的工具 API 不支持 WTP 项目。

如果您已经导入了项目,您可以按如下方式禁用依赖管理:

右键单击项目并 select "Gradle >> Disable Dependency Management"。

由于缺少依赖项,您可能会在项目中看到错误。

右键单击项目并 select "Gradle >> Refresh All"。

这将执行 'eclipse' 任务并生成 eclipse 元数据(.classpath 文件等),其方式与从命令行执行此操作的方式大致相同。

如果这对您不起作用,还有另一种选择。您可以使 'Dependency managent' 处于启用状态,并且有一个全局排除过滤器可用于从部署程序集中删除 'unwanted stuff'。这确实不是一个很好的解决方案,但更多的是针对您所遇到的问题的解决方法。

前往 "Windows >> Preferences >> Gradle >> WTP"。您可以在那里编辑正则表达式列表,以从部署程序集中删除 tomcat 依赖项。