gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:02:17 25 4
gpt4 key购买 nike

首先,有一点背景知识。

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

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

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

[Tomcat] validateJarFile(*) - jar not loaded.



在另一种情况下,我实际上在控制台中收到异常,即使应用程序似乎正常工作,这也令人感到困扰。我还注意到与 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 插件的 提供的Compile 配置将它们从WAR中排除。

所以我的问题是,如何防止Tomcat / Eclipse发布这些JAR? Gradle和Tomcat / Eclipse如何通信,或者根本不通信?据我所知,似乎Gradle和Tomcat / Eclipse仅通过.classpath间接通信,Gradle的 eclipse 插件进行了修改。另外,我已经尝试了Gradle的 eclipse-wtp 插件。它似乎没有解决问题,因为有问题的JAR仍在被复制。实际上,我什至不确定我是否需要使用此插件,或者是否仅可以使用 Eclipse 插件。

我还应该补充一点,我确实通过Eclipse Marketplace安装了Gradle Integration for Eclipse“插件”。为此,我使用了它添加的Configure-> Convert to Gradle Project选项以及它提供的Gradle-> Refresh Dependencies功能。除此之外,我发现它有点bug,因此我主要是通过命令行运行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的主要区别似乎在于,现在我们的依赖项是从存储库加载的,而不是直接在源代码中链接的。

任何帮助是极大的赞赏。

最佳答案

However, when I use Tomcat inside Eclipse to publish the project I end up with a bunch of additional JARs in the WEB-INF/lib directory. Most of the JARs are harmless and just unnecessary, which is why I have excluded them from the WAR, but there are a couple that are actually problematic because Tomcat already has them.



这是the eclipse 工具的已知问题。问题在于它不了解具有“提供的”范围的依赖项。有关更多详细信息,请参见此问题:
https://issuetracker.springsource.com/browse/STS-2380

没有针对此问题的解决方法。可以通过在首选项中指定的正则表达式列表来全局排除某些“引起问题”的常见依赖项。打开菜单“窗口>>首选项>> Gradle >> WTP”。在这里可以添加正则表达式,该正则表达式将用于从“部署程序集”中排除jar。

关于eclipse - Eclipse/Tomcat发布不必要/有问题的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com