13

将 Tomcat 配置为直接从我的工作空间内的项目目录提供服务的理想方法是什么?(相关

我希望我的静态 Web 资源在我对它们进行更改时立即可用,而不必将它们发布到单独的目录中。似乎实现此目的的最佳方法是直接提供文件,而不是文件的已发布/部署副本。


或者,我对其他选项(不同的应用程序服务器或 IDE)持开放态度,这些选项可以使 Java Web 应用程序的开发速度更快。发布和重新部署每一个小改动都占用了太多时间。

我尝试过 JRebel 和 FileSync(它们都在一定程度上起作用),但他们尝试修补不应该存在的问题。

4

9 回答 9

9

我从来没有真正喜欢过与 Eclipse 捆绑在一起的 WTP 插件。

过去,我在 Eclipse 的Sysdeo Tomcat 插件上取得了很大的成功。

它使用 Eclipse 为您构建的已编译类,因此当您进行与接口兼容的更改(例如更改方法中的某些内容)时,它会立即部署而无需重新启动。更改方法签名或在类中添加新方法确实需要重新启动,但由于没有冗长的 WAR 构建步骤,因此整个构建/部署周期无论如何都会减少。

此外,Sysdeo 插件使用您工作区中的静态资产,因此无需复制或部署它们。只需进行更改,刷新浏览器,您就会立即看到更改。

不幸的是,几年前该插件的开发似乎停止了。根据他们网站上的矩阵,最新支持的 Eclipse 版本是 3.6。然而,根据这个页面,该插件仍然适用于 Eclipse 4.2 (Juno)。

希望这可以帮助。使用 Sysdeo 确实是比 WTP 更好的体验!

于 2013-07-03T14:36:40.360 回答
5

我很确定 Maven 可以做这种事情。甚至可能已经配置了这种行为的 Tomcat 原型。

我将 Maven Archetype 与 JBoss AS 一起使用。当我更改我的 .css 或 .xhtml 文件或任何其他静态资源并将其保存在 Eclipse 中时,这些资源会立即与我的部署同步。

编辑:

这是我的解决方案的快速教程:

我正在使用什么:

  • JBoss AS 7.1.1
  • 面向 Java EE 开发人员的 Eclipse Juno

较旧或较新的版本也应该完成这项工作。

  1. 在 Eclipse IDE 中通过 Eclipse Marketplace 安装 JBoss Tools 插件
    这将在您的 IDE 中安装几个插件,例如 JBoss AS 服务器连接器或 Maven。
  2. 将 JBoss 存储库添加到您的 Maven 配置
    窗口 -> 首选项 -> Maven -> 用户设置 -> 打开文件
    JBoss Maven添加存储库
  3. 添加 JBoss 服务器运行时
    窗口 -> 首选项 -> 服务器 -> 运行时环境
    按照向导,非常标准
  4. 从 Eclipse 服务器选项卡添加服务器实例
  5. 创建一个新的 Maven 项目注意
    不要选中复选框Create a simple project(skip archetype) 选择 Archetype jboss-javaee6-webapp-blank-archetype 7.1.3.CR7

原型

现在您的项目已准备就绪:)

于 2013-07-06T21:16:52.400 回答
5

我不想宣传任何东西,但Netbeans IDE支持所有这些开箱即用,不需要插件,它还包括一个预配置的 tomcat;

它支持在保存时复制静态资源,因此无需重新构建整个应用程序:

在此处输入图像描述

至于任何 java 更改,如果您处于调试模式,则有一个Apply Code Changes按钮,它将重建和部署更改的文件(假设没有进行结构更改)

或者使用具有出色功能的 JRebel(用于部署更改的 java 文件)

于 2013-07-08T13:20:37.140 回答
2

不清楚您是使用 Eclipse WTP 方法和 Tomcat 还是某些自定义部署策略。

由于重新发布更改的 JAR 不可靠,我不再在 Eclipse 中运行 Tomcat。我现在通过 Run Jetty Run Eclipse 插件(可在 Eclipse Marketplace 中获得)使用 Jetty。这似乎是从工作区运行的,并且不执行 Eclipse 与 Tomcat 一起使用的重新发布到部署目录的方法。

您不会使用此选项重新加载动态代码,但您可以使用 JRebel 重新添加该功能。

更进一步,切换到支持立即查看更改而无需重新发布/重新启动的 JVM 语言/框架,例如:

  • 播放 2(Scala 和 Java)
  • 圣杯(Groovy)
  • Vert.X(各种 JVM 语言)。
