maven依赖关系和手动添加WEB-INF / lib中的jar之间的区别

我是编程Web应用程序的新手,到目前为止,我正在使用带有Jetty服务器的eclipse / maven-setup来开发java web应用程序。

然而,我不明白的一件事是包括外部jar子的动态。 许多教程和SO上的Q&A声称它足以将jar添加到WEB-INF / lib。 其他解释我如何在pom.xml中将它们作为依赖项添加。 我发现有时第一个解决方案有效,有时我还需要添加依赖项。 我不知道为什么会这样。 此外,在添加依赖项时,我已手动将外部.jars复制到与已经存在的存储库资源匹配的文件夹中。 我无法相信这是正确的做法,但它一直在为我而努力。

所以我的问题是:

  1. 我是否正确,jar子需要双重引用,或者我是否正在解决可能的其他问题?
  2. 两种导入/引用方法有什么区别?

奖金问题:为什么以下错误会出现在日食中? 这些是指我在pom.xml中标记为依赖项的所有jar。 Web应用程序应该运行,尽管在一段时间后看似随机的不同运行时错误。 重启服务器此刻修复了它。

Description Resource Path Location Type Missing artifact standard:standard:jar:1.1.2 pom.xml /WebApp line 1 Maven Dependency Problem Missing artifact jstl:jstl:jar:1.2 pom.xml /WebApp line 1 Maven Dependency Problem Missing artifact junit:junit:jar:4.8.2 pom.xml /WebApp line 1 Maven Dependency Problem ArtifactDescriptorException: Failed to read artifact descriptor for javax.servlet:javaee-web-api:jar:6.0: ArtifactResolutionException: Failure to transfer javax.servlet:javaee-web-api:pom:6.0 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact javax.servlet:javaee-web-api:pom:6.0 from/to central (http://repo.maven.apache.org/maven2): connection timed out to http://repo.maven.apache.org/maven2/javax/servlet/javaee-web-api/6.0/javaee-web-api-6.0.pom pom.xml /WebApp line 1 Maven Dependency Problem Missing artifact com4j:com4j:jar:1.0 pom.xml /WebApp line 1 Maven Dependency Problem WebApp Unknown Validation Message WebApp Unknown Validation Message WebApp Unknown Validation Message 

(是的,总共有8个错误,其中3个在eclipse中完全是空的。

根本没有任何区别。 Maven的pom.xml有助于下载.m2/repository位置的所有jar文件。 这些jar子可用于不同的项目。 您无需手动下载。 但是,您第一次需要互联网连接才能下载所有jar文件。 在pom.xml我们必须设置下面给出的依赖项或者您要下载的任何版本的jar。 如果稍后您想要更改版本(在下面的情况下${spring.version}那么您必须只更改一个地方并且随处可见。

   org.springframework spring-webmvc ${spring.version}  

如果您不使用pom.xml那么在转移项目时,您将不得不多次通过网络传输所有jar文件。

Maven在多个项目中提供了jar文件的可重用性。 您不需要在WEB-INF/lib文件夹中拥有所有jar文件的深层副本。

编辑1

在第一次尝试中,任何项目都将从Internet下载所有jar文件,并将所有这些jar文件存储在.m2/repository 。 第二次在另一个项目中,当你尝试使用其他pom.xml文件时,maven会尝试在本地(你的计算机) .m2/repository找到jars,无论你在新项目的pom.xml定义了哪些依赖项,如果这些文件都在那里.m2/repository然后maven将不会尝试连接到互联网进行下载(因为所有内容都是在.m2/repository下载的)。 如果pom.xml文件找到新条目,那么它将连接到Internet,然后在.m2/repository下载

编辑2

Maven首先检查本地存储库( .m2/repository )的依赖关系,如果没有找到maven中央存储库 (需要互联网连接),即使maven无法在中央存储库找到,那么我们必须将这些东西告诉pom.xml文件从其他位置下载。

对于Ex。

   java.net https://maven.java.net/content/repositories/public/   

maven是一个构建工具,它还管理您的项目依赖项。 它还可以帮助您在Eclipse之外构建项目。 您应该使用maven或直接在Eclipse中(或外部)管理项目依赖项。 在后一种情况下,你可能不需要专家。

至于奖金问题,看起来有一些连接问题导致工件没有下载( connection timed out ) – 也许你的系统在代理服务器后面。