将外部库添加到基于Maven的JSF项目的正确方法

时间:2015-10-18 16:46:02

标签: java maven jsf jsf-2 primefaces

我正在开发基于Maven + JSF + PrimeFaces的项目,我可以运行它并且没有问题。但我有一些问题。

我在pom.xml中添加了PrimeFaces依赖项,在更新Maven后,Maven:org.primefaces:primefaces:5.2文件被添加到"外部库"部分。目前,我可以使用PrimeFaces命名空间等,但我不能使用Editor之类的组件,直到我将primefaces-5.2.jar文件添加到lib文件夹。然后代码工作,PrimeFaces组件加载到页面。

我做过的这两次进口有什么区别?

我在想,如果我在pom.xml中添加PrimeFaces依赖项并加载它,一切正常,但事实并非如此!现在,如果我从pom.xml删除PrimeFaces依赖项,所有与PrimeFaces相关的代码在IDE中变为红色并且看起来错过了,但因为我在lib文件夹中有PrimeFaces jar文件,代码仍然有效!我不明白。

1 个答案:

答案 0 :(得分:3)

您似乎正在混淆两个不同的问题,所以我会尝试简单解释一下。

当您向应用程序添加依赖项(通过POM)时,此依赖项将添加到此应用程序的类路径中。类路径表示编译应用程序所需的每个依赖项。这意味着,在添加它之后,您将能够使用并导入该依赖项中的类,并且代码将进行编译。如果没有类路径中的依赖关系,编译器就无法解析导入,因此当您从POM中删除它时会出现错误。每个IDE都有自己的方式以一种很好的格式向用户呈现类路径。对于您正在使用的IntelliJ,类路径将显示"外部库"名单。因此,"外部图书馆"只是IntelliJ的方式向您展示类路径是什么以及它包含什么。

到目前为止,所有事情都发生在"编译时"。 Web应用程序的结果是需要在Web服务器上部署的war文件。我们现在正在进入所谓的"运行时"。 war是包含Web应用程序的所有代码的文件,包括其所有依赖项。它们需要出现在war中,以便Web服务器可以正确加载类并解析导入。这些依赖项始终位于文件夹WEB-INF/lib中(这就是它的原理)。因此,此文件夹中的库表示运行时所需的依赖项,即应用程序需要运行

这就是为什么你们拥有它们(但它实际上是相同的依赖项):一个表示编译时所需的依赖项,另一个表示运行时所需的依赖项。

创建war文件时,Maven会自动将所有类路径依赖项(除了提供的依赖项)置于WEB-INF/lib中,以便在运行时正确解析它们。