2012-07-01 2 views
2

У меня есть несколько модулей maven для моего весеннего MVC и спящего режима.Встраиваемый причал с пружиной MVC

Моя раскладка выглядит следующим образом:

/myapp-web 
/myapp-web/src/main/java 
/myapp-web/src/main/webapp 
/myapp-web/src/main/webapp/web-inf 
/myapp-web/src/main/webapp/web-inf/web.xml 
/myapp-web/src/main/webapp/web-inf/web-context.xml (spring wiring code etc) 
/myapp-web/src/main/webapp/web-inf/config/hibernate.cfg.xml 
/myapp-web/src/main/webapp/assets/... (folder for css, javascript, images) 
/myapp-web/src/main/webapp/views (folders with freemarker .ftl files) 

Мой pom.xml:

.. 
    <packaging>war</packaging> 
    .. 
    <dependency> 
     <artifactId>jetty-server</artifactId> 
     <groupId>org.eclipse.jetty</groupId> 
     <version>${jetty-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>${jetty-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>${jetty-version}</version> 
    </dependency> 

У меня есть еще один экземпляр встроенного причалу, что я успешно установить и я могу бежать. Я даже настраиваю сценарий запуска/остановки, поэтому он работает на Ubuntu. Это не было приложение mvc для Spring, поэтому было проще, так как в нем нет файла web.xml и т. Д. Я создал файл /assembly/assembly.xml, мне нужно сделать это для приложения spring mvc также?

Затем я добавил это к моему pom.xml плагин раздела:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>${maven-assembly-plugin}</version> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 
     <!-- jar plugin --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>${maven-jar-plugin}</version> 
      <configuration> 
       <archive> 

       </archive> 
      </configuration> 
     </plugin> 
     <!-- jetty plugin --> 
     <plugin> 
      <!-- This plugin is needed for the servlet example --> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty-version}</version> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.myapp.HttpServer</mainClass> 
      </configuration> 
     </plugin> 

мне нужно сделать то же самое для моей Spring MVC приложения?

Я нашел несколько threads на stackoverflow, но я не могу понять муравьиную часть, поскольку я не использую муравьев. Я также не уверен, как подключить его к работе с maven:

Я удивлен, что нет ни одной хорошей справки о том, как это сделать, кроме примера с одним сервлетом.

Должен ли я создать файл /assembly/assembly.xml для этого, или для веб-приложения все по-другому?

Может кто-нибудь объяснить это мне шаг за шагом, чтобы я мог заставить это работать? Пожалуйста, спросите, и я буду размещать все необходимое для моего проекта, но я думаю, что я покрыл все, что моя текущая среда имеет, то есть:

  • с использованием нескольких настроек с Maven
  • Spring MVC
  • зимует
  • FreeMarker для шаблонов
  • структура
  • папки приведена выше

цель состоит в том, чтобы иметь возможность развернуть эту ва r, создайте сценарии запуска/остановки, чтобы я мог развернуть это на своем сервере и запустить/остановить экземпляр причала.

+0

Если вы придерживаетесь стандартного макета проекта maven (что вам кажется), команда maven jetty: run подберет ваше веб-приложение из соответствующего пути вместо загрузки .war. В простых проектах, которые я использовал, не было никакой дополнительной конфигурации и было достаточно для тестирования и разработки. Если вам нужно развернуть произведенное.войну, посмотрите [плагин для груза] (http://cargo.codehaus.org/Maven2+plugin)? – Pyranja

+0

Я не собираюсь запускать пристань локально, используя команду mvn jetty: run, это для развертывания. – Blankman

ответ

7

Вам не нужен файл assembly.xml.

Jetty используется для запуска webapp, подпружиненного или нет. Итак, вы должны создать сервер Jetty в основном классе, добавить свой контекст webapp и запустить сервер. Вы можете решить свою проблему двумя способами: - создать web.xml, как с «общим» Java EE-сервером, и добавить этот дескриптор на ваш сервер Jetty. - загрузить контекст Spring в главном классе с контекстом сервлета programmaly: https://github.com/s4nchez/jetty-spring-mvc-jar

1

assembly.xml файл в основном используется для создания архивных файлов. Для простого веб-архива, военных файлов нормальной структуры maven должно быть достаточно.

Вы запросили примеры из нескольких модулей. Предлагаю посмотреть app fuse examples.Даже вы не используете фреймворк приложения, он имеет хорошую структуру файлов maven. Я создал многомодульное приложение mibc для спящего режима с быстрым запуском.

Это справочная структура проекта.

D:. 
    core 
     src 
      main 
       java 
       resources 
        META-INF 
    src 
     site 
    web 
     src 
      main 
       java 
        com 
        mycompany 
         webapp 
          controller 
          filter 
          jsp 
          listener 
          search 
          spring 
          taglib 
          util 
      resources 
       META-INF 
      webapp 
       common 
       decorators 
       images 
       scripts 
        calendar 
       WEB-INF 

Это подходящий раздел веб-проекта pom.xml.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<parent> 
    <groupId>com.mycompany</groupId> 
    <artifactId>myproject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <relativePath>../pom.xml</relativePath> 
</parent> 

<artifactId>web</artifactId> 
<packaging>war</packaging> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>maven-jetty-plugin</artifactId> 
      <version>6.1.26</version> 
      <configuration> 
       <contextPath>/</contextPath> 
       <scanIntervalSeconds>3</scanIntervalSeconds> 
       <scanTargetPatterns> 
        <scanTargetPattern> 
         <directory>src/main/webapp/WEB-INF</directory> 
         <excludes> 
          <exclude>**/*.jsp</exclude> 
         </excludes> 
         <includes> 
          <include>**/*.properties</include> 
          <include>**/*.xml</include> 
         </includes> 
        </scanTargetPattern> 
       </scanTargetPatterns> 
      </configuration> 
     </plugin> 
    </plugins> 
... 
<dependencies> 
    <dependency> 
     <groupId>${project.parent.groupId}</groupId> 
     <artifactId>core</artifactId> 
     <version>${project.parent.version}</version> 
    </dependency> 
... 
</dependencies> 
</project> 

У этого есть зависимость от основного проекта. Всякий раз, когда вы компилируете многомодульный проект, у него есть все необходимые части. Но если вам нужно работать только из каталога веб-проектов. Вам нужно выполнить mvn install в основном каталоге, таким образом, он устанавливается в вашем локальном репозитории, и ваш веб-проект может его использовать. Если вы внесли какие-либо изменения в основной проект, вам необходимо скомпилировать его из основного каталога. В противном случае вы можете использовать maven из каталога веб-проектов как обычно.

Как вы можете видеть, нет необходимости в файле assembly.xml. Вы должны использовать файл assembly.xml для более сложных структур, чем военный файл, например, пользовательскую структуру установщика, которая будет содержать; военные файлы, файлы справки, исполняемые файлы веб-сервера, файлы установочных файлов для их объединения.

Я могу использовать команду mvn package в главном каталоге для создания файла войны. Кроме того, я могу использовать команду jetty: run в каталоге веб-проектов для запуска причала и тестового веб-приложения.

0

У меня очень похожая настройка, которую я думаю, что вы можете использовать с минимальными изменениями. Я запускаю webapp с maven, spring, hibernate и freemarker и т. Д. Мне не нужны какие-либо задачи assembly.xml или ant.

Мой подход заключается в упаковке приложения в виде банки. У этого банка теперь есть основной класс, который начинает причал и по существу развертывается как война. Смотрите здесь для более подробной информации:

http://draconianoverlord.com/2009/01/10/war-less-dev-with-jetty.html

Этот класс можно легко настроить, чтобы принять такие параметры, как номер порта и т.д.

Чтобы запустить приложение, я думаю, есть два хороших варианта:

Просто выполните класс с Java. Однако здесь есть правильная настройка класса. Для этого я использую зависимость maven: build-classpath. Это выводит полный путь к классам, который может использоваться в вашей команде выполнения java. Недостатком этого является то, что вам нужно maven и maven repo, настроенные на машине, где вы работаете. В моем случае это приемлемо, и этот подход работает очень хорошо.

Или вы можете создать исполняемую банку с зависимостями. Для этого я рекомендую плагин maven shade. См. http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html Недостатки этого подхода состоят в том, что вы получаете один огромный файл, чтобы проблемы с classpath и проблемы с зависимостями были трудно решить. Также, если библиотеки зависят от файлов Meta-Inf, они иногда могут перезаписывать друг друга. Плагин Maven shade предоставляет способы обхода этого, но он все равно может быть трудно диагностировать проблему.

Оба этих подхода должны позволять вам сохранять текущую структуру папок и web.xml и т. Д., Но если у вас есть какие-либо проблемы - сообщите мне в комментариях, и я могу расширить ответ.

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