Як створити військові файли


96

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

Відповіді:


98

Ви можете використовувати 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завдання, яке створює каталог розповсюдження та копіює будь-які артефакти, які потрібно безпосередньо захищати:

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

Побудуйте ВІЙНУ

Створіть саму війну:

<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цілі з Eclipse скомпілює, WAR і розгорне ваше рішення.

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


ну я хочу розгорнути його в tomcat. Як мені змінити таргер?

Не могли б ви детальніше розказати? Поки $ {tomcat.deploydir} вказує на ваш каталог розгортання контексту Tomcat, це повинно це зробити. Немає?
Девід Сітрон,

1
У цілі війни немає зайвого '<exclude name = "WEB-INF / **" />'. Ви створили файли * .class у цій папці, і виключення їх не працює. Видаліть цей рядок виключення з військової цілі, яка працює.
ankitjaininfo

2
Ця відповідь без потреби ускладнюється.
Alex R

38

Я завжди вибрав Експорт із Eclipse. Він створює військовий файл і включає всі необхідні файли. Якщо ви створили проект як веб-проект, це все, що вам потрібно буде зробити. Eclipse робить це дуже просто.


Дякую! і для того, що воно того варте, ви вибираєте "Експорт" у меню "Файл", потім у "Виберіть пункт експорту" введіть "ВІЙНА" і з'явиться опція файлу війни.
Бред Паркс,

4
мій вибір для швидких і брудних веб-програм. написання сценарію мурашки лише для того, щоб вивести тестову ВІЙНУ - це занадто велика робота.
Ренан,

іншим рішенням замість створення мурашиного файлу було б перейти до папки, яку ви хочете обернути у файл WAR, і виконати цю команду "jar -cvf name.war *".
MC

Дякую за це, НАБАГАТО простіше, ніж налаштування Maven або Ant (коли це не потрібно).
simon

23

Ми використовуємо 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>

1
Я повернув вам вашу думку (хоча не я її видалив). Maven, безумовно, є розумним вибором, якщо ви випадково (хочете?) Вписатись у їхню конкретну версію "конвенції щодо конфігурації".
Девід Сітрон,

1
Мені це подобається =) Я працюю в якості CM над досить великим проектом, і я вдячний за те, що для мене зроблена груба робота конфігурації проекту. Крім того, чудова підтримка плагіна. Мати можливість створити і запустити мультимодульний проект із плагіном WAR за допомогою Surefire та CheckStyle за п’ять хвилин - це задоволення. Мураха, хоча він більш відкритий і, можливо, потужніший, у порівнянні з ним - клопіт. У будь-якому випадку, Maven є підмножиною Ant, тому, якщо вам потрібно зробити там будь-який сценарій, ласкаво просимо.
mikek

4
Крім того, XML-структура Maven базується на ANT, а ANT включена як підмножина Maven.
mikek

14

Файл війни - це просто файл jar з військовим розширенням, але що змушує його працювати - це те, як фактично структурований вміст.

Підручник з 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), структура створена для вас, і ви також можете сказати їй, де встановлений ваш сервер додатків, і він розгорне і запустить програму для вас.

Використання опції "Експорт-> WAR-файл" дозволить вам зберегти військовий файл.


12

Якщо ви не впевнені, що робити, і починаєте з нуля, тоді Maven може допомогти вам розпочати роботу.

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

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

Як сказали деякі інші, недоліком використання maven є те, що ви повинні використовувати конвенції maven. Але я думаю, що якщо ви тільки починаєте, вивчення конвенцій є гарною ідеєю перед тим, як почати створювати власні. Ніщо не завадить вам змінити / переробити на ваш власний бажаний метод пізніше.

Сподіваюся, це допомагає.



3

Використовуйте код побудови мурашок. Я використовую це для мого 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

Іншим варіантом було б побудувати його автоматично за допомогою Eclipse. Звичайно, якщо у вас постійне середовище інтеграції, рекомендується Ant або Maven. Альтернатива експорту не дуже зручна, оскільки вам доводиться налаштовувати кожен раз, коли властивості експорту.

КРОКИ:

  1. Увімкнути підтримку "Архіви проектів"; це може залежати від вашого проекту (я використовував його у Java EE / веб-проекті). Клацніть правою кнопкою миші кореневий каталог проекту; Налаштування -> Додати підтримку архівів проектів.

  2. Перейдіть і створіть новий архів у верхній директорії "Архіви проектів". У вас є лише варіант jar, але ім'я ви архівуєте * .war.

  3. Налаштуйте набори файлів, тобто які файли будуть включені. Типовим є налаштування двох наборів файлів, подібних до того, як налаштовано Web Deployment Assembly (властивість проекту).

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

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



2

Використовуйте таку команду поза папкою WEB-INF. Це має створити ваш військовий файл, і це найшвидший метод, який я знаю.

(Вам знадобляться встановлені JDK 1.7+ та змінні середовища, які вказують на каталог bin вашого JDK.)

jar -cvf projectname.war *

Довідкове посилання


0

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

0

Спрощений код оболонки для створення файлів 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

-3

** Створення файлу війни у ​​веб-проекті Eclips Gaynemed of grails **

1. Імпорт проекту:

2. Змініть файл datasource.groovy

Ось так: url = "jdbc: postgresql: //18.247.120.101: 8432 / PGMS"

2.chnge AppConfig.xml

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

  1. запустіть чисту команду в затемненнях

  2. запустити "prod war" за допомогою назви проекту.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.