簡體   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