如何使用最新版本的jetty maven插件在不同的端口上运行多个webapp?
org.eclipse.jetty:jetty-maven-plugin
(撰写本文时为9.2.2.v20140723
)。
如,
foo.war -> localhost:8080/
bar.war -> localhost:8081/
baz.war -> localhost:8082/
The official documententation在 httpConnector
下说明了这一点name:
The name of the connector, which is useful for configuring contexts to
respond only on particular connectors.
很好,所以我配置了name
但是如何将其绑定到contextHandler
?这就是我到目前为止所拥有的
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
<configuration>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8080</port>
<name>instance_8080</name>
</connector>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8081</port>
<name>instance_8081</name>
</connector>
</connectors>
<contextHandlers>
<contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<war>a.war</war>
<contextPath>/</contextPath>
</contextHandler>
<contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<war>b.war</war>
<contextPath>/</contextPath>
</contextHandler>
</contextHandlers>
</plugin>
此not yet migrated wiki表示可以使用connectorNames
上的WebAppContext
属性完成此操作,但不再可用。
答案 0 :(得分:4)
查看文档:
http://www.eclipse.org/jetty/documentation/current/serving-webapp-from-particular-port.html
还可以使用具有命名连接器的虚拟主机机制的扩展来使某些Web应用程序仅可由特定连接器访问。如果连接器有一个名称&#34; MyConnector&#34;使用setName方法设置,然后可以使用特殊的虚拟主机名&#34; @ MyConnector&#34;来引用它。
然后你可以暗示上下文,因为它将包含虚拟主机:
使用@ConnectorName:
@ConnectorName 连接器名称,它不是严格意义上的虚拟主机,而是仅匹配在具有与Connector.setName(String)匹配的名称的连接器上接收的请求。
上面链接中的配置基于单独的jetty xml配置文件。我还没有对此进行过测试,但您可以将其插入contextHandler(它有一个setter):
<virtualHosts>
<virtualHost>@instance_8080</virtualHost>
</virtualHosts>
应与相应的连接器绑定。
你也可以用Java编程。
答案 1 :(得分:4)
扩展@BLuEGoD的答案,这是完整的工作配置
插件配置:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
<configuration>
<jettyXml>path/to/jetty.xml</jettyXml>
</configuration>
</plugin>
jetty.xml配置
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="connectors">
<Array type="org.eclipse.jetty.server.Connector">
<Item>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg> <Ref refid="Server"/> </Arg>
<Set name="port">8080</Set>
<Set name="name">instance_8080</Set>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg> <Ref refid="Server"/> </Arg>
<Set name="port">8081</Set>
<Set name="name">instance_8081</Set>
</New>
</Item>
</Array>
</Set>
<New id="context-foo" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<Set name="contextPath">/</Set>
<Set name="war">foo.war</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>@instance_8080</Item>
</Array>
</Set>
</New>
<New id="context-bar" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<Set name="contextPath">/</Set>
<Set name="war">bar.war</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>@instance_8081</Item>
</Array>
</Set>
</New>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<Ref refid="context-foo" />
</Item>
<Item>
<Ref refid="context-bar" />
</Item>
<Item>
<New class="org.eclipse.jetty.server.handler.DefaultHandler" />
</Item>
</Array>
</Set>
</New>
</Set>
答案 2 :(得分:0)
我尝试使用jettyXml参数代替connector
和contextHandlers
。为每场战争写一个xml config file,并在你的pom的jettyXml
参数中引用它们。