于 2013-07-03T13:01:06.553 回答
1

我建议将sbt与其网络插件一起使用。

关键特性sbt持续集成模式:这基本上意味着sbt,如果文件更改,则触发命令。

所以正常sbt的命令(与网络插件有关)是

容器:启动
容器:停止
容器:重新加载/ ...容器:重新加载

但在持续集成模式下使用它(以 开头的命令~

〜;容器:开始;容器:重新加载/

当源代码或任何其他文件发生更改时,它将自动重新加载Web 应用程序。

所以我只保存 servlet、Java 源代码、Scala 源代码,然后在浏览器中点击重新加载,这确实节省了很多时间

这就是 Grails 的感觉,但以 Java 为主要编程语言。

附加信息

  • sbt在终端中运行(我不知道是否有 Eclipse 插件可以从 Eclipse 中启动它)
  • sbt可以开箱即用地编译 Java 和 Scala 项目。
  • 正在使用网络插件jetty(我不知道是否也可以嵌入tomcat
  • 无需了解 Scala 即可配置sbt,但您应该阅读教程。
  • 此解决方案与 IDE 无关;所以它也可以在没有 IDE 的情况下工作(仅从命令行)。
于 2013-07-05T20:03:07.540 回答
1

这取决于您是否反对采取某些行动,例如点击“发布”,或者您是否反对复制的发生,即使它是透明的。假设您在 Tomcat 的服务器配置中选择了“发布”下的“资源更改时自动发布”,则 CSS、HTML 或 JavaScript 等静态内容应在您保存时自动部署(即复制)。您应该在浏览器中刷新并查看更改,除非有一些浏览器缓存。

如果您真的希望 Tomcat 直接查看您项目的静态文件,则在没有部署任何内容的情况下运行 Tomcat(除非您在同一个项目中部署 Java 类)并在>下编辑server.xml文件并在下面添加一些元素,如下所示:ServersApache Tomcat v7.0 at localhost-configContextHost

<Context docBase="C:\path\workspace\project\WebContent\css" path="/project/css" reloadable="true" />
于 2013-07-08T14:39:45.850 回答
0

使用grizzly网络服务器。它完全在 java 中实现,因此您具有完全的平台独立性,您可以直接从您的工作区启动它,而无需配置任何外部程序。静态部署资源很容易。您只需要javax.ws.rs.core.Application像示例中那样派生和添加资源。

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

/**
 * Application class that contains resources for the RESTful web service.
 *
 */
public class MyApplication extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(com.rest.test.SomeClass.class);
        return s;
    }
}

这是配置 servlet 适配器所必需的。也可以动态添加资源。但是我无法告诉您使用动态方法更新资源的速度有多快。无论如何,网上有足够的文档可用。

private static GrizzlyWebServer getServer(int port,
    String webResourcesPath, String contextPath) {
    GrizzlyWebServer gws = new GrizzlyWebServer(port, webResourcesPath);

    ServletAdapter sa = new ServletAdapter();

    /* here they are added statically */
    sa.addInitParameter("javax.ws.rs.Application", "com.rest.MyApplication");


    sa.setContextPath(contextPath);
    sa.setServletInstance(new ServletContainer());
    sa.setProperty("load-on-startup", 1);
    gws.addGrizzlyAdapter(sa, new String[] { contextPath });

    return gws;

}

于 2013-07-09T15:48:57.887 回答
0

默认情况下,它仅共享位于$CATALINA_HOME/webapps. $CATALINA_BASE/conf/server.xml您可以在中更改它<Host />

检查属性的文档appBase

希望它有所帮助。

于 2013-06-25T19:40:30.130 回答
-1

通常 web 应用程序托管在 webapps 目录下,但也可以将外部目录配置为 tomcat 中的 web 应用程序主机目录。您可以简单地将 Eclipse 工作区项目输出目录设置为应用程序库。这可以通过使用 Tomcat 的管理器应用程序从外部目录部署应用程序或通过简单地编辑 server.xml(位于 conf 目录下)来定义您的应用程序来完成,如下所示:

....

<Context docBase="D:\your\eclipse\workspace\project\WebContent" path="/projectbaseurl"   reloadable="true"/>

</Host>
</Engine>
</Service>
</Server>
于 2013-07-03T11:30:31.023 回答