Tomcatで実行するためのwarファイル(Eclipseを使用)を作成するベストプラクティスは何ですか?チュートリアル、リンク、例は高く評価されています。
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ファイル配布ディレクトリを作成し、WARを直接必要とする成果物をコピーする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ファイルをクラスにビルドし、src
の下にあるが実行時に使用可能である必要がある非Javaアーティファクト(プロパティ、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>
最後に、Tomcatの展開場所にWARを直接展開するタスクを設定できます。
<target name="deploy">
<copy file="My.war" todir="${Tomcat.deploydir}" />
</target>
これらすべてを設定したら、Eclipseからdefault
ターゲットを起動するだけで、ソリューションをコンパイル、WAR、デプロイします。
このアプローチの利点は、Eclipse内でもEclipse内でも機能し、プロジェクトで作業している他の開発者とデプロイメント戦略を簡単に共有できる(ソース管理など)ことです。
私は常に「Eclipseからエクスポート」を選択しました。 warファイルをビルドし、必要なすべてのファイルを含めます。プロジェクトをWebプロジェクトとして作成すると、必要な作業はすべて完了します。 Eclipseを使用すると非常に簡単になります。
私たちはすべてのJavaプロジェクトにMaven(Antの兄)を使用しており、非常に気の利いた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ファイルは、war拡張機能を備えた単なる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で新しいWebプロジェクトを作成する場合(私はJava EEバージョンを参照しています)、構造が作成され、Appserverがインストールされている場所を伝えることもできます。あなたのためのアプリケーション。
「エクスポート-> WARファイル」オプションを使用すると、warファイルを保存できます。
何をすべきかわからず、ゼロから始める場合は、Mavenを使用して開始できます。
以下の手順に従うことで、Eclipseで完全に新しい戦争プロジェクトのセットアップを取得できます。
mvn archetype:generate
mvn Eclipse:eclipse
mvn package
を実行してwar自体を作成するか、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>
別の一般的なオプションはgradleです。
http://www.gradle.org/docs/current/userguide/application_plugin.html
Webアプリでwarファイルを作成するには:
Build.gradleで、次を追加します。
apply plugin: 'war'
次に:
./gradlew war
上記の承認済み回答のレイアウトを使用します。
別のオプションは、Eclipseを使用して自動的にビルドすることです。もちろん、継続的な統合環境がある場合は、AntまたはMavenをお勧めします。エクスポートプロパティは毎回設定する必要があるため、エクスポートの代替手段はあまり便利ではありません。
STEPS:
「プロジェクトアーカイブ」サポートを有効にします。これはプロジェクトによって異なる場合があります(Java EE/Webプロジェクトで使用しました)。プロジェクトのルートディレクトリを右クリックします。構成->プロジェクトアーカイブサポートの追加。
[プロジェクトアーカイブ]最上位ディレクトリに新しいアーカイブを作成します。 jarオプションのみがありますが、アーカイブする名前は* .warです。
Fileset-s、つまりどのファイルを含めるかを構成します。通常、Web Deployment Assembly(プロジェクトプロパティ)の構成方法と同様の2つのファイルセットを構成します。
いくつかの設定ファイルを配置した場所に応じて、ファイルセットの除外プロパティを変更する必要がある場合があります。または、さらにファイルセットが必要になる場合があります。
アーカイブを手動で構築するか、サーバーに直接公開します。また、Eclipseによって自動的に構築されます
このコマンドは、WEB-INFフォルダーの外部で使用します。これにより、warファイルが作成されます。これは私が知っている最も速い方法です。
JDKのbinディレクトリを指すこの機能と環境変数を実現するには、JDK 1.7+をインストールする必要があります。
jar -cvf projectname.war *
標準のEclipse動的WebプロジェクトからWARファイルを作成するための単純なシェルコード。 LinuxプラットフォームでRAMファイルシステム(/ dev/shm)を使用します。
#!/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>