2017-10-20 204 views
0

當我們在Eclipse中創建動態Web項目時,可以選擇設置目標運行時。這基本上設置了類路徑,以確保我們的項目找到項目運行所需的所有必需的服務器類。然後,當我們通過點擊「Run as」 - >「Run on Server」來運行項目時,我們再次獲得服務器列表供您選擇。我知道我們總是可以選擇「運行項目時始終使用此服務器」。但是我的問題是,當你已經選擇目標運行時時,向用戶提供一系列服務器來選擇再次運行他們的項目的原理是什麼。它是否像「在與目標運行時不同的服務器上測試您的項目」功能?Eclipse - 在「在服務器上運行」中選擇服務器與設置「目標運行時」

回答

0

當您爲項目指定服務器運行時環境時,服務器容器JAR將被添加到項目的類路徑中。 IDE也不允許添加目標運行時服務器不支持的任何項目構面。這意味着目標運行時將確定可能的項目構面。 一旦創建項目,服務器容器類路徑將有助於項目的類路徑,因此項目所需的任何JAR以及服務器容器中可用的JAR都將可用於您的項目。例如,如果項目需要Java Servlet API並將Apache Tomcat添加爲Target Runtime,則Tomcat Catalina - Java Servlet API將在項目類路徑中可用,並且此運行時環境提供的所有JAR將用於編譯。這意味着您不需要手動添加Servlet API JAR到您的項目類路徑,目標運行時將提供它們。 編譯完成後,一旦包含所有必需的JAR,就可以在其他服務器上運行項目,不必僅在目標運行時運行。 例如,在開發針對Apache Tomcat的Java Web應用程序時,編譯後可以將其部署到另一個servlet容器或應用程序服務器上。

此外,應用程序或Web服務器可能會爲您的JRE使用不同的JDK版本,而不是您當前的項目版本。通過指定目標運行時服務器,確保在項目中使用正確的庫。

回答最後一個問題:Target Runtime將貢獻Servlet API,以便您可以編譯您的項目。否則,您將不得不手動添加JAR以使用Servlet API,例如HttpServlet或HttpServletRequest或HttpServletResponse對象。如果不在類路徑上分配JAR,則無法進行編譯,因爲依賴關係沒有解決。關於你的問題,哪個實現將在運行時使用 - 取決於項目設置。例如,如果你使用maven作爲你的構建工具,你可以在maven中聲明依賴範圍:編譯範圍是默認值,意味着編譯期間項目的類路徑中應該有依賴關係。但是,如果您指出了提供的範圍 - 這意味着JDK或服務器容器將在運行時提供依賴性。因此,例如,如果您指定了依賴項的範圍,您將在運行時獲得由servlet容器提供的Servlet API,即您選擇「運行在服務器上」的相同容器。

+0

這很有趣.....所以糾正我,如果我錯了。所以你說我可以添加Target Runtime來編譯我的項目,也就是說我可以使用Tomcat中的Java Servlet實現來編譯我的項目。但是當運行項目時,我可以讓我的項目運行例如Java Servlet的JBoss實現(即通過選擇在不同的服務器上運行)。所以我的編譯使用了Servlet API的一個實現。我的運行時使用不同的實現。 –

+0

或者你是否在說我可以從Tomcat中接受Servlet實現類,並讓我的項目在運行時在JBoss服務器上使用它們,例如 –

+0

我已經使用最後一個問題的答案更新了我的信息。它不適合commen。 – fg78nc

0

查看您的項目庫文件夾。您會看到一個來自運行時服務器的文件夾,如「Apache Tomcat v7.0」。這給你的項目依賴如「javax.servlet」。如果右鍵單擊項目>屬性>目標運行時,則可以刪除服務器運行時並查看會發生什麼情況。 Apache Tomcat庫將消失,您的項目突然缺少依賴關係。將它添加回來,錯誤消失。