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

Eclipse/Tomcat发布不必要/有问题的依赖项,eclipse,gradle,vaadin7,embedded-tomcat-7,gradle-eclipse,Eclipse,Gradle,Vaadin7,Embedded Tomcat 7,Gradle Eclipse,所以首先,有一点背景 我正在将EclipseJavaWeb项目转换为Gradle。我们使用Vaadin框架,目前使用Ant/Maven/Ivy管理项目。我们还有另一个项目,其中包含web项目所依赖的通用代码。在这两个项目中,我们的库文件JAR只包含在源代码中,并提交给我们的VCS。切换到Gradle后,我们将使用首选方法从存储库中提取依赖项;主要是马文中心 我已经完成了与当前Ant构建脚本相对应的Gradle构建脚本的创建。我为每个项目都有一个Gradle构建脚本,在根目录下还有一个用于配置注入

所以首先,有一点背景

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

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

现在来谈谈问题。当我使用Gradle构建WAR时,它工作得非常好,并且基于依赖项配置,WEB-INF/lib目录只包含我期望的JAR。然而,当我在Eclipse中使用Tomcat发布项目时,我在WEB-INF/lib目录中得到了一堆额外的JAR。大多数罐子都是无害的,只是没有必要,这就是为什么我把它们排除在战争之外,但是有一些罐子确实有问题,因为Tomcat已经有了它们。在一个例子中,它忽略了JAR,我得到了通常的消息:

[Tomcat]ValidateCharFile(*)-未加载jar

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

确切的违规jar是tomcatjdbcservlet-api-2.5。编译我们的通用代码需要tomcatjdbcJAR。servlet-api-2.5JAR实际上只是vaadin客户端编译器的一个可传递依赖项。在我们的web项目中,我已经删除了对vaadin客户机编译器的依赖项,因为它似乎不是必需的,但它看起来仍然是由Gradle的vaadin插件中的配置引入的。但是,在这两种情况下,我都使用war插件的providedCompile配置将它们排除在war之外

所以我的问题是,如何防止Tomcat/Eclipse发布这些JAR?Gradle和Tomcat/Eclipse是如何通信的,或者说它们到底是如何通信的?据我所知,Gradle和Tomcat/Eclipse似乎只通过.classpath进行间接通信,EclipseGradle插件修改了.classpath。此外,我还尝试了Gradle的EclipseWTP插件。它似乎没有解决问题,因为有问题的jar仍在被复制。实际上,我甚至不确定是否需要使用这个插件,或者是否可以简单地使用eclipse插件

我还应该补充一点,我确实通过Eclipse市场安装了Gradle Integration for Eclipse“插件”。我使用了它添加的Configure->Convert to Gradle项目选项以及它提供的Gradle->Refresh Dependencies功能。除此之外,我发现它有点问题,所以我主要是通过命令行运行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的流行,如果有人以前没有遇到过这种情况,我会感到惊讶。就Tomcat/Eclipse而言,切换到Gradle的主要区别似乎在于,依赖项现在是从存储库加载的,而不是直接链接到源代码中

非常感谢您的帮助

然而,当我在Eclipse中使用Tomcat发布项目时,我在WEB-INF/lib目录中得到了一堆额外的JAR。大多数罐子都是无害的,只是没有必要,这就是为什么我把它们排除在战争之外,但是有一些罐子确实有问题,因为Tomcat已经有了它们

这是GradleEclipse工具的一个已知问题。问题是它不了解具有“提供”范围的依赖项。有关详细信息,请参阅本期:


这个问题有一个解决办法。通过在首选项中指定的regexp列表,可以全局排除一些“导致问题”的常见依赖项。打开菜单“窗口>>首选项>>渐变>>WTP”。在这里,您可以添加用于从“部署程序集”中排除JAR的正则表达式

非常感谢你的回答!巧合的是,在看到你的回答前几个小时,我自己也遇到了这个问题。谢谢你也把这个问题联系起来,很高兴知道我不是唯一一个有这个问题的人,这似乎是一个非常普遍和关键的问题。我尝试了一下排除列表,它实际上似乎起了作用;第一次,它似乎仍然在部署有问题的JAR。我似乎无法使它始终如一地工作。我应该使用EclipseWTPgradle插件还是只使用常规的EclipseGradle插件?是否有方法刷新部署?“EclipseWTP”项目。该插件旨在与EclipseWTP(“Web工具平台”)集成。实际上,如果你使用这个插件,最好禁用“依赖管理”。这也使得格拉德尔