web-dev-qa-db-ja.com

warファイルを作成する方法

Tomcatで実行するためのwarファイル(Eclipseを使用)を作成するベストプラクティスは何ですか?チュートリアル、リンク、例は高く評価されています。

92
ultraman

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

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内でも機能し、プロジェクトで作業している他の開発者とデプロイメント戦略を簡単に共有できる(ソース管理など)ことです。

96
David Citron

私は常に「Eclipseからエクスポート」を選択しました。 warファイルをビルドし、必要なすべてのファイルを含めます。プロジェクトをWebプロジェクトとして作成すると、必要な作業はすべて完了します。 Eclipseを使用すると非常に簡単になります。

37
Mech Software

私たちはすべてのJavaプロジェクトにMaven(Antの兄)を使用しており、非常に気の利いた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>
23
mikek

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ファイルを保存できます。

14
boxofrats

何をすべきかわからず、ゼロから始める場合は、Mavenを使用して開始できます。

以下の手順に従うことで、Eclipseで完全に新しい戦争プロジェクトのセットアップを取得できます。

  1. ダウンロードしてインストールします Maven
  2. コマンドラインを実行します:mvn archetype:generate
  3. プロンプトの手順に従います-単純なJava Webプロジェクト(18)と適切な名前を選択します。
  4. 終了したら、実行します:mvn Eclipse:eclipse
  5. Eclipseを起動します。 [ファイル]-> [インポート]-> [既存のプロジェクト]を選択します。 mvnゴールを実行したディレクトリを選択します。
  6. これで、Eclipseでの戦争プロジェクトを非常に良好に開始できるはずです。
  7. mvn packageを実行してwar自体を作成するか、Eclipseでサーバーをセットアップし、プロジェクトをサーバーに追加するだけでデプロイできます。

他の人が言っているように、Mavenを使用することの欠点は、Mavenの規則を使用する必要があることです。しかし、あなたが始めたばかりなら、自分で作り始める前に慣習を学ぶことは良い考えだと思います。後で自分の好みのメソッドに変更/リファクタリングするのを止めるものは何もありません。

お役に立てれば。

12
Pablojim

Ant warタスク を使用します

4
Ilya Boyandin

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

別の一般的なオプションはgradleです。

http://www.gradle.org/docs/current/userguide/application_plugin.html

Webアプリでwarファイルを作成するには:

Build.gradleで、次を追加します。

apply plugin: 'war'

次に:

./gradlew war

上記の承認済み回答のレイアウトを使用します。

2
Charlie Dalsass

別のオプションは、Eclipseを使用して自動的にビルドすることです。もちろん、継続的な統合環境がある場合は、AntまたはMavenをお勧めします。エクスポートプロパティは毎回設定する必要があるため、エクスポートの代替手段はあまり便利ではありません。

STEPS:

  1. 「プロジェクトアーカイブ」サポートを有効にします。これはプロジェクトによって異なる場合があります(Java EE/Webプロジェクトで使用しました)。プロジェクトのルートディレクトリを右クリックします。構成->プロジェクトアーカイブサポートの追加。

  2. [プロジェクトアーカイブ]最上位ディレクトリに新しいアーカイブを作成します。 jarオプションのみがありますが、アーカイブする名前は* .warです。

  3. Fileset-s、つまりどのファイルを含めるかを構成します。通常、Web Deployment Assembly(プロジェクトプロパティ)の構成方法と同様の2つのファイルセットを構成します。

    • / WebContentを/にコピーします
    • / build/classesをWEB-INF/classesにコピーします(アーカイブでWEB-INF/classesディレクトリを定義した後にこのファイルセットを作成します)
  4. いくつかの設定ファイルを配置した場所に応じて、ファイルセットの除外プロパティを変更する必要がある場合があります。または、さらにファイルセットが必要になる場合があります。

  5. アーカイブを手動で構築するか、サーバーに直接公開します。また、Eclipseによって自動的に構築されます

2
arpadf

このコマンドは、WEB-INFフォルダーの外部で使用します。これにより、warファイルが作成されます。これは私が知っている最も速い方法です。

JDKのbinディレクトリを指すこの機能と環境変数を実現するには、JDK 1.7+をインストールする必要があります。

jar -cvf projectname.war *

参照リンク

1
XChikuX

標準の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
0
Joe Horvath

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