Как создать war-файл
каковы наилучшие методы создания файлов war (с помощью eclipse) для запуска на tomcat? учебники, ссылки, примеры высоко ценятся.
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) и легко настраивается.
Пример Конфигурации:
<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.
- скачать и установить Maven
- перейти в командную строку run:
mvn archetype:generate
- выполните предложенные шаги-выберите простой веб-проект java (18) и подходящее имя.
- когда он закончил работать:
mvn eclipse:eclipse
- Запустите Eclipse. Выберите Файл - > импорт - > существующий проект. Выберите каталог, в котором были запущены цели mvn.
- вот и все, теперь у вас должно быть очень хорошее начало для военного проекта в eclipse
- вы можете создать саму войну, запустив
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 рекомендуется. Альтернатива экспорта не очень удобна, потому что вам нужно каждый раз настраивать свойства экспорта.
действия:
включить поддержку "архивы проектов"; это может зависеть от вашего проекта (я использовал его на Java EE/Web project). Щелкните правой кнопкой мыши корневой каталог проекта; настройка -> Добавить Поддержку Архивов Проектов.
перейти и создать новый архив в" Project Archives " top dir. У вас есть только опция jar, но имя вам архив *.война.
настройка набора файлов-s, т. е. какие файлы должны быть включены. Типичным является настройка двух наборов файлов аналогично тому, как настраивается сборка веб-развертывания (свойство проекта).
- копировать в папку WebContent /
- копировать / строить / классы в WEB-INF / classes (создать это набор файлов после определения каталога WEB-INF / classes в архиве)
вам может потребоваться настроить свойство fileset exclude в зависимости от того, где вы разместили некоторые файлы конфигурации, или вам может понадобиться больше наборов файлов, но идея заключается в том, что после настройки этого вам не нужно его изменять.
создайте архив вручную или опубликуйте его непосредственно на сервере; но также автоматически создается для вас 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 из Диспетчера задач:
запустите clean comand в eclips
run 'prod war' fowllowed by project имя.
Проверьте файл журнала и найти то же .файл war в каталоге верстака с той же датой.