Как создать war-файл


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

13 89

13 ответов:

можно использовать АНТ для настройки, компиляции,войны, и развернуть решение.

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

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

предпосылки

мы предположим, что у вас есть код, организованный следующим образом:

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

настройка

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

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

построить войны

создать саму войну:

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

развернуть

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

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

нажмите и вперед!

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

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

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

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

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

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

в Maven войны плагин

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

<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

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

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

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

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

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

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

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

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

надеюсь, что это помогает.

использовать Ant war task

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

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

действия:

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

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

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

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

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

еще один распространенный вариант-gradle.

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

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

в build.gradle, add:

apply plugin: 'war'

затем:

./gradlew war

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

более простое решение, которое также обновляет рабочую область 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>

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

#!/bin/sh

UTILITY=$(basename )

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

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

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

    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

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

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

jar -cvf projectname.war *

Ссылка

**создание файла войны в веб-проекте Eclips Gaynemed of grails **

1.Импорт проекта:

2.Измените источник данных.заводной файл

вот так: url= "jdbc: postgresql: / / 18.247.120.101:8432 / PGMS"

2.chnge AppConfig.xml

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

  1. запустите clean comand в eclips

  2. run 'prod war' fowllowed by project имя.

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