Embedded Jetty读取两个应用程序上下文

时间:2015-03-23 18:10:47

标签: spring embedded-jetty

我尝试使用嵌入式Jetty部署war文件。您可以在此处克隆最小的工作示例:https://github.com/guilty/jetty-test

当您构建项目并尝试使用jetty-runner(可在此处下载http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-runner/9.2.10.v20150310)运行war-project时,一切正常。

正如您所看到的,我有jar-project,它与war-projectclasses分类符号)有依赖关系。它尝试启动嵌入式Jetty服务器并部署war-project,但问题是,它读取application-context.xml两次。据我了解,它在类路径中找到它两次:一次在内置* .war中,一次在我使用classes分类器的依赖中。

如果您使用jetty-runner并调用Runner.main(new String[] { "path-to.war" }),也会发生同样的情况,但正如我之前所说,从命令行调用它时工作正常。

所以我的问题是,我猜是如何将classpath限制为Jetty,如果可能的话。

正如我所提到的,这是一个最小的工作示例,而不是真实世界的应用程序。如果我有任何帮助 - 请告诉我。

编辑:我已被要求在此处输入相关代码,因为链接可能已损坏。

由于我没有发布所有代码,我将描述这种情况。我有一个* .war项目,这是一个由spring提供支持的标准Web应用程序。它有一个类,如果spring创建了多个实例,则抛出异常(这应该永远不会发生,因为它的范围是单例)。

另一个项目使用war-project分类器引用classes(即获取src/main/javasrc/main/resources中的所有内容)并尝试部署war-project生成的war文件{1}}。以下是相关的部署代码:

Server server = new Server(8080);
WebAppContext webAppContext = new WebAppContext(args[0], "/");

server.setHandler(webAppContext);

server.start();

此代码运行,但服务器无法启动,因为我之前编写的bean的第二个实例被创建并引发异常。

war-project

的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:application-context.xml</param-value>
    </context-param>
</web-app>

war-project的application-context.xml只包含一个bean,默认(单例)范围,没有别的。

以下是pom.xml的相关jar-project部分:

    <dependency>
        <groupId>com.github.guilty.jettyTest</groupId>
        <artifactId>web-project</artifactId>
        <version>1.0-SNAPSHOT</version>
        <classifier>classes</classifier>
    </dependency>

0 个答案:

没有答案