Как создать военные файлы - PullRequest
91 голосов
/ 16 июня 2009

Каковы лучшие практики создания военных файлов (с использованием eclipse) для запуска на tomcat? Учебники, ссылки, примеры высоко ценятся.

Ответы [ 13 ]

95 голосов
/ 16 июня 2009

Вы можете использовать Ant для настройки, компиляции, WAR и развертывания решения.

<target name="default" depends="setup,compile,buildwar,deploy"></target>

Затем вы можете выполнить один щелчок в Eclipse, чтобы запустить эту цель Ant. Вот примеры каждого из шагов:

1010 * Предпосылки * Предположим, что ваш код организован следующим образом: ${basedir}/src: файлы Java, свойства, файлы конфигурации XML ${basedir}/web: файлы JSP ${basedir}/web/lib: любые файлы JAR, необходимые во время выполнения ${basedir}/web/META-INF: ваш манифест ${basedir}/web/WEB-INF: Ваши файлы web.xml Настройка

Определите задачу setup, которая создает каталог распространения и копирует любые артефакты, которые должны быть WARRED напрямую:

<target name="setup">
    <mkdir dir="dist" />
    <echo>Copying web into dist</echo>
    <copydir dest="dist/web" src="web" />
    <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/../web/WEB-INF/lib" />
</target>

Compile

Создайте свои Java-файлы в классы и скопируйте любые не-Java-артефакты, которые находятся в src, но должны быть доступны во время выполнения (например, свойства, XML-файлы и т. Д.):

<target name="compile">
    <delete dir="${dist.dir}/web/WEB-INF/classes" />
    <mkdir dir="${dist.dir}/web/WEB-INF/classes" />
    <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="src">
        <classpath>
            <fileset dir="${basedir}/../web/WEB-INF/lib">
                  <include name="*" />
            </fileset>
        </classpath>
    </javac>
    <copy todir="${dist.dir}/web/WEB-INF/classes">
        <fileset dir="src">
            <include name="**/*.properties" />
            <include name="**/*.xml" />
        </fileset>
    </copy>
</target>

Сборка WAR

Создайте саму WAR:

<target name="buildwar">
    <war basedir="${basedir}/dist/web" destfile="My.war"
     webxml="${basedir}/dist/web/WEB-INF/web.xml">
        <exclude name="WEB-INF/**" />
        <webinf dir="${basedir}/dist/web/WEB-INF/">
            <include name="**/*.jar" />
        </webinf>
    </war>
</target>

Deploy

Наконец, вы можете настроить задачу для развертывания WAR непосредственно в папку развертывания Tomcat:

<target name="deploy">
    <copy file="My.war" todir="${tomcat.deploydir}" />
</target>

Нажми и иди!

Как только все это будет настроено, простой запуск цели default из Eclipse скомпилирует, WAR и развернет ваше решение.

Преимущество этого подхода заключается в том, что он будет работать как вне Eclipse, так и внутри Eclipse, и его можно использовать для простого предоставления вашей стратегии развертывания (например, через систему контроля версий) другим разработчикам, которые также работают над вашим проектом.

37 голосов
/ 16 июня 2009

Я всегда только выбирал Экспорт из Eclipse. Он создает файл войны и включает в себя все необходимые файлы. Если вы создали проект как веб-проект, это все, что вам нужно сделать. Затмение делает это очень просто.

23 голосов
/ 16 июня 2009

Мы используем Maven (старшего брата Ant) для всех наших java-проектов, и у него очень изящный плагин WAR. Учебники и использование можно найти там.

Это намного проще, чем Ant, полностью совместимо с Eclipse (используйте maven eclipse: eclipse для создания проектов Eclipse) и легко настраивается.

Домашняя страница Maven

Плагин Maven WAR

Пример конфигурации:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1-alpha-2</version>
    <configuration>
        <outputDirectory>${project.build.directory}/tmp/</outputDirectory>
        <workDirectory>${project.build.directory}/tmp/war/work</workDirectory>
        <webappDirectory>${project.build.webappDirectory}</webappDirectory>
        <cacheFile>${project.build.directory}/tmp/war/work/webapp-cache.xml</cacheFile>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>png</nonFilteredFileExtension>
            <nonFilteredFileExtension>gif</nonFilteredFileExtension>
            <nonFilteredFileExtension>jsp</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
        <webResources>
            <resource>
                <directory>src/main/webapp/</directory>
                <targetPath>WEB-INF</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </webResources>
        <warName>Application</warName>
    </configuration>
</plugin>
14 голосов
/ 16 июня 2009

Файл war - это просто файл jar с расширением war, но он работает так, как на самом деле структурировано содержимое.

Учебное пособие по J2EE / Java EE может быть началом:

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents3.html

И спецификация сервлета содержит ужасные детали:

http://java.sun.com/products/servlet/download.html

Если вы создаете новый веб-проект в Eclipse (я имею в виду версию Java EE), структура создается для вас, и вы также можете указать, где установлен ваш Appserver, и он развернет и запустит приложение для вас. .

Использование опции «Export-> WAR file» позволит вам сохранить файл war.

