提供了Maven Dependency,它在存储库中不存在但在容器

时间:2017-05-02 09:41:37

标签: java maven artifactory

我必须使用一个库,所以我在我们的存储库中查找它并将其添加到依赖项中。启动Weblogic服务器时,我得到了一个DeploymentException(不明确的Bean名称)。

我发现这意味着我尝试将名称相同的Beans注册两次或更多次。

然后我发现该库已经由服务器(JEE容器)提供。因此这种例外是有道理的。然后,我将依赖项的范围更改为provided,将版本更改为容器提供的版本。

但后来我遇到了构建错误,因为依赖项无法通过该版本解决。我手动检查了我们的回购,发现这是真的。

  • 由容器提供的版本:1.0.4
  • 版本中存在的版本:1.0.7

如何解决此问题?我只是想告诉maven它应该使用部署时将存在的库。并忽略在编译期间它不可用的事实。 (如果这是可能的话)

1 个答案:

答案 0 :(得分:1)

我认为你误解了"提供"。

的某些方面

给予依赖"提供"意味着它仅用于编译但不包装到你的战争/耳中。这意味着将依赖关系指定为"提供"如果它不存在于存储库中。

解决问题的常用方法是使用版本1.0.7指定依赖项,并确保不调用版本1.0.4中不存在的任何类/方法。

然后你的应用程序将针对1.0.7进行编译,但是以1.0.4运行,这在大多数情况下都很好(请注意,Java无法检查或知道所包含的jar的版本 - 唯一的风险是1.0.7具有不同的接口如果只是数字的最后一部分改变了,则不大可能是1.0.4。