Как создать военные файлы

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

13 ответов

Решение

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

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

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

Предпосылками

Мы предполагаем, что ваш код организован так:

  • ${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>

компилировать

Создайте свои файлы 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:

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

развертывание

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

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

Нажми и иди!

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

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

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

Мы используем 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>

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

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

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

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

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

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

Использование опции "Экспорт->WAR-файл" позволит вам сохранить военный файл.

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

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

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

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

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

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

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

jar -cvf projectname.war *

Ссылка Ссылка

Используйте код сборки муравья Я использую это для моего проекта 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>

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

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

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

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

apply plugin: 'war'

Затем:

./gradlew war

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

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

ШАГИ:

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

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

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

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

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

Упрощенный код оболочки для создания файлов WAR из стандартного динамического веб-проекта Eclipse. Использует файловую систему RAM (/dev/shm) на платформе Linux.

#!/bin/sh

UTILITY=$(basename $0)

if [ -z "$1" ] ; then
    echo "usage: $UTILITY [-s] <web-app-directory>..."
    echo "       -s ..... With source"
    exit 1
fi

if [ "$1" == "-s" ] ; then
    WITH_SOURCE=1
    shift
fi

while [ ! -z "$1" ] ; do
    WEB_APP_DIR=$1

    shift

    if [ ! -d $WEB_APP_DIR ] ; then
        echo "\"$WEB_APP_DIR\" is not a directory"
        continue
    fi

    if [ ! -d $WEB_APP_DIR/WebContent ] ; then
        echo "\"$WEB_APP_DIR\" is not a Web Application directory"
        continue
    fi

    TMP_DIR=/dev/shm/${WEB_APP_DIR}.$$.tmp
    WAR_FILE=/dev/shm/${WEB_APP_DIR}.war

    mkdir $TMP_DIR

    pushd $WEB_APP_DIR > /dev/null
    cp -r WebContent/* $TMP_DIR
    cp -r build/* $TMP_DIR/WEB-INF
    [ ! -z "$WITH_SOURCE" ] && cp -r src/* $TMP_DIR/WEB-INF/classes
    cd $TMP_DIR > /dev/null
    [ -e $WAR_FILE ] && rm -f $WAR_FILE
    jar cf $WAR_FILE .
    ls -lsF $WAR_FILE
    popd > /dev/null

    rm -rf $TMP_DIR
done

Более простое решение, которое также обновляет рабочее пространство Eclipse:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">    
    <target name="default">
        <war destfile="target/MyApplication.war" webxml="web/WEB-INF/web.xml">
            <fileset dir="src/main/java" />
            <fileset dir="web/WEB-INF/views" />
            <lib dir="web/WEB-INF/lib"/>
            <classes dir="target/classes" />
        </war>
        <eclipse.refreshLocal resource="MyApplication/target" depth="infinite"/>
    </target>
</project>

** Создание военного файла в веб-проекте Eclips Gaynemed of Grails **

1. Импортный проект:

2. Измените файл datasource.groovy.

Например: url = "jdbc: postgresql: //18.247.120.101: 8432 / PGMS"

2.chnge AppConfig.xml

3. убить Java из диспетчера задач:

  1. запустить команду в eclips

  2. запустить 'prod war', следуя названию проекта.

  3. Проверьте файл журнала и найдите тот же файл.war в каталоге рабочего места с той же датой.

Другие вопросы по тегам