我知道PROVIDED依赖项是由容器提供的,应用程序不需要生成这个JAR。 1)所以,我使用JBOSS EAP 7.0.0.GA,并且在这个模块文件夹中有以下jar:hibernate-core-5.0.9.Final-redhat-1.jar。提供依赖关系和JBOSS EAP 7
在我的项目我使用以下依赖性:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.9.Final-redhat-1</version>
</dependency>
它工作正常,没有错误。但我明白我应该使用“PROVIDED”范围,因为这个jar由容器提供。它为什么有效?
2)我有另一个例子。在Jboss Eap 7.0.0.GA中,我有以下jar:jboss-servlet-api_3.1_spec-1.0.0.Final-redhat-1.jar。但在我的项目中,我有以下几点:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
它工作得很好,但我不明白为什么。对我来说,正确的依赖关系应该是servlet-api_3.1_spec-1.0.0.Final-redhat-1提供的。为什么它也起作用?
你能举一个真实的例子来更好地了解情况吗? – RonaldoLanhellas
因此,如果我所有的依赖工作都没有“提供”范围,为什么我需要提供?只是为了一个轻量级的JAR? – RonaldoLanhellas
如果您将自己的依赖关系添加到JAR中,那么您将面临具有相同名称但不同版本的类可用于应用程序的风险。除非你非常详细地研究JEE类的加载规则 - 而应用服务器实际上是尊重它的 - 否则告诉哪些类将在运行时加载会很尴尬。所以这不仅仅是一个较轻的JAR,而是在运行时保持一致。 –