[英]difference between maven dependency and manually adding jars in WEB-INF/lib
我是Web应用程序编程的新手,到目前为止,我正在使用Jetty服务器的eclipse / maven-setup开发Java Web应用程序。
但是,我不了解的一件事是包含外部jar的动态。 关于SO的许多教程和问答均声称将jar添加到WEB-INF / lib就足够了。 其他解释了我如何需要将它们添加为pom.xml中的依赖项。 我发现有时候第一个解决方案可行,而有时候我还需要添加依赖项。 我不知道为什么会这样。 此外,添加依赖项时,我已将外部.jar手动复制到与现有存储库资源匹配的文件夹中。 我不敢相信这是正确的方法,但是它一直在为我解决。
所以我的问题是:
奖励问题:为什么下面的错误会在Eclipse中显示? 这些引用了我在pom.xml中标记为依赖项的所有jar。 该网络应用程序应按预期运行,尽管一段时间后看似随机的不同运行时错误。 重新启动服务器可以解决此问题。
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个完全是空的。
没有任何区别。 Maven的pom.xml
有助于在.m2/repository
位置下载所有jar文件。 这些罐子可以用于不同的项目。 您无需手动下载。 但是,这是您第一次需要互联网连接才能下载所有jar文件。 在pom.xml
我们必须设置如下所示的依赖项或您要下载的任何版本的jar。 如果以后要更改版本(在以下情况下${spring.version}
则只需更改一个位置,则所有地方都会得到反映。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
如果您不使用pom.xml
则在传输项目时,您将不得不通过网络多次传输所有jar文件。
Maven在多个项目中提供了jar文件的可重用性。 您无需在WEB-INF/lib
文件夹中具有所有jar文件的深层副本。
编辑1
首次尝试时,任何项目都将从互联网下载所有jar文件,并将所有这些jar文件存储在.m2/repository
。 第二次在另一个项目中,当您尝试使用其他pom.xml
文件时,maven将尝试在本地(您的计算机) .m2/repository
找到jar,无论新项目的pom.xml
定义的依赖项是否存在.m2/repository
则maven不会尝试连接到Internet进行下载(因为所有内容都在.m2/repository
下载)。 如果pom.xml
文件找到新条目,则它将连接到Internet,然后从.m2/repository
下载
编辑2
Maven首先检查本地存储库( .m2/repository
)的依赖关系,如果未找到,则进行maven中央存储库 (需要Internet连接),即使maven无法在中央存储库中找到,我们也必须将这些内容告知pom.xml
文件从其他位置下载。
对于前
<repositories>
<repository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public/</url>
</repository>
</repositories>
Maven是一个构建工具,还可以管理您的项目依赖项。 它还可以帮助您在Eclipse之外构建项目。 您应该使用maven或直接在Eclipse中(或外部)直接管理项目依赖项。 在后一种情况下,可能不需要Maven。
至于红利问题,似乎存在一些连接问题,这导致无法下载工件( connection timed out
)-也许您的系统位于代理服务器之后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.