0

jetty-maven-plugin および no-xml スプリング構成を試していますが、jetty の自動クラス リロードの使用に問題があります。私が web.xml を使用していたとき、すべてがうまくいきました。

WebApplicationInitializer.javaは古い web.xml を置き換えます

public class WebAppInitializer implements WebApplicationInitializer {
  @Override
  public void onStartup(ServletContext container) {        
    AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
    dispatcherContext.register(DispatcherModule.class);

    ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/");
  }
}

@Configuration アノテーションが付けられた ApplicationModuleは、ディスパッチャ サーブレットの構成を提供します。

@Configuration
@EnableWebMvc
@ComponentScan("com.id.try")
public class DispatcherModule {
  @Bean
  public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/pages/");
    resolver.setSuffix(".jsp");
    return resolver;
  }
}

最後に、依存関係を取得してjetty-maven-pluginを構成するための pom ファイル

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <!-- Initial Config: Truncated -->
  <properties>
    <spring.version>3.2.3.RELEASE</spring.version>
    <jetty.plugin.version>8.1.11.v20130520</jetty.plugin.version>
    <java.version>1.7</java.version>
   <javax.servlet-api.version>3.0.1</javax.servlet-api.version>
  </properties>

  <dependencies>
    <!-- Dependencies Truncated: versions are above -->
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.plugin.version}</version>
        <configuration>
          <scanIntervalSeconds>1</scanIntervalSeconds>
          <webApp>
            <contextPath>/</contextPath>
          </webApp>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

問題は、コントローラーの文字列と同じようなものを変更した後に再コンパイルすると、jetty はクラスをリロードするときに必要に応じて動作し、変更を検出して再起動しますが、NullPointerException

java.lang.NullPointerException
    at com.id.tryconfiguration.WebAppInitializer.onStartup(WebAppInitializer.java:18)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:180)
    at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:106)
    at org.eclipse.jetty.annotations.ServletContainerInitializerListener.doStart(ServletContainerInitializerListener.java:107)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:81)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:96)
    at org.eclipse.jetty.server.handler.ScopedHandler.doStart(ScopedHandler.java:115)
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:756)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1252)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:710)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:293)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.mortbay.jetty.plugin.JettyRunMojo.restartWebApp(JettyRunMojo.java:435)
    at org.mortbay.jetty.plugin.JettyRunMojo$1.filesChanged(JettyRunMojo.java:394)
    at org.eclipse.jetty.util.Scanner.reportBulkChanges(Scanner.java:691)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:551)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:403)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:353)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

構成クラスとWebApplicationInitializer.javaを除外しようとしましたが、問題の解決には役立ちません。

SpringMVC を no-xml と jetty クラスのリローダーで動作させるにはどうすればよいですか?

4

1 に答える 1

0

jetty-maven-plugin をソースに変更することで解決しました。

<groupId>org.eclipse.jetty</groupId>
<jetty.plugin.version>9.0.4.v20130625</jetty.plugin.version>
于 2013-06-29T21:42:35.317 に答える