如何使用jetty-maven-plugin公开静态内容?

时间:2013-07-30 15:43:18

标签: java maven jetty

我目前正在Tomcat中运行一个应用程序,我希望它在Jetty中运行它。

我的Tomcat配置如下:

  • 1战
  • 1曝光图像的模块

我的Tomcat的server.xml的一些代码:

<Service name="Catalina">
    <Executor maxThreads="300" minSpareThreads="50" name="tomcatThreadPool" namePrefix="tomcat-http--"/>
    <Engine defaultHost="localhost" name="Catalina">
        <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
        </Realm>
        <Host appBase="webapps" autoDeploy="true" deployOnStartup="true" deployXML="true" name="localhost" unpackWARs="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
            <Context docBase="/home/neuquino/svn_co/FrameworkIMG/img" path="/img" reloadable="true"/>
            <Context docBase="myapp-web" path="/" reloadable="true" source="org.eclipse.jst.j2ee.server:myapp-web"/>
        </Host>
    </Engine>
    <Connector acceptCount="100" connectionTimeout="20000" executor="tomcatThreadPool" maxKeepAliveRequests="15" port="${bio.http.port}" protocol="org.apache.coyote.http11.Http11Protocol" redirectPort="${bio.https.port}"/>
</Service>

我无法在Jetty中重现的是这一行中配置的那个:

<Context docBase="/home/neuquino/svn_co/FrameworkIMG/img" path="/img" reloadable="true"/>

这是我的jetty-maven-plugin配置

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty.version}</version>
            <configuration>
                <webApp>
                    <contextPath>/</contextPath>
                    <war>${basedir}/target/myapp.war</war>
                </webApp>
            </configuration>
        </plugin>
    </plugins>
</build>

差异是在/ home / neuquino / svn_co / FrameworkIMG / img我没有webApp,该目录只包含文件夹和文件(在本例中为图像)

所以,问题是:我如何用Jetty公开静态内容?

没有必要告诉我如何使用maven的插件,如果你知道如何使用独立的码头发行版,它也对我有很大的帮助!

提前致谢!

2 个答案:

答案 0 :(得分:3)

正如@Neuquino回答自己的解决方案一样,但有一个例外:最新版本的jetty需要将上下文处理程序包装到特殊部分,如下所示:

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.2.3.v20140905</version>
            <configuration>
                <scanIntervalSeconds>10</scanIntervalSeconds>
                <contextHandlers>
                    <contextHandler implementation="org.eclipse.jetty.server.handler.ContextHandler">
                        <contextPath>/avatar/tmp</contextPath>
                        <resourceBase>/usr/local/resources/webapp/avatar/tmp</resourceBase>
                        <handler implementation="org.eclipse.jetty.server.handler.ResourceHandler" />
                    </contextHandler>
                </contextHandlers>
                <stopPort>9966</stopPort>
                <stopKey>foo</stopKey>
                <stopWait>10</stopWait>
            </configuration>
        </plugin>

它对我有用。

答案 1 :(得分:1)

我找到了解决方案,现在是:

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty.version}</version>
            <configuration>
                <webApp>
                    <contextPath>/</contextPath>
                    <war>${basedir}/target/myapp.war</war>
                </webApp>
                <contextHandler implementation="org.eclipse.jetty.server.handler.ContextHandler">
                    <contextPath>/img</contextPath>
                    <resourceBase>/home/neuquino/svn_co/FrameworkIMG/img</resourceBase>
                    <handler implementation="org.eclipse.jetty.server.handler.ResourceHandler" />
                </contextHandler>
            </configuration>
        </plugin>
    </plugins>
</build>