質問
Tomcatで実行するために(Eclipseを使用して)warファイルを作成するベストプラクティスは何ですか?チュートリアル、リンク、例は高く評価されています。
解決
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
タスクを定義して、配布ディレクトリを作成し、WARを直接必要とするアーティファクトをコピーします。
<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を構築
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のインストール場所を指定して、アプリケーションをデプロイして開始することもできます。
&quot; Export-&gt; WARファイル&quot;の使用オプションを使用すると、warファイルを保存できます。
何をすべきかわからず、ゼロから始める場合は、Mavenを使用して開始できます。
以下の手順に従うことで、Eclipseで完全に新しい戦争プロジェクトのセットアップを取得できます。
- Maven をダウンロードしてインストールします
- コマンドラインを実行します:
mvn archetype:generate
- 指示された手順に従います-単純なJava Webプロジェクト(18)と適切な名前を選択します。
- 終了したら、次を実行します:
mvn eclipse:eclipse
- Eclipseを起動します。ファイルを選択-&gt;インポート-&gt;既存のプロジェクト。 mvnゴールを実行したディレクトリを選択します。
- これで、日食での戦争プロジェクトを非常にうまく開始できるはずです
-
mvn package
を実行してwar自体を作成するか、Eclipseでサーバーを設定してサーバーにプロジェクトを追加するだけで展開できます。
他の人が言っているように、mavenを使用することの欠点は、mavenの規則を使用する必要があることです。しかし、始めたばかりの場合は、独自の慣習を作成する前に、慣習を学ぶことをお勧めします。後で自分の好みのメソッドに変更/リファクタリングするのを止めるものは何もありません。
これがお役に立てば幸いです。
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プロジェクトで使用しました)。プロジェクトのルートディレクトリを右クリックします。設定-&gt;プロジェクトアーカイブサポートを追加します。
-
「プロジェクトアーカイブ」に新しいアーカイブを作成します。トップディレクトリjarオプションしかありませんが、アーカイブする名前は* .warです。
-
Fileset-s、つまりどのファイルを含めるかを設定します。通常、Web Deployment Assembly(プロジェクトプロパティ)の構成方法と同様の2つのファイルセットを構成します。
- / WebContentを/ にコピーします
- / build / classesをWEB-INF / classesにコピーします(アーカイブでWEB-INF / classesディレクトリを定義した後にこのファイルセットを作成します)
-
いくつかの設定ファイルを配置した場所に応じて、fileset excludeプロパティをtweekする必要がある場合や、さらにファイルセットが必要な場合がありますが、これを設定したら変更する必要はありません。
-
アーカイブを手動で構築するか、サーバーに直接公開します。 Eclipseによって自動的に構築されます
もう1つの一般的なオプションはgradleです。
http://www.gradle.org/docs/current/userguide /application_plugin.html
Webアプリでwarファイルを作成するには:
build.gradleで、次を追加します。
apply plugin: 'war'
その後:
./gradlew war
上記の承認済み回答のレイアウトを使用します。
WEB-INFフォルダーの外部でこのコマンドを使用します。これにより、warファイルが作成されます。これは私が知っている最も速い方法です。
JDKのbinディレクトリを指すこの特技と環境変数を実現するには、JDK 1.7+をインストールする必要があります。
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>
標準のEclipse動的WebプロジェクトからWARファイルを作成するための単純なシェルコード。 LinuxプラットフォームでRAMファイルシステム(/ dev / shm)を使用します。
#!/bin/sh
UTILITY=$(basename <*>)
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
** Eclips Gaynemedでgrails WebプロジェクトのWarファイルを作成**
1。プロジェクトのインポート:
2.datasource.groovyファイルを変更します
これに似ています:url =&quot; jdbc:postgresql://18.247.120.101:8432 / PGMS&quot;
2.chnge AppConfig.xml
3。タスクマネージャーからJavaを強制終了します。
-
Eclipseでクリーンコマンドを実行
-
プロジェクト名で「prod war」を実行します。
-
ログファイルを確認し、同じ日付のワークベンチのディレクトリで同じ.warファイルを見つけます。