12 голосов
/ 17 июня 2009

Если вы не уверены, что делать и начинаете с нуля, Maven может помочь вам начать работу.

Следуя приведенным ниже инструкциям, вы можете получить совершенно новую настройку военного проекта в Eclipse.

  1. Скачать и установить Maven
  2. Перейдите в командную строку и запустите: mvn archetype:generate
  3. Выполните предложенные шаги - выберите простой веб-проект Java (18) и подходящее имя.
  4. Когда он закончится, запустите: mvn eclipse:eclipse
  5. Запустите Eclipse. Выберите Файл -> Импорт -> Существующий проект. Выберите каталог, в котором вы выполняли mvn цели.
  6. Вот и все, теперь у вас должно быть очень хорошее начало военного проекта в затмении
  7. Вы можете создать саму войну, запустив mvn package или развернув ее, настроив сервер в Eclipse и просто добавив добавление проекта на сервер.

Как и некоторые другие говорили, что недостатком использования maven является то, что вы должны использовать соглашения maven. Но я думаю, что если вы только начинаете, изучение соглашений является хорошей идеей, прежде чем вы начнете делать свои собственные. Там нет ничего, чтобы помешать вам изменить / рефакторинг на ваш собственный предпочтительный метод на более позднем этапе.

Надеюсь, это поможет.

4 голосов
/ 16 июня 2009
3 голосов
/ 12 ноября 2009

Используйте код сборки муравья Я использую это для моего проекта SMS

<property name="WEB-INF" value="${basedir}/WebRoot/WEB-INF" />
<property name="OUT" value="${basedir}/out" />
<property name="WAR_FILE_NAME" value="mywebapplication.war" />
<property name="TEMP" value="${basedir}/temp" />

<target name="help">
    <echo>
        --------------------------------------------------
        compile - Compile
        archive - Generate WAR file
        --------------------------------------------------
    </echo>
</target>

<target name="init">
    <delete dir="${WEB-INF}/classes" />
    <mkdir dir="${WEB-INF}/classes" />
</target>

<target name="compile" depends="init">
    <javac srcdir="${basedir}/src" 
                destdir="${WEB-INF}/classes" 
                classpathref="libs">
    </javac>
</target>

<target name="archive" depends="compile">
    <delete dir="${OUT}" />
    <mkdir dir="${OUT}" />
    <delete dir="${TEMP}" />
    <mkdir dir="${TEMP}" />
    <copy todir="${TEMP}" >
        <fileset dir="${basedir}/WebRoot">
        </fileset>
    </copy>
    <move file="${TEMP}/log4j.properties" 
                    todir="${TEMP}/WEB-INF/classes" />
    <war destfile="${OUT}/${WAR_FILE_NAME}" 
                    basedir="${TEMP}" 
                    compress="true" 
                    webxml="${TEMP}/WEB-INF/web.xml" />
    <delete dir="${TEMP}" />
</target>

<path id="libs">
    <fileset includes="*.jar" dir="${WEB-INF}/lib" />
</path>

2 голосов
/ 23 января 2015

Другим распространенным вариантом является gradle.

http://www.gradle.org/docs/current/userguide/application_plugin.html

Чтобы создать военный файл в веб-приложении:

В build.gradle добавьте:

apply plugin: 'war'

Тогда:

./gradlew war

Используйте макет из принятого ответа выше.

2 голосов
/ 29 мая 2013

Другой вариант - создать его автоматически с помощью Eclipse. Конечно, если у вас есть среда непрерывной интеграции, рекомендуется Ant или Maven. Альтернатива экспорта не очень удобна, потому что вам нужно каждый раз настраивать свойства экспорта.

ШАГИ:

  1. Включить поддержку "Project Archives"; это может зависеть от вашего проекта (я использовал его в проекте Java EE / Web). Щелкните правой кнопкой мыши корневой каталог проекта; Настройка -> Добавить поддержку архивов проектов.

  2. Перейдите и создайте новый архив в верхней директории "Project Archives". У вас есть только опция JAR, но имя вашего архива * .war.

  3. Настройка наборов файлов, т. Е. Какие файлы должны быть включены. Типичным является настройка двух наборов файлов, аналогичных настройке сборки веб-развертывания (свойство проекта).

    • copy / WebContent to /
    • copy / build / classes в WEB-INF / classes (создайте этот набор файлов после определения каталога WEB-INF / classes в архиве)
  4. Возможно, вам понадобится настроить свойство исключение набора файлов, в зависимости от того, где вы разместили некоторые файлы конфигурации, или вам может понадобиться больше наборов файлов, но идея в том, что после настройки этого вам не нужно его менять.

  5. Построить архив вручную или опубликовать непосредственно на сервере; но также автоматически создается для вас Eclipse

1 голос
/ 13 февраля 2017

Используйте эту команду вне папки WEB-INF. Это должно создать ваш военный файл. Это самый быстрый метод, который я знаю.

Вам понадобится JDK 1.7+, установленный для достижения этого умения и переменных среды, которые указывают на каталог bin вашего JDK.

jar -cvf projectname.war *

Ссылочная ссылка

...