繁体   English   中英

Maven依赖与在WEB-INF / lib中手动添加jar之间的区别

[英]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手动复制到与现有存储库资源匹配的文件夹中。 我不敢相信这是正确的方法,但是它一直在为我解决。

所以我的问题是:

  1. 我是否需要将罐子双重引用,还是对其他可能的问题进行解决?
  2. 两种导入/引荐方法有什么区别?

奖励问题:为什么下面的错误会在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM