Развертывание нескольких военных файлов в jetty8 - PullRequest
1 голос
/ 08 сентября 2011

Как развернуть несколько файлов WAR веб-приложений в Jetty 8 с maven-jetty-plugin?

<contextHandlers>
  <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext">
    <war>${basedir}/dir/mywar.war</war>
  <contextPath>/path</contextPath>
</contextHandler>

Кажется, работает только на более старых версиях плагинов.

1 Ответ

1 голос
/ 15 ноября 2011

Используйте следующий фрагмент из файла pom.xml. Это адаптировано из инструкций сервера Jetty, и хотя оно предназначено для Jetty7, его можно легко адаптировать для более поздних версий.

pom.xml

  <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <!-- Jetty 7.3+ requires Maven 3+ -->
    <!-- Keep with Jetty 7.6.0 to avoid startup delays from Servlet API 3.0 -->
    <version>7.6.0.RC1</version>
    <configuration>
      <stopKey>STOP</stopKey>
      <stopPort>8009</stopPort>
      <scanIntervalSeconds>10</scanIntervalSeconds>
      <!-- Provide some JNDI resources (optional) -->
      <jettyEnvXml>src/test/resources/jetty-jndi-config.xml</jettyEnvXml>
      <!-- Register this application as a context -->
      <webAppConfig>
        <contextPath>/example</contextPath>
      </webAppConfig>
      <!-- Allow resources on the test classpath to be available -->
      <useTestClasspath>true</useTestClasspath>
      <!-- Add in any supporting application contexts (use dependencies section) -->
      <contextHandlers>
        <!-- Supporting WAR (note the use of a property entry for version, and see the dependency later - also Jetty 7 uses org.eclipse...) -->
        <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
          <war>
            ${settings.localRepository}/org/example/supporting-war/${supporting-war.version}/supporting-war-${supporting-war.version}.war
          </war>
          <contextPath>/supporting-war</contextPath>
        </contextHandler>
      </contextHandlers>
      <connectors>
        <!-- Later versions of Jetty don't require the Connector to be specified -->
        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
          <port>8080</port>
          <maxIdleTime>60000</maxIdleTime>
        </connector>
        <!-- SSL for localhost support -->
        <connector implementation="org.mortbay.jetty.security.SslSocketConnector">
          <port>8443</port>
          <maxIdleTime>60000</maxIdleTime>
          <!-- Provide a local key store for serving up SSL certificates -->
          <keystore>src/test/resources/jetty-ssl.keystore</keystore>
          <!-- Pick any password you like -->
          <password>jetty6</password>
          <keyPassword>jetty6</keyPassword>
        </connector>
      </connectors>
    </configuration>
    <dependencies>
      <!-- This ensures that WAR files are downloaded from the repo -->
      <!-- Example supporting WAR  -->
      <dependency>
        <groupId>org.example</groupId>
        <artifactId>supporting-war</artifactId>
        <version>${supporting-war.version}</version>
        <scope>compile</scope>
        <type>war</type>
      </dependency>
    </dependencies>
  </plugin>

Я оставил там конфигурацию SSL и JNDI на случай, если кому-то понадобится посмотреть, как они настроены. Очевидно, что им понадобятся вспомогательные файлы. SSL предполагает, что вы уже создали подходящее хранилище ключей, содержащее сертификат SSL, например, для localhost. Файл конфигурации JNDI выглядит следующим образом:

Пристань-JNDI-config.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <New id="ExampleDB" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>java:jdbc/ExampleDB</Arg>
    <Arg>
      <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <Set name="driverClass">oracle.jdbc.driver.OracleDriver</Set>
        <Set name="jdbcUrl">jdbc:oracle:thin:@//host:port/schema</Set>
        <Set name="user">user</Set>
        <Set name="password">password</Set>
        <!-- Configure a simple connection test with timeout for subsequent queries -->
        <Set name="preferredTestQuery">select 1 from dual</Set>
        <Set name="checkoutTimeout">5000</Set>
      </New>
    </Arg>
  </New>
</Configure>

Это позволит искать ресурсы JNDI, используя, например, фабрику bean-компонентов Spring, например:

<bean id="exampleDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:jdbc/ExampleDB"/>
    <property name="resourceRef" value="true"/>
  </bean>

Обратите внимание, что ссылки C3P0 и Oracle будут вводить зависимости, которые якобы являются локальными для вашего сервера Jetty, поэтому должны быть помещены в раздел <plugin><dependencies> вместе с WAR. Они не должны быть в основных зависимостях.

Таким образом, теперь ваша сборка Maven будет содержать встроенный веб-сервер Jetty, настроенный для работы с несколькими WAR-файлами, все они связаны с версией pom.xml, обеспечивая как HTTP, так и HTTPS, и поддерживаются подключением к пуле базы данных. Это практически все, что вам нужно прямо из коробки для интегрированной среды разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...