Каковы лучшие практики создания файлов войны (с использованием eclipse) для запуска на tomcat? руководства, ссылки, примеры высоко ценятся.
Каковы лучшие практики создания файлов войны (с использованием eclipse) для запуска на tomcat? руководства, ссылки, примеры высоко ценятся.
Ответы:
Вы можете использовать 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>
Создайте саму ВОЙНУ:
<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, и его можно использовать для простого обмена вашей стратегией развертывания (например, через систему контроля версий) с другими разработчиками, которые также работают над вашим проектом.
Я всегда просто выбирал Экспорт из 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), структура создается для вас, и вы также можете указать ей, где установлен ваш сервер приложений, и он развернет и запустит приложение за вас.
Использование опции «Экспорт-> WAR-файл» позволит вам сохранить военный файл.
Если вы не знаете, что делать, и начинаете с нуля, Maven поможет вам начать работу.
Выполнив следующие шаги, вы можете идеально настроить новый военный проект в eclipse.
mvn archetype:generate
mvn eclipse:eclipse
mvn package
или развернув ее, настроив сервер в eclipse и просто добавив проект на сервер.Как говорили некоторые другие, обратная сторона использования maven заключается в том, что вы должны использовать соглашения maven. Но я думаю, что если вы только начинаете, изучение условных обозначений - хорошая идея, прежде чем вы начнете создавать свои собственные. Ничто не помешает вам изменить / провести рефакторинг на ваш собственный предпочтительный метод позже.
Надеюсь это поможет.
Используйте задание Ant War
Используйте код сборки 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). Щелкните правой кнопкой мыши корневой каталог проекта; Настроить -> Добавить поддержку архивов проектов.
Идите и создайте новый архив в верхнем каталоге «Архивы проекта». У вас есть только опция jar, но вы называете архив * .war.
Настройте Fileset-ы, то есть какие файлы должны быть включены. Обычно настраиваются два набора файлов аналогично настройке сборки веб-развертывания (свойство проекта).
Возможно, вам потребуется настроить свойство exclude набора файлов в зависимости от того, где вы разместили некоторые из файлов конфигурации, или вам может потребоваться больше наборов файлов, но идея состоит в том, что после настройки этого параметра вам не нужно его изменять.
Собрать архив вручную или опубликовать прямо на сервере; но также автоматически создается для вас Eclipse
Другой распространенный вариант - gradle.
http://www.gradle.org/docs/current/userguide/application_plugin.html
Чтобы создать файл войны в веб-приложении:
В build.gradle добавьте:
apply plugin: 'war'
Затем:
./gradlew war
Используйте макет из принятого ответа выше.
Используйте следующую команду вне папки WEB-INF. Это должно создать ваш файл войны, и это самый быстрый способ, который я знаю.
(Вам потребуется установленный JDK 1.7+ и переменные среды, указывающие на каталог bin вашего JDK.)
jar -cvf projectname.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 $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
** Создание файла War в Eclips Gaynemed веб-проекта grails **
1. Импорт проекта:
2.Измените файл datasource.groovy.
Как это: url = "jdbc: postgresql: //18.247.120.101: 8432 / PGMS"
2. изменить AppConfig.xml
3. убить Java из диспетчера задач:
запустить чистую команду в eclips
запустите 'prod war' по названию проекта.
Проверьте файл журнала и найдите тот же файл .war в каталоге рабочей среды с той же датой.