Eclipse / Tomcat发布不必要/有问题的依赖项

时间:2014-06-09 16:34:34

标签: eclipse gradle vaadin7 embedded-tomcat-7 gradle-eclipse

首先,有点背景。

我正在努力将Eclipse Java Web项目转换为Gradle。我们使用Vaadin框架,目前使用Ant / Maven / Ivy管理项目。我们有另一个项目,其中包含Web项目所依赖的公共代码。在这两个项目中,我们的库文件JAR只包含在源代码中并提交给我们的VCS。切换到Gradle后,我们将使用从存储库中提取依赖项的首选方法;主要是Maven Central。

我已经完成了与当前Ant构建脚本相对应的Gradle构建脚本的创建。我为每个项目都有一个Gradle构建脚本,并且在根目录下有一个用于配置注入的设置脚本以及设置文件。我正在为这两个项目使用 java eclipse 插件,另外还为web项目使用 war vaadin 插件

现在问题。当我使用Gradle构建WAR时,它完美地工作,并且 WEB-INF / lib 目录仅包含我期望的JAR,基于依赖性配置。但是,当我在Eclipse中使用Tomcat发布项目时,我最终会在 WEB-INF / lib 目录中添加一些额外的JAR。大多数JAR都是无害的,只是不必要的,这就是我将它们从WAR中排除的原因,但是有一些实际上存在问题,因为Tomcat已经拥有它们。在一种情况下,它只是忽略了JAR,我得到了通常的消息:

  

[Tomcat] validateJarFile(*) - jar未加载。

在另一种情况下,我实际上在控制台中收到异常,即使应用程序似乎正常工作也很麻烦。我还注意到,与 testCompile 配置相关的所有依赖项也正在发布,这看起来并不合适。

确切的违规JAR是 tomcat-jdbc servlet-api-2.5 。编译我们的公共代码需要 tomcat-jdbc JAR。 servlet-api-2.5 JAR实际上只是 vaadin-client-compiler 的传递依赖。我已经删除了我们的Web项目中 vaadin-client-compiler 的依赖项,因为它似乎没有必要,但看起来它仍然被一个配置引入Gradle的 vaadin 插件。但是,在这两种情况下,我都使用 war 插件的 providedCompile 配置将它们排除在WAR之外。

所以我的问题是,如何让Tomcat / Eclipse不发布这些JAR? Gradle和Tomcat / Eclipse如何通信,或者根本不进行通信?从我可以收集到的内容来看,Gradle和Tomcat / Eclipse似乎只通过 .classpath 间接通信,Gradle的 eclipse 插件会修改。另外,我已经为Gradle尝试了 eclipse-wtp 插件。它似乎没有解决问题,因为有问题的JAR仍然被复制。我实际上甚至不确定是否需要使用这个插件,或者我只是简单地使用 eclipse 插件。

我还应该补充一点,我确实安装了 Gradle Integration for Eclipse "插件"通过 Eclipse Marketplace 。有了它,我使用配置 - >转换为它添加的Gradle Project 选项以及 Gradle - >它提供的刷新依赖关系功能。除此之外,我发现它是一个小小的车,所以我通常通过命令行运行Gradle。

以下是我的机器上运行 gradle -v 的输出:

------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time:   2013-12-17 09:28:15 UTC
Build number: none
Revision:     36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy:          2.2.0
JVM:          1.8.0_05 (Oracle Corporation 25.5-b02)
OS:           Mac OS X 10.9.3 x86_64

如果需要进一步说明,请与我们联系。我认为我必须做错事或缺少一些配置,因为我的场景肯定很常见。许多开发人员在Eclipse中使用Tomcat在本地测试Web应用程序,并且随着Gradle的普及,如果有人之前没有碰到过,我会感到惊讶。对于我们切换到Gradle的主要区别,就Tomcat / Eclipse而言,我们的依赖项现在是从存储库加载而不是直接在源代码中链接。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  

但是,当我在Eclipse中使用Tomcat发布项目时,我最终在WEB-INF / lib目录中添加了一堆额外的JAR。大多数JAR都是无害的,只是不必要的,这就是我将它们从WAR中排除的原因,但是有一些实际上是有问题的,因为Tomcat已经拥有它们。

这是gradle eclipse工具的一个已知问题。问题是,它并没有理解与提供的依赖关系。范围。有关详细信息,请参阅此问题: https://issuetracker.springsource.com/browse/STS-2380

此问题有解决方法。一些导致问题的常见依赖关系'可以通过您在首选项中指定的正则表达式列表全局排除。打开菜单"窗口>>偏好设置>> Gradle>> WTP&#34 ;.您可以在其中添加将用于从“部署程序集”中排除jar的正则表达式。