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

时间:2014-03-12 08:18:39

标签: java eclipse maven jar jetty

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

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

所以我的问题是:

  1. 我是否认为罐子需要双重引用,或者我是否正在解决可能的其他问题?
  2. 两种导入/引荐方法有什么区别?
  3. 奖金问题:为什么以下错误会出现在eclipse中?这些是指我在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中完全为空。

2 个答案:

答案 0 :(得分:1)

根本没有任何区别。 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查找新项目pom.xml中定义的任何依赖项的jars文件在.m2/repository中,然后maven将不会尝试连接到互联网进行下载(因为所有内容都在.m2/repository下载)。 如果pom.xml文件找到新条目,则它将连接到互联网,然后在.m2/repository

下载

编辑2

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

对于Ex。

<repositories>
    <repository>
        <id>java.net</id>
        <url>https://maven.java.net/content/repositories/public/</url>
    </repository>
</repositories>

答案 1 :(得分:0)

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

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