2014-08-31 7 views
2

Как я могу запустить несколько webapps на разных портах, используя последнюю версию плагина причал maven?Jetty maven плагин несколько webapps на разных портах

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

Параметр '<разъема реализация = "org.eclipse.jetty.server.nio.SelectChannelConnector"> "недействительна для Jetty 9.2.2 (этот класс не существует в Jetty 9) –

+0

@JoakimErdfelt, хороший комментарий. Ответ ниже содержит рабочий образец с единственным недостатком, для которого требуется 'jetty.xml'. –

+0

yep, [I] (http://projects.eclipse.org/content/joakim-erdfelt-committer-jetty-servlet-engine-and-http-server) я полностью осознаю это :) –

ответ

3

Посмотрите документацию:

http://www.eclipse.org/jetty/documentation/current/serving-webapp-from-particular-port.html

Также можно использовать расширение для виртуального механизма хоста с имени соединителям, чтобы сделать некоторые веб-приложения доступны только специальными разъемами. Если соединитель имеет имя «MyConnector», заданное с помощью метода setName, на это можно ссылаться со специальным именем виртуального хоста «@MyConnector».

Вы можете подразумевать контекст, как он будет содержать VirtualHost:

http://www.eclipse.org/jetty/documentation/current/configuring-virtual-hosts.html#different-virtual-hosts-different-contexts

Использование @ConnectorName:

@ConnectorName имя соединителя, которое не является строго виртуальный хост, но вместо этого будет соответствовать запросы, которые принимаются на коннекторах, у которых есть сопоставимое имя, заданное с помощью Connector.setName (String).

Конфигурация в приведенных выше ссылках основана на отдельном файле конфигурации xml. Я не проверял это, но возможно, вы можете вставить это в ваш contextHandler (который имеет сеттер):

<virtualHosts> 
    <virtualHost>@instance_8080</virtualHost> 
</virtualHosts> 

Это должно связываться с соответствующим разъемом.

Вы также можете сделать это программно в Java.

+0

Он работает, если ' jetty.xml' (пока нет поддержки для 'virtualHosts' в конфигурации плагина) –

0

Я бы попытался сделать это, используя параметр jettyXml вместо connector и contextHandlers. Напишите xml config file для каждой войны и укажите их в параметре jettyXml в вашей памяти.

4

Расширяя ответ @BLuEGoD, вот полные рабочие конфигурации

конфигурация Plugin:

<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> 

+0

Это голые' ServerConnectors' (т. е. те, у которых нет связанного с этим 'HttpConfiguration') –

+0

@Johan Sjoberg. Спасибо за Ваш ответ. Я попробовал. Он работал для одного webAppContext. У меня есть два webAppContext, имеющих разные пути контекста, но тот же самый порт. Когда я запускаю, сборка завершается с ошибкой, поскольку исключение вызывает высказывание, порт уже используется. Как я могу настроить один порт, но разные contexPaths? –

Смежные вопросы