2017-10-20 272 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库将消失,您的项目突然缺少依赖关系。将它添加回来,错误消失。

相关问题