"provided" 范围未在类路径中添加 jars。

5

我在使用一个依赖范围为“provided”的构件的pom文件。由于“provided”作用域,这些依赖jar包不会被添加到MANIFEST.MF的类路径中。

请问你能否帮助我,让这些jar包不被下载,但是应该被添加到类路径中。

1个回答

7
如果你想要语义上正确,就删除<scope>provided</scope>并将其保持默认值(<scope>compile</scope>)。然后为依赖项设置<optional>true</optional>,这样它将被包含在清单的类路径中。
使用provided范围实际上是在说你不希望它出现在清单的类路径中,因为它已经由容器提供。

非常感谢Michal。我正在EAR中使用上述内容,并且我正在引用EAR中的共享库。我可以看到JAR文件没有被下载,但是共享库JAR文件没有被引用。你能帮我解决这个问题吗? - sridhar
抱歉,我现在真的不明白你的意思。你能否用一些 ABC 来解释你的情况,但要说明它们各自的打包方式以及它们之间的依赖关系是怎样的。 - Michał Kalinowski
当然,我会解释的。抱歉造成困惑,Michal。我正在使用Maven。我有一个打包类型为EJB的构件A。我有一个打包类型为EAR的构件B。我在构件B中使用了WAR共享库引用。我在构件A中使用<scope>compile</scope>和<optional>true</optional>,因为所需的jar文件在共享库中。在您的帮助下,我已经将jar名称添加到EJB模块的MANIFEST类路径中,但是在部署EAR文件时,我遇到了classNotFound异常。这就是我面临的问题。 - sridhar
@MichałKalinowski,你的解决方案唯一的问题是你不能在这个Maven模块上使用依赖分析mojo。在我看来,最好的解决方案是创建一个新的Maven模块,将所有内容都放在runtime范围内。 - Tony Chemit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接