java - 使用 Spring MVC 的嵌入式 Jetty

标签 java spring maven spring-mvc jetty

我有一个用于我的 spring MVC 和 hibernate 应用程序的多个 maven 模块。

我的布局如下:

/myapp-web
/myapp-web/src/main/java
/myapp-web/src/main/webapp
/myapp-web/src/main/webapp/web-inf
/myapp-web/src/main/webapp/web-inf/web.xml
/myapp-web/src/main/webapp/web-inf/web-context.xml (spring wiring code etc)
/myapp-web/src/main/webapp/web-inf/config/hibernate.cfg.xml
/myapp-web/src/main/webapp/assets/... (folder for css, javascript, images)
/myapp-web/src/main/webapp/views (folders with freemarker .ftl files)

我的 pom.xml:

    ..
    <packaging>war</packaging>
    ..
    <dependency>
        <artifactId>jetty-server</artifactId>
        <groupId>org.eclipse.jetty</groupId>
        <version>${jetty-version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty-version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty-version}</version>
    </dependency>

我有另一个嵌入式 jetty 实例,我已成功设置并且可以运行。我什至设置了一个启动/停止脚本,因此它可以在 Ubuntu 上运行。这不是一个 spring mvc 应用程序,所以它更容易,因为它没有 web.xml 文件等。 我创建了一个/assembly/assembly.xml 文件,我是否也需要为 spring mvc 应用程序执行此操作?

然后我将其添加到我的 pom.xml 插件部分:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin}</version>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </plugin>
        <!-- jar plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>${maven-jar-plugin}</version>
            <configuration>
                <archive>

                </archive>
            </configuration>
        </plugin>
        <!-- jetty plugin -->
        <plugin>
            <!-- This plugin is needed for the servlet example -->
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty-version}</version>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.myapp.HttpServer</mainClass>
            </configuration>
        </plugin>

我是否需要为我的 spring mvc 应用程序做同样的事情?

我找到了一些 threads在 stackoverflow 上,但我无法理解 ant 部分,因为我没有使用 ant。我也不确定如何移植它以与 Maven 一起工作:

令我惊讶的是,除了单个 servlet 示异常(exception),没有关于如何执行此操作的良好引用。

我是否需要为此创建一个/assembly/assembly.xml 文件,或者对于 Web 应用程序情况有所不同?

有人可以逐步向我解释这个,以便我可以让它工作吗? 请询问,我会发布我的项目所需的任何内容,但我认为我涵盖了我当前环境的所有内容,即:

  • 使用多 Maven 设置
  • Spring MVC
  • hibernate
  • 模板的 freemarker
  • 上面给出了文件夹结构

目标是能够部署这个 war 文件,创建启动/停止脚本,这样我就可以将它部署到我的服务器并启动/停止 jetty 实例。

最佳答案

您不需要 assembly.xml 文件。

Jetty 用于启动 webapp,无论是否有弹性。所以,你必须在主类中创建一个 Jetty 服务器,添加你的 webapp 上下文并启动服务器。您可以通过两种方式解决您的问题: - 创建一个类似于“通用”Java EE 服务器的 web.xml,并将此描述符添加到您的 Jetty 服务器。 - 使用 servlet 上下文以编程方式在主类中加载 Spring 上下文: https://github.com/s4nchez/jetty-spring-mvc-jar

关于java - 使用 Spring MVC 的嵌入式 Jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285468/

相关文章:

java - 如何在 Java 上验证构造函数参数?

java - jBPM 和 JPA 事务管理器 : no local transaction to join

java - spring - 如何 Autowiring 数据源?

java - 灰熊/ Jersey : POJO-mapping does not work with Maven one-jar

java - Hibernate 插件不可用

java - Spring 联合测试

java - 为什么这个基于 Java 的 Spring 配置会创建一个单例 bean 的两个实例?

java - 为 Java 应用程序打包 JRE

maven - 使用 gradle 发布到 Maven 时删除附加到 Artifact 名称的默认 date.time

java - 了解实现